Snapshot idea/138.1029 from git://git.jetbrains.org/idea/community.git

Update from idea/138.538 to idea/138.1029

Change-Id: I828f829a968439a99ec67640990c18ff7c9b58ce
diff --git a/java/java-tests/java-tests.iml b/java/java-tests/java-tests.iml
index 248b1d3..09b0e28 100644
--- a/java/java-tests/java-tests.iml
+++ b/java/java-tests/java-tests.iml
@@ -16,7 +16,7 @@
     <orderEntry type="library" name="Velocity" level="project" />
     <orderEntry type="module" module-name="java-i18n" exported="" />
     <orderEntry type="module" module-name="compiler-impl" />
-    <orderEntry type="library" name="asm4" level="project" />
+    <orderEntry type="library" name="asm5" level="project" />
     <orderEntry type="module" module-name="instrumentation-util" />
     <orderEntry type="library" name="Groovy" level="project" />
     <orderEntry type="module" module-name="IntelliLang-java" scope="RUNTIME" />
diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java
index d53d73e..3cf8eb4 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingParen_after.java
@@ -3,7 +3,6 @@
     abstract void a();
     
     {
-        a();
-        <caret>
+        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
index d53d73e..3cf8eb4 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolon_after.java
@@ -3,7 +3,6 @@
     abstract void a();
     
     {
-        a();
-        <caret>
+        a();<caret>
     }
 }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/ArrayInitializerRBracket_after.java b/java/java-tests/testData/codeInsight/completeStatement/ArrayInitializerRBracket_after.java
index d766b4a..2a09299 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/ArrayInitializerRBracket_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/ArrayInitializerRBracket_after.java
@@ -1,6 +1,5 @@
 public class Foo {
     public void fails() {
-        boolean[] a = new boolean[f()];
-        <caret>
+        boolean[] a = new boolean[f()];<caret>
     }
 }
\ 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
index 059822d..7a129a9 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/BraceFixeNewLine_after.java
@@ -3,7 +3,6 @@
         int k1 = 1;
         int k2 = 2;
         int[] array = new int[]{k1, k2};
-        <caret>
 
         System.out.print(k1);
     }
diff --git a/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java b/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java
index 07d7649..b690a46 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/CdrEndlessLoop_after.java
@@ -1,6 +1,5 @@
 public class Test {
     public int foo(int i) {
-        int ii = foo(0);
-        <caret>
+        int ii = foo(0);<caret>
     }
 }
\ 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
index f146a88..209898f 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/FollowedByComment_after.java
@@ -1,7 +1,6 @@
 public class Foo {
    public void foo() {
-       foo();
-       <caret>
+       foo();<caret>
        // some line comment
    }
 }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java
index 3579bfd..61fca24 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEA22125_after.java
@@ -1,7 +1,6 @@
 
 public class Junk {
     public static void main(String[] args) {
-        int i = 1; // comment
-        <caret>
+        int i = 1; // comment<caret>
     }
 }
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java
index 89767d3..c61c4ca 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/IDEADEV40479_after.java
@@ -1,7 +1,6 @@
 
 public class Junk {
     public static void main(String[] args) {
-        int[] arr = new int[]{1, 2, 3};
-        <caret>
+        int[] arr = new int[]{1, 2, 3};<caret>
     }
 }
diff --git a/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java b/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java
index 2aa9baa..608de1e 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/IncompleteCall_after.java
@@ -1,8 +1,7 @@
 
 public class Foo {
     {
-        foo();
-        <caret>
+        foo();<caret>
         foo();
     }
 }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completeStatement/MultilineCall_after.java b/java/java-tests/testData/codeInsight/completeStatement/MultilineCall_after.java
index 77770c0..1d2e3fc 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/MultilineCall_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/MultilineCall_after.java
@@ -1,7 +1,6 @@
 class Test {
   Object method() {
       method(
-              factory());
-      <caret>
+              factory());<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
index b7512bc..0bdd9c0 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/NewInParentheses_after.java
@@ -1,7 +1,6 @@
 
 class foo {
     {
-        Object d = ((String) new String());
-        <caret>
+        Object d = ((String) new String());<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
index 9b159d2..cecc090 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/Parenthesized_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/Parenthesized_after.java
@@ -1,7 +1,6 @@
 
 class Foo {
     {
-        tx2 = (long) (vcx + vw);
-        <caret>
+        tx2 = (long) (vcx + vw);<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
index 977a63e..b76baf5 100644
--- a/java/java-tests/testData/codeInsight/completeStatement/StringLiteral_after.java
+++ b/java/java-tests/testData/codeInsight/completeStatement/StringLiteral_after.java
@@ -1,7 +1,6 @@
 
 class foo {
     {
-        String s = "a";
-        <caret>
+        String s = "a";<caret>
     }
 }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/CharsetName.java b/java/java-tests/testData/codeInsight/completion/normal/CharsetName.java
new file mode 100644
index 0000000..c932c81
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/CharsetName.java
@@ -0,0 +1,7 @@
+import java.nio.charset.Charset;
+
+public final class FileAttributes {
+  {
+    Charset.forName("utf<caret>")
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DeepInner.java b/java/java-tests/testData/codeInsight/completion/normal/DeepInner.java
new file mode 100644
index 0000000..33d1ac4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DeepInner.java
@@ -0,0 +1,13 @@
+class ClassMain{
+  public static class ClassInner1{
+    public static class ClassInner2{
+
+    }
+  }
+}
+
+class Foo {
+  {
+    new ClassMain.Cla<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java b/java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java
new file mode 100644
index 0000000..f46d6f1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java
@@ -0,0 +1,13 @@
+class ClassMain{
+  public static class ClassInner1{
+    public static class ClassInner2{
+
+    }
+  }
+}
+
+class Foo {
+  {
+    new ClassMain.ClassInner1.ClassInner2()<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java
index 4761cce..43e9168 100644
--- a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java
+++ b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterWrapsConstructorCall_after.java
@@ -8,7 +8,6 @@
   }
 
   public void test1() {
-      build(new EntityBuilder());
-      <caret>
+      build(new EntityBuilder());<caret>
   }
 }
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/HonorFirstLetterCase.java b/java/java-tests/testData/codeInsight/completion/normalSorting/HonorFirstLetterCase.java
new file mode 100644
index 0000000..7edb9cd
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/HonorFirstLetterCase.java
@@ -0,0 +1,11 @@
+import java.io.*;
+
+class Foo {
+  {
+    pim<caret>
+  }
+}
+
+class PNGImageDecoder {}
+class PImageDecoder {}
+class posIdMap {}
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferAnnotationsToInterfaceKeyword.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferAnnotationsToInterfaceKeyword.java
new file mode 100644
index 0000000..7d1d4ff
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferAnnotationsToInterfaceKeyword.java
@@ -0,0 +1,4 @@
+class A {
+  @<caret>
+  void foo(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferThrownExceptionsInCatch.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferThrownExceptionsInCatch.java
new file mode 100644
index 0000000..c1d4122
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferThrownExceptionsInCatch.java
@@ -0,0 +1,15 @@
+import java.io.*;
+
+class Foo {
+  {
+    try {
+      foo();
+    } catch (<caret>)
+  }
+
+  private void foo() throws FileNotFoundException {
+  }
+
+  private void bar() throws ArrayIndexOutOfBoundsException {
+  }
+}
\ 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
index 484b537..9d25f93 100644
--- a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter-out.java
+++ b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorArgsSmartEnter-out.java
@@ -5,7 +5,6 @@
 
     {
 
-        List l = new ArrayList(239);
-        <caret>
+        List l = new ArrayList(239);<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
index 1583bee..e95297e 100644
--- a/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish-out.java
+++ b/java/java-tests/testData/codeInsight/completion/smartType/SmartFinish-out.java
@@ -2,8 +2,7 @@
 
     {
         Foo foo = null;
-        Foo bar = id(foo);
-        <caret>
+        Foo bar = id(foo);<caret>
     }
 
     Foo id(Foo foo) {return foo;}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java
index 88dd953..45663a1 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/IllegalForwardReference.java
@@ -13,7 +13,7 @@
   int k = 1 + <error descr="Illegal forward reference">ki</error>;
   int ki;
 
-  final int fi5 = <error descr="Illegal forward reference">fi5</error> + 1;
+  final int fi5 = <error descr="Illegal self reference">fi5</error> + 1;
 }
 
 class a1 {
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java
index cd9c7e1..8ec18fd 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg1.java
@@ -5,14 +5,14 @@
     <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>> n1 = new Neg01<><error descr="'Neg01(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Neg01' cannot be applied to '(java.lang.String)'">("")</error>;
+        Neg01<?> n3 = new Neg01<><error descr="'Neg01(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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/DiamondNeg2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg2.java
index f1a2f75..045ba94 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg2.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg2.java
@@ -6,26 +6,26 @@
     }
 
     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>> f1 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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>> f1 = new Neg02.Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Neg02.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Neg02.Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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
index ac66d2a..29295eb 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg3.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg3.java
@@ -6,38 +6,38 @@
     }
 
     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>> f1 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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>> f1 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = new Neg03<U>.Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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>> f1 = n.new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Neg03.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> f3 = n.new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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
index 55b50c5..ecf72df 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg4.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg4.java
@@ -5,14 +5,14 @@
             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>> n1 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' in 'Foo' cannot be applied to '(java.lang.String)'">("")</error>;
+        Foo<?> n3 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' 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.Number & java.lang.String)' 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>;
+        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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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.Number & java.lang.String, 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/DiamondNeg7.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg7.java
index 84771a6..3d356a9 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg7.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/DiamondNeg7.java
@@ -4,5 +4,5 @@
        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>;
+   SuperFoo<String> sf1 = new Foo<><error descr="'Foo(java.lang.Number & java.lang.String)' in 'Neg07.Foo' cannot be applied to '(java.lang.String)'">("")</error>;
 }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA111420.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA111420.java
index eafce26..d5e43e1 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA111420.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA111420.java
@@ -1,7 +1,7 @@
 import java.util.List;
 
 public class Test {
-    private static final <error descr="Incompatible types. Found: 'java.util.List<java.lang.Class<? extends java.io.Serializable & java.lang.Cloneable>>', required: 'java.util.List<java.lang.Class<?>>'">List<Class<?>> PRIMITIVE_ARRAY_TYPES = asList(byte[].class, int[].class);</error>
+    private static final <error descr="Incompatible types. Found: 'java.util.List<java.lang.Class<? extends java.lang.Cloneable & java.io.Serializable>>', required: 'java.util.List<java.lang.Class<?>>'">List<Class<?>> PRIMITIVE_ARRAY_TYPES = asList(byte[].class, int[].class);</error>
     private static final List<?> PRIMITIVE_ARRAY_TYPES1 = asList(byte[].class, int[].class);
 
     public static <T> List<T> asList(T... a) {
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA124363.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA124363.java
new file mode 100644
index 0000000..577e19a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA124363.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+class MyTClass {
+
+  <T> void foo(final List<Object> objects){
+    Collection<? extends T> collection = (Collection<? extends T>) objects;
+  }
+  
+  <T> void foo1(final List<Object> objects){
+    Collection<? super T> collection = (Collection<? super T>) objects;
+  }
+
+  <T extends String> void bar(final List<Object> objects){
+    Collection<? extends T> collection = <error descr="Inconvertible types; cannot cast 'java.util.List<java.lang.Object>' to 'java.util.Collection<? extends T>'">(Collection<? extends T>) objects</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java
index d2515ee..868b4df 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA125423.java
@@ -1,6 +1,19 @@
+import java.util.Comparator;
+import java.util.List;
+
+class Test {
+  public static final Comparator<Object> ORDER_AWARE_COMPARATOR = null;
+
+  public static void orderAwareSort(List<?> data) {
+    sort(data, ORDER_AWARE_COMPARATOR);
+  }
+
+  public static <T> void sort(List<T> list, Comparator<? super T> c) {}
+}
+
 class FooBar<T> {
   void foo(final FooBar<?> fooBar){
-    fooBar.supertype<error descr="'supertype(java.lang.Class<capture<?>>)' in 'FooBar' cannot be applied to '(java.lang.Class<java.lang.Iterable>)'">(Iterable.class)</error>;
+    //fooBar.supertype(Iterable.class);
   }
 
   void foo1(final FooBar<? super T> fooBar){
@@ -13,3 +26,4 @@
 
   void supertype(Class<? super T> superclass) {}
 }
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA126633.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA126633.java
new file mode 100644
index 0000000..19e79fc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA126633.java
@@ -0,0 +1,15 @@
+import java.util.List;
+
+class Test {
+  <T> List<T> test(final List<Object> foo) {
+    return (List<T>) foo;
+  }
+
+  <T> List<List<T>> test1(final List<List<Object>> foo) {
+    return <error descr="Inconvertible types; cannot cast 'java.util.List<java.util.List<java.lang.Object>>' to 'java.util.List<java.util.List<T>>'">(List<List<T>>) foo</error>;
+  }
+
+  <T> List<List<List<T>>> test2(final List<List<List<Object>>> foo) {
+    return <error descr="Inconvertible types; cannot cast 'java.util.List<java.util.List<java.util.List<java.lang.Object>>>' to 'java.util.List<java.util.List<java.util.List<T>>>'">(List<List<List<T>>>) foo</error>;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA126697.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA126697.java
new file mode 100644
index 0000000..895e569
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA126697.java
@@ -0,0 +1,8 @@
+class Test {
+  private static void <warning descr="Private method 'test(java.lang.Short)' is never used">test</warning>(Short s) { System.out.println("Short:" + s); }
+  private static void test(short s) { System.out.println("short:" + s); }
+
+  public static void main(String ... args) {
+    test(true ? new Short((short) 1) : new Byte((byte) 1));
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParent.java
index 49c8f5b..3e270f7 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParent.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParent.java
@@ -7,7 +7,11 @@
     List<Foo> elements = getElements(parent);
 
 
-    for (<error descr="Incompatible types. Found: 'java.lang.Object', required: 'Foo'">Foo foo : getElements(parent)</error>) {
+    /*for (Foo foo : getElements(parent)) {
+      System.out.println(foo);
+    }*/
+    
+    for (Foo foo : getElementsArray(parent)) {
       System.out.println(foo);
     }
   }
@@ -15,4 +19,8 @@
   public static <E extends Foo<E>> List<E> getElements(E parent) {
     return new ArrayList<>();
   }
+  
+  public static <E extends Foo<E>> E[] getElementsArray(E parent) {
+    return null;
+  }
 }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParentArrayType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParentArrayType.java
new file mode 100644
index 0000000..904e372
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/RawTypeFromParentArrayType.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+class Test {
+  protected Class[] getAllInterfaces(final Set<Class> interfaces, final Class[] classes) {
+    return interfaces.toArray(classes);
+  }
+  public static <T extends Collection<String>> T get(T out) {
+    return out;
+  }
+
+  public static void main(String[] args) {
+    Set<String> set = get(new HashSet());
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Intersection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Intersection.java
index 767b547..7a6312b 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Intersection.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/Intersection.java
@@ -13,8 +13,8 @@
   {
     Object o1 = (Serializable & I) () -> {};
     Object o2 = (I & Serializable) () -> {};
-    Object o3 = (I & Runnable) <error descr="Multiple non-overriding abstract methods found in Runnable & I">() -> {}</error>;
-    Object o4 = (A & Runnable) <error descr="Multiple non-overriding abstract methods found in Runnable & A">() -> {}</error>;
+    Object o3 = (I & Runnable) <error descr="Multiple non-overriding abstract methods found in I & Runnable">() -> {}</error>;
+    Object o4 = (A & Runnable) <error descr="Multiple non-overriding abstract methods found in A & Runnable">() -> {}</error>;
     Object o5 = (Runnable & A) <error descr="Multiple non-overriding abstract methods found in Runnable & A">() -> {}</error>;
   }
 }
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java
index cf95ac4..fce5258 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RecursiveAccess.java
@@ -1,5 +1,5 @@
 public class LambdaTest {
-    Op lambda_fib =  (n) -> (n < 2) ? 1 : <error descr="Illegal forward reference">lambda_fib</error>.op(n - 1) + <error descr="Illegal forward reference">lambda_fib</error>.op(n - 2);
+    Op lambda_fib =  (n) -> (n < 2) ? 1 : <error descr="Illegal self reference">lambda_fib</error>.op(n - 1) + <error descr="Illegal self reference">lambda_fib</error>.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);
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA119003.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA119003.java
index f56af02..01646dd 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA119003.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA119003.java
@@ -3,6 +3,7 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.*;
 
 import static java.util.stream.Collectors.*;
 
@@ -82,3 +83,32 @@
     return name;
   }
 }
+
+class Test67 {
+
+  static {
+    collectingAndThen(reducing(), Optional::get);
+    collectingAndThen(reducing(), o -> o.get());
+  }
+
+  static <T> List<Optional<T>> reducing() {
+    return null;
+  }
+
+  static <R,RR> void collectingAndThen(List<R> downstream, Function<R,RR> finisher){}
+}
+
+class Test99 {
+
+  {
+    collectingAndThen(reducing((d1, d2) ->   d2),  Optional::get);
+  }
+
+  public static <COL, R, RR> void collectingAndThen(Collector<COL, R> downstream, Function<R, RR> finisher) {}
+
+  public static <RED> Collector<RED, Optional<RED>> reducing(BinaryOperator<RED> op) {
+    return null;
+  }
+
+  static class Collector<A, C>{}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA124961.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA124961.java
new file mode 100644
index 0000000..ab8e994
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA124961.java
@@ -0,0 +1,16 @@
+import java.util.List;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+class Test {
+
+  private static void list(List<? extends CharSequence> l) {
+    Stream<? extends CharSequence> str = map(() -> l.get(0));
+    Stream<? extends CharSequence> str1 = map1(() -> l.get(0));
+    Stream<? extends CharSequence> str2 = map1(() -> l.get(0));
+  }
+
+  static <M> Stream<M> map (Supplier<? extends M> mapper) { return null;}
+  static <M> Stream<M> map1(Supplier<? super M> mapper) { return null;}
+  static <M> Stream<M> map2(Supplier<M> mapper) { return null;}
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA125254.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA125254.java
new file mode 100644
index 0000000..4d74d14
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA125254.java
@@ -0,0 +1,103 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.BiFunction;
+
+class Scratch
+{
+  public static void main(String[] args)
+  {
+    final ExecutorService threadPool = Executors.newCachedThreadPool();
+    final List<EventObject> events = new ArrayList<>();
+    final SoapInterface soap = new SoapInterface();
+
+    events.stream()
+      .map(event -> get(event).apply(soap, event))
+      .map(threadPool::submit)
+      .forEachOrdered(future -> {
+        try
+        {
+          if (! future.get().isError())
+          {
+
+          }
+          else
+          {
+            ;
+          }
+        }
+        catch (InterruptedException | ExecutionException e)
+        {
+          e.printStackTrace();
+        }
+      });
+  }
+
+  public static BiFunction<SoapInterface, Object, Callable<Either<Object, Exception>>> get(Object o)
+  {
+    return (soap, event) -> toEither(
+      () -> {
+        return "value";
+      }
+    );
+  }
+
+  private static Callable<Either<Object, Exception>> toEither(Callable<Object> callable)
+  {
+    return () -> {
+      try
+      {
+        return Either.value(callable.call());
+      }
+      catch (Exception e)
+      {
+        return Either.error(e);
+      }
+    };
+  }
+
+  public static class EventObject {  }
+
+  public static class SoapInterface {  }
+
+  public static class Either<V, E>
+  {
+    private V value;
+
+    private E error;
+
+    private Either(V value, E error)
+    {
+      this.value = value;
+      this.error = error;
+    }
+
+    public static <V, E> Either<V, E> value(V value)
+    {
+      return new Either<>(value, null);
+    }
+
+    public static <V, E> Either<V, E> error(E error)
+    {
+      return new Either<>(null, error);
+    }
+
+    public V getValue()
+    {
+      return value;
+    }
+
+    public E getError()
+    {
+      return error;
+    }
+
+    public boolean isError()
+    {
+      return error != null;
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA126109.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA126109.java
new file mode 100644
index 0000000..0fd7c68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA126109.java
@@ -0,0 +1,26 @@
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+class Test {
+  void foo(final Stream<Person> stream) {
+    final Map<String,List<Person>> mapByFirstLetter = stream.collect(Collectors.groupingBy(p -> "" + p.name.charAt(0)));
+
+    final String vV = mapByFirstLetter.values().stream().map(lp -> lp.stream().map(p -> p.name)
+      .collect(Collectors.joining("/","<",">"))) .collect(Collectors.joining(" : "));
+
+    final String vV2 = mapByFirstLetter.values().stream()
+      .map(lp -> lp.stream().map(Person::getName).collect(Collectors.joining("/","<",">")))
+      .collect(Collectors.joining(" : "));
+    System.out.println("mapByFirstLetter2 :   "+ vV2);
+  }
+
+  public static class Person {
+    private String name;
+    public Person(String name) {
+      this.name = name;
+    }
+    public String getName() {return name;}
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA126809.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA126809.java
new file mode 100644
index 0000000..df910d9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA126809.java
@@ -0,0 +1,27 @@
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.toSet;
+
+class App {
+
+  {
+    final User user = new User("test", Stream.of("TEST").collect(toSet()));
+    Optional.of(user).map(u -> new User(u.getName(),
+                                        u.getAttributes().stream().filter(a -> !a.equals("TEST")).collect(toSet())));
+  }
+
+  private static final class User {
+    User(final String name, final Set<String> attributes) {
+    }
+
+    public String getName() {
+      return null;
+    }
+
+    public Set<String> getAttributes() {
+      return null;
+    }
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/EnumValuesMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/EnumValuesMethod.java
new file mode 100644
index 0000000..14ad192
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/EnumValuesMethod.java
@@ -0,0 +1,25 @@
+import java.util.function.Supplier;
+
+class EnumValues {
+
+  {
+    Supplier<I<ABC>> supplier = () -> new C<>(ABC::values);
+  }
+
+  private static interface I<T> {
+    T get();
+  }
+
+  private static class C<E> implements I<E> {
+    C(Supplier<E[]> supplier) {}
+
+    @Override
+    public E get() {
+      return null;
+    }
+  }
+
+  private static enum ABC {
+    A, B, C
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MissedApplicableMemberContainingClassSubstitution.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MissedApplicableMemberContainingClassSubstitution.java
new file mode 100644
index 0000000..7562e45
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/MissedApplicableMemberContainingClassSubstitution.java
@@ -0,0 +1,54 @@
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+class TestA {
+
+  public static class Entity<K> {
+    K id;
+    public K getId() {
+      return id;
+    }
+  }
+
+  public static class EntityVo {}
+
+  public static class Area extends Entity<Integer> {
+  }
+
+  public static class AreaVo {
+    public AreaVo(Area area, String lang) {
+
+    }
+  }
+
+  public static void main(String[] args) {
+    String language = "da";
+    List<Area> areas = new ArrayList<>();
+    Map<Integer, AreaVo> areaLookup = areas.stream()
+      .collect(Collectors.toMap(Area::getId, area -> new AreaVo(area, language)));
+  }
+
+}
+
+class TestSimple {
+
+  public static class Entity<K> {
+    K id;
+    public K getId() {
+      return id;
+    }
+  }
+
+  public static class Area extends Entity<Integer> {
+  }
+
+  public static <M> Set<M> toMap(Function<Area, M> keyMapper) {
+    return null;
+  }
+
+  {
+    Set<Integer> tMapCollector = toMap(Area::getId);
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/RejectReceiverTypesForConstructorRefs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/RejectReceiverTypesForConstructorRefs.java
new file mode 100644
index 0000000..0954ed9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/RejectReceiverTypesForConstructorRefs.java
@@ -0,0 +1,21 @@
+import java.util.function.*;
+
+class ConstructorReferences {
+  public ConstructorReferences() {}
+  public ConstructorReferences(String s) {}
+  public ConstructorReferences(String s1, String s2) {}
+  public ConstructorReferences(ConstructorReferences other) {}
+  public ConstructorReferences(ConstructorReferences other1, ConstructorReferences other2) {}
+
+  public static void main(String[] args) {
+    Supplier<ConstructorReferences> supplier = ConstructorReferences::new;
+    Function<String,ConstructorReferences> function = ConstructorReferences::new;
+    BiFunction<String,String,ConstructorReferences> bifunction = ConstructorReferences::new;
+    UnaryOperator<ConstructorReferences> unaryOperator = ConstructorReferences:: new;
+    Function<ConstructorReferences,ConstructorReferences> unaryOperatorBaseClass = ConstructorReferences::new;
+    BinaryOperator<ConstructorReferences> binaryOperator = ConstructorReferences::new;
+    BiFunction<ConstructorReferences, ConstructorReferences, ConstructorReferences> binaryOperatorBaseClass = ConstructorReferences::new;
+    Consumer<ConstructorReferences> consumer = ConstructorReferences::new;
+    BiConsumer<ConstructorReferences,ConstructorReferences> biconsumer = ConstructorReferences::new;
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/Constructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/Constructor.java
new file mode 100644
index 0000000..fa782b8
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/Constructor.java
@@ -0,0 +1,26 @@
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  public A() {
+
+    MyElement localElement1 = getElement();
+
+    getProje<caret>ct();
+
+    MyElement localElement2 = getElement();
+
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/FixAfter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/FixAfter.java
new file mode 100644
index 0000000..171715c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/FixAfter.java
@@ -0,0 +1,20 @@
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  public void m() {
+    fieldElement.getProject();
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/FixBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/FixBefore.java
new file mode 100644
index 0000000..9996e8a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/FixBefore.java
@@ -0,0 +1,20 @@
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  public void m() {
+    getProje<caret>ct();
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/NestedMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/NestedMethod.java
new file mode 100644
index 0000000..1135da9
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/NestedMethod.java
@@ -0,0 +1,36 @@
+import java.lang.Object;
+
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  public void m(MyElement paramElement) {
+
+    Object o = new Object() {
+
+      private final MyElement nestedField;
+
+      public void targetMethod(MyElement nestedParamElement) {
+
+        final MyElement localElement1 = getElement();
+
+        getProje<caret>ct ();
+
+        MyElement localElement2 = getElement();
+
+      }
+    }
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/NonStaticMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/NonStaticMethod.java
new file mode 100644
index 0000000..6407fa1
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/NonStaticMethod.java
@@ -0,0 +1,26 @@
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  public void targetMethod(MyElement paramElement) {
+
+    MyElement localElement1 = getElement();
+
+    getProje<caret>ct();
+
+    MyElement localElement2 = getElement();
+
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/StaticInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/StaticInitializer.java
new file mode 100644
index 0000000..94faa31
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/StaticInitializer.java
@@ -0,0 +1,26 @@
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  static {
+
+    MyElement localElement1 = getElement();
+
+    getProje<caret>ct();
+
+    MyElement localElement2 = getElement();
+
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/StaticMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/StaticMethod.java
new file mode 100644
index 0000000..b7f033a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/StaticMethod.java
@@ -0,0 +1,26 @@
+public class A {
+
+  Project p;
+  MyElement fieldElement;
+
+  static MyElement staticElement;
+
+  public static void targetMethod(MyElement paramElement) {
+
+    MyElement localElement1 = getElement();
+
+    getProje<caret>ct();
+
+    MyElement localElement2 = getElement();
+
+  }
+
+  interface Project {
+
+  }
+
+  interface MyElement {
+    Project getProject();
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeSelfReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeSelfReference.java
new file mode 100644
index 0000000..7160a62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeSelfReference.java
@@ -0,0 +1,9 @@
+// "Replace with lambda" "false"
+class Test {
+  Runnable runnable = new Runn<caret>able() {
+    @Override
+    public void run() {
+      System.out.println(runnable);
+    }
+  };
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterInsideNestedInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterInsideNestedInner.java
new file mode 100644
index 0000000..9e58354
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterInsideNestedInner.java
@@ -0,0 +1,18 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  class Bar {
+    void foo() {
+    }
+
+    class Foo {
+
+      void bar() {
+        new Object() {
+          void baz() {
+            Runnable runnable = Bar.this::foo;
+          }
+        };
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeInsideAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeInsideAnonymous.java
new file mode 100644
index 0000000..e6ad36c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeInsideAnonymous.java
@@ -0,0 +1,17 @@
+// "Replace lambda with method reference" "false"
+class Example {
+  {
+    new Object() {
+      void foo() {
+      }
+
+      void bar() {
+        new Object() {
+          void baz() {
+            Runnable runnable = () -> fo<caret>o();
+          }
+        };
+      }
+    };
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeInsideNestedInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeInsideNestedInner.java
new file mode 100644
index 0000000..553b433
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeInsideNestedInner.java
@@ -0,0 +1,18 @@
+// "Replace lambda with method reference" "true"
+class Example {
+  class Bar {
+    void foo() {
+    }
+
+    class Foo {
+
+      void bar() {
+        new Object() {
+          void baz() {
+            Runnable runnable = () -> fo<caret>o();
+          }
+        };
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterBase.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterBase.java
new file mode 100644
index 0000000..da423ae
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterBase.java
@@ -0,0 +1,16 @@
+// "Swap If Statements" "true"
+class A {
+
+  void m() {
+
+    if (otherCondition) {
+      doAnotherAction();
+    } else if (someCondition) {
+      doSomeAction();
+    } else {
+      defaultAction();
+    }
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterManyStatements.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterManyStatements.java
new file mode 100644
index 0000000..2a70fb4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterManyStatements.java
@@ -0,0 +1,20 @@
+// "Swap If Statements" "true"
+class A {
+
+  void m() {
+
+    if (a) {
+      System.out.println(1);
+    } else if (c) {
+      System.out.println(3);
+    } else if (b) {
+      System.out.println(2);
+    } else if (d) {
+      System.out.println(4);
+    } else {
+      System.out.println(5);
+    }
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterWithoutBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterWithoutBrackets.java
new file mode 100644
index 0000000..5c87fbc
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/afterWithoutBrackets.java
@@ -0,0 +1,12 @@
+// "Swap If Statements" "true"
+class A {
+
+  void m() {
+
+    if (cond2) m2();
+    else if (cond1) m1();
+    else if (cond3) m3();
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeBase.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeBase.java
new file mode 100644
index 0000000..146510c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeBase.java
@@ -0,0 +1,16 @@
+// "Swap If Statements" "true"
+class A {
+
+  void m() {
+
+    if (someCondition) {
+      doSomeAction();
+    } e<caret>lse if (otherCondition) {
+      doAnotherAction();
+    } else {
+      defaultAction();
+    }
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeManyStatements.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeManyStatements.java
new file mode 100644
index 0000000..c1e7c1c
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeManyStatements.java
@@ -0,0 +1,20 @@
+// "Swap If Statements" "true"
+class A {
+
+  void m() {
+
+    if (a) {
+      System.out.println(1);
+    } else if (b) {
+      System.out.println(2);
+    } el<caret>se if (c) {
+      System.out.println(3);
+    } else if (d) {
+      System.out.println(4);
+    } else {
+      System.out.println(5);
+    }
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeNotAvailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeNotAvailable.java
new file mode 100644
index 0000000..16a0bc0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeNotAvailable.java
@@ -0,0 +1,10 @@
+// "Swap If Statements" "false"
+class A {
+  void m() {
+    if (someCondition) {
+      doSomeAction();
+    } e<caret>lse {
+      defaultAction();
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeWithoutBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeWithoutBrackets.java
new file mode 100644
index 0000000..e7b3ac7
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements/beforeWithoutBrackets.java
@@ -0,0 +1,12 @@
+// "Swap If Statements" "true"
+class A {
+
+  void m() {
+
+    if (cond1) m1();
+    el<caret>se if (cond2) m2();
+    else if (cond3) m3();
+
+  }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterCallAsArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterCallAsArgument.java
new file mode 100644
index 0000000..6ef1870
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterCallAsArgument.java
@@ -0,0 +1,11 @@
+// "Remove redundant assignment" "true"
+class Test {
+  void foo() {
+    String var;
+    this.bar("someString");
+  }
+
+  void bar(String arg) {
+
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeCallAsArgument.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeCallAsArgument.java
new file mode 100644
index 0000000..116cc94
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeCallAsArgument.java
@@ -0,0 +1,11 @@
+// "Remove redundant assignment" "true"
+class Test {
+  void foo() {
+    String var;
+    this.bar(v<caret>ar = "someString");
+  }
+
+  void bar(String arg) {
+
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/annotations.html b/java/java-tests/testData/codeInsight/javadocIG/annotations.html
new file mode 100644
index 0000000..39e5747
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/annotations.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://Test"><code>Test</code></a></b></small><PRE><font color=red>@Nullable</font>&nbsp;
+@<a href="psi_element://java.lang.Deprecated"><code>Deprecated</code></a>&nbsp;
+public <a href="psi_element://java.lang.String"><code>String</code></a> <b>field = null</b></PRE></body></html>
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/annotations.java b/java/java-tests/testData/codeInsight/javadocIG/annotations.java
new file mode 100644
index 0000000..2a3a674
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/annotations.java
@@ -0,0 +1,5 @@
+class Test {
+  @Nullable
+  @Deprecated
+  public String field = null;
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/slice/backward/VarArgsAsAWhole.java b/java/java-tests/testData/codeInsight/slice/backward/VarArgsAsAWhole.java
new file mode 100644
index 0000000..21ba9ba
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/VarArgsAsAWhole.java
@@ -0,0 +1,12 @@
+class VarArgs {
+  private void g() {
+      f<flown111>("d",1,2,3);
+  }
+
+  void f(String value,int... <flown11>i) {
+      v(value, <flown1>i);
+  }
+
+  private void v(String value, int... <caret>ints) {
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/slice/backward/VarArgsPartial.java b/java/java-tests/testData/codeInsight/slice/backward/VarArgsPartial.java
new file mode 100644
index 0000000..1e59e13
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/slice/backward/VarArgsPartial.java
@@ -0,0 +1,14 @@
+class VarArgs {
+  private static void foo(String value, int...<flown11>ints) {
+      System.out.println(value + " " + java.util.Arrays.asList(ints));
+      int <caret>anInt = <flown1>ints[1];
+  }
+
+  private static void bar(String value, int...<flown1111>ints) {
+      foo(value, <flown111>ints);
+  }
+
+  private static void baz(String value) {
+      bar<flown11111>("d", <flown111111>2, <flown111112>3, <flown111113>4);
+  }
+}
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AssertTrueNotComplex.java b/java/java-tests/testData/inspection/dataFlow/fixture/AssertTrueNotComplex.java
new file mode 100644
index 0000000..9eb541c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/AssertTrueNotComplex.java
@@ -0,0 +1,17 @@
+import org.jetbrains.annotations.Contract;
+
+import java.util.List;
+
+abstract class Some {
+  @Contract("_,false->fail")
+  abstract void assertTrue(String s, boolean b);
+
+  void assertContainsAllVariants(List<String> actualVariants, String... expectedVariants) {
+    for (String expectedVariant : expectedVariants) {
+      assertTrue(expectedVariant, actualVariants.contains(expectedVariant));
+    }
+  }
+
+}
+
+
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullToNotNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullToNotNull.java
new file mode 100644
index 0000000..a9f17f7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullToNotNull.java
@@ -0,0 +1,14 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collection;
+
+class Bar3 {
+
+  public void foo(@Nullable Object element) {
+    final String elementType = element != null ? element.toString() : null;
+    if (elementType == "") {
+      System.out.println(element.hashCode());
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullableToNullable.java b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullableToNullable.java
new file mode 100644
index 0000000..5e3ce3c
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullableToNullable.java
@@ -0,0 +1,16 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collection;
+
+class Bar3 {
+
+  public void foo(@Nullable Object element) {
+    final String elementType = element != null ? element.toString() : null;
+    if (elementType == nullableString()) {
+      System.out.println(<warning descr="Method invocation 'element.hashCode()' may produce 'java.lang.NullPointerException'">element.hashCode()</warning>);
+    }
+  }
+
+  @Nullable String nullableString() { return null; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullableToUnknown.java b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullableToUnknown.java
new file mode 100644
index 0000000..b15c6c7
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingNullableToUnknown.java
@@ -0,0 +1,16 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collection;
+
+class Bar3 {
+
+  public void foo(@Nullable Object element) {
+    final String elementType = element != null ? element.toString() : null;
+    if (elementType == someString()) {
+      System.out.println(<warning descr="Method invocation 'element.hashCode()' may produce 'java.lang.NullPointerException'">element.hashCode()</warning>);
+    }
+  }
+
+  String someString() { return <warning descr="'null' is returned by the method which is not declared as @Nullable">null</warning>; }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/offline/project/src/Test.java b/java/java-tests/testData/inspection/offline/project/src/Test.java
new file mode 100644
index 0000000..94e0c00
--- /dev/null
+++ b/java/java-tests/testData/inspection/offline/project/src/Test.java
@@ -0,0 +1,52 @@
+/**
+ * User: anna
+ * Date: 25-Apr-2006
+ */
+public class Test {
+  private boolean myFlag = false;
+  @SuppressWarnings({"PointlessBooleanExpression"})
+  boolean foo(){
+    boolean flag = false;
+    if (flag == false){
+      flag = true;
+    }
+    int j = 0;
+    if (myFlag) return false;
+    return flag;
+  }
+
+ /*private int bar() {
+    int i = 0;
+    return i;
+  }*/
+
+
+  private void fooo(){
+    this.fooo();
+  }
+
+  public void deadCode() {
+
+  }
+  public static void main(String[] args){
+    Test test = new Test();
+  }
+
+    public void f() {
+        class D {
+            void b() {
+                Runnable r = new Runnable() {
+                    public void run() {
+                        int i = 0;
+
+                    }
+                };
+            }
+        }
+    }
+
+  void ff() {
+      long d = 5;
+      int a = 0;
+  }
+}
diff --git a/java/java-tests/testData/inspection/offline/res/UnusedAssignment.xml b/java/java-tests/testData/inspection/offline/res/UnusedAssignment.xml
new file mode 100644
index 0000000..9829cf8
--- /dev/null
+++ b/java/java-tests/testData/inspection/offline/res/UnusedAssignment.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<problems>
+  <problem>
+    <file>file://$PROJECT_DIR$/javamodule/src/Test.java</file>
+    <line>13</line>
+    <entry_point TYPE="method" FQNAME="Test boolean foo()">
+      <entry_point TYPE="class" FQNAME="Test" />
+    </entry_point>
+    <module>javamodule</module>
+    <method>
+      <name>boolean foo()</name>
+      <name>foo()</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused assignment</problem_class>
+    <description>Variable &lt;code&gt;j&lt;/code&gt; is never used.</description>
+  </problem>
+  <problem>
+    <file>file://$PROJECT_DIR$/javamodule/src/Test.java</file>
+    <line>40</line>
+    <entry_point TYPE="method" FQNAME="Test$2D$1 void run()">
+      <entry_point TYPE="class" FQNAME="Test$2D$1">
+        <entry_point TYPE="method" FQNAME="Test$2D void b()">
+          <entry_point TYPE="class" FQNAME="Test$2D">
+            <entry_point TYPE="method" FQNAME="Test void f()">
+              <entry_point TYPE="class" FQNAME="Test" />
+            </entry_point>
+          </entry_point>
+        </entry_point>
+      </entry_point>
+    </entry_point>
+    <module>javamodule</module>
+    <method>
+      <name>void run()</name>
+      <name>run()</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused assignment</problem_class>
+    <description>Variable &lt;code&gt;i&lt;/code&gt; is never used.</description>
+  </problem>
+  <problem>
+    <file>file://$PROJECT_DIR$/javamodule/src/Test.java</file>
+    <line>49</line>
+    <entry_point TYPE="method" FQNAME="Test void ff()">
+      <entry_point TYPE="class" FQNAME="Test" />
+    </entry_point>
+    <module>javamodule</module>
+    <method>
+      <name>void ff()</name>
+      <name>ff()</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused assignment</problem_class>
+    <description>Variable &lt;code&gt;d&lt;/code&gt; is never used.</description>
+  </problem>
+  <problem>
+    <file>file://$PROJECT_DIR$/javamodule/src/Test.java</file>
+    <line>50</line>
+    <entry_point TYPE="method" FQNAME="Test void ff()">
+      <entry_point TYPE="class" FQNAME="Test" />
+    </entry_point>
+    <module>javamodule</module>
+    <method>
+      <name>void ff()</name>
+      <name>ff()</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused assignment</problem_class>
+    <description>Variable &lt;code&gt;a&lt;/code&gt; is never used.</description>
+  </problem>
+  <problem>
+    <file>file://$PROJECT_DIR$/javamodule/src/Test.java</file>
+    <line>32</line>
+    <entry_point TYPE="method" FQNAME="Test void main(java.lang.String[] args)">
+      <entry_point TYPE="class" FQNAME="Test" />
+    </entry_point>
+    <module>javamodule</module>
+    <method>
+      <name>void main(String[] args)</name>
+      <name>main(String[])</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused assignment</problem_class>
+    <description>Variable &lt;code&gt;test&lt;/code&gt; is never used.</description>
+  </problem>
+  <problem>
+    <file>file://$PROJECT_DIR$/javamodule/src/Test.java</file>
+    <line>38</line>
+    <entry_point TYPE="method" FQNAME="Test$2D void b()">
+      <entry_point TYPE="class" FQNAME="Test$2D">
+        <entry_point TYPE="method" FQNAME="Test void f()">
+          <entry_point TYPE="class" FQNAME="Test" />
+        </entry_point>
+      </entry_point>
+    </entry_point>
+    <module>javamodule</module>
+    <method>
+      <name>void b()</name>
+      <name>b()</name>
+      <package>&lt;default&gt;</package>
+      <class>
+        <name>Test</name>
+        <display_name>Test</display_name>
+      </class>
+    </method>
+    <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused assignment</problem_class>
+    <description>Variable &lt;code&gt;r&lt;/code&gt; is never used.</description>
+  </problem>
+</problems>
+
diff --git a/java/java-tests/testData/inspection/redundantCast/generics/ForEachValueIDEA126166/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/ForEachValueIDEA126166/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/ForEachValueIDEA126166/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/ForEachValueIDEA126166/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/ForEachValueIDEA126166/src/Test.java
new file mode 100644
index 0000000..18bf47f
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/generics/ForEachValueIDEA126166/src/Test.java
@@ -0,0 +1,11 @@
+import java.util.ArrayList;
+import java.util.List;
+
+class SomeClass {
+  public void test() {
+    List<?> objects = new ArrayList<>();
+    for (String value : (Iterable<? extends String>) objects) {
+      System.out.println(value);
+    }
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/ForeachValue/expected.xml b/java/java-tests/testData/inspection/redundantCast/lambda/ForeachValue/expected.xml
new file mode 100644
index 0000000..4704d91
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/ForeachValue/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/ForeachValue/src/Test.java b/java/java-tests/testData/inspection/redundantCast/lambda/ForeachValue/src/Test.java
new file mode 100644
index 0000000..bd2236c
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantCast/lambda/ForeachValue/src/Test.java
@@ -0,0 +1,10 @@
+import java.util.Arrays;
+import java.util.Iterator;
+
+class IterableMain {
+  public static void main(final String... args) {
+    for (final String s :  (Iterable<String>) XIterator::new) {}
+  }
+
+  public static interface XIterator extends Iterator<String> {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java b/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java
new file mode 100644
index 0000000..f6e2c03
--- /dev/null
+++ b/java/java-tests/testData/inspection/suspiciousCalls/RemoveAll14.java
@@ -0,0 +1,14 @@
+import java.util.*;
+
+
+class Simple {
+  public static void main(Set set, Set setO) {
+    class O {}
+
+    Map someData = new HashMap();
+
+    set.removeAll(someData.keySet());
+    setO.removeAll(someData.keySet());
+
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt
index 82d04fe..d64c31b 100644
--- a/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt
+++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt
@@ -4,6 +4,910 @@
     PsiTypeParameterListStub
     PsiRefListStub[EXTENDS_LIST:]
     PsiRefListStub[IMPLEMENTS_LIST:]
+    PsiClassStub[name=AsLIFOQueue fqn=java.util.Collections.AsLIFOQueue]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractQueue<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Queue<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=1802017725587941708L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[q:java.util.Deque<E>]
+        PsiModifierListStub[mask=18]
+      PsiMethodStub[cons AsLIFOQueue:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Deque<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[add:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[offer:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[poll:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[peek:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[element:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[clear:void]
+        PsiModifierListStub[mask=1]
+        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[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            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[iterator:java.util.Iterator<E>]
+        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[toString:java.lang.String]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[containsAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            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:]
+    PsiClassStub[name=CheckedCollection fqn=java.util.Collections.CheckedCollection]
+      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=1578914078182001775L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[c:java.util.Collection<E>]
+        PsiModifierListStub[mask=4112]
+      PsiFieldStub[type:java.lang.Class<E>]
+        PsiModifierListStub[mask=4112]
+      PsiFieldStub[zeroLengthElementArray:E[]]
+        PsiModifierListStub[mask=2]
+      PsiMethodStub[typeCheck:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[badElementMsg:java.lang.String]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons CheckedCollection:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Class<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[remove:boolean]
+        PsiModifierListStub[mask=1]
+        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[containsAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            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[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[zeroLengthElementArray:E[]]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[checkedCopyOf:java.util.Collection<E>]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<? extends E>]
+            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:]
+    PsiClassStub[name=CheckedList fqn=java.util.Collections.CheckedList]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.CheckedCollection<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.List<E>]
+      PsiFieldStub[serialVersionUID:long=65247728283967356L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[list:java.util.List<E>]
+        PsiModifierListStub[mask=4112]
+      PsiMethodStub[cons CheckedList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Class<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[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[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[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:]
+    PsiClassStub[name=CheckedMap fqn=java.util.Collections.CheckedMap]
+      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=CheckedEntrySet fqn=java.util.Collections.CheckedMap.CheckedEntrySet]
+        PsiModifierListStub[mask=4104]
+        PsiTypeParameterListStub
+          PsiTypeParameter[K]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiTypeParameter[V]
+            PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiRefListStub[EXTENDS_LIST:]
+        PsiRefListStub[IMPLEMENTS_LIST:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiClassStub[name=CheckedEntry fqn=java.util.Collections.CheckedMap.CheckedEntrySet.CheckedEntry]
+          PsiModifierListStub[mask=10]
+          PsiTypeParameterListStub
+            PsiTypeParameter[K]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+            PsiTypeParameter[V]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+            PsiTypeParameter[T]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiRefListStub[EXTENDS_LIST:]
+          PsiRefListStub[IMPLEMENTS_LIST:java.util.Map.Entry<K,V>]
+          PsiFieldStub[e:java.util.Map.Entry<K,V>]
+            PsiModifierListStub[mask=18]
+          PsiFieldStub[valueType:java.lang.Class<T>]
+            PsiModifierListStub[mask=18]
+          PsiMethodStub[cons CheckedEntry:void]
+            PsiModifierListStub[mask=4096]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+              PsiParameterStub[p1:java.util.Map.Entry<K,V>]
+                PsiModifierListStub[mask=0]
+              PsiParameterStub[p2:java.lang.Class<T>]
+                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[hashCode:int]
+            PsiModifierListStub[mask=1]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+            PsiRefListStub[THROWS_LIST:]
+          PsiMethodStub[toString:java.lang.String]
+            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[badValueMsg:java.lang.String]
+            PsiModifierListStub[mask=2]
+            PsiTypeParameterListStub
+            PsiParameterListStub
+              PsiParameterStub[p1: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:]
+        PsiFieldStub[s:java.util.Set<java.util.Map.Entry<K,V>>]
+          PsiModifierListStub[mask=18]
+        PsiFieldStub[valueType:java.lang.Class<V>]
+          PsiModifierListStub[mask=18]
+        PsiMethodStub[cons CheckedEntrySet:void]
+          PsiModifierListStub[mask=4096]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Set<java.util.Map.Entry<K,V>>]
+              PsiModifierListStub[mask=0]
+            PsiParameterStub[p2:java.lang.Class<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[toString:java.lang.String]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[hashCode:int]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[clear:void]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[add:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Map.Entry<K,V>]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+        PsiMethodStub[addAll:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Collection<? extends java.util.Map.Entry<K,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[remove:boolean]
+          PsiModifierListStub[mask=1]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.lang.Object]
+              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[batchRemove:boolean]
+          PsiModifierListStub[mask=2]
+          PsiTypeParameterListStub
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Collection<?>]
+              PsiModifierListStub[mask=0]
+            PsiParameterStub[p2:boolean]
+              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[checkedEntry:java.util.Collections.CheckedMap.CheckedEntrySet.CheckedEntry<K,V,T>]
+          PsiModifierListStub[mask=4104]
+          PsiTypeParameterListStub
+            PsiTypeParameter[K]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+            PsiTypeParameter[V]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+            PsiTypeParameter[T]
+              PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+          PsiParameterListStub
+            PsiParameterStub[p1:java.util.Map.Entry<K,V>]
+              PsiModifierListStub[mask=0]
+            PsiParameterStub[p2:java.lang.Class<T>]
+              PsiModifierListStub[mask=0]
+          PsiRefListStub[THROWS_LIST:]
+      PsiFieldStub[serialVersionUID:long=5742860141034234728L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[m:java.util.Map<K,V>]
+        PsiModifierListStub[mask=18]
+      PsiFieldStub[keyType:java.lang.Class<K>]
+        PsiModifierListStub[mask=4112]
+      PsiFieldStub[valueType:java.lang.Class<V>]
+        PsiModifierListStub[mask=4112]
+      PsiFieldStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=130]
+      PsiMethodStub[typeCheck:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[badKeyMsg:java.lang.String]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[badValueMsg:java.lang.String]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[cons CheckedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        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[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[remove:V]
+        PsiModifierListStub[mask=1]
+        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[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[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:]
+      PsiMethodStub[put:V]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:K]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:V]
+            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[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=CheckedRandomAccessList fqn=java.util.Collections.CheckedRandomAccessList]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.CheckedList<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess]
+      PsiFieldStub[serialVersionUID:long=1638200125423088369L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons CheckedRandomAccessList:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.List<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Class<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:]
+    PsiClassStub[name=CheckedSet fqn=java.util.Collections.CheckedSet]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.CheckedCollection<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Set<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=4694047833775013803L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons CheckedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Set<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Class<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=CheckedSortedMap fqn=java.util.Collections.CheckedSortedMap]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[K]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+        PsiTypeParameter[V]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.CheckedMap<K,V>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.SortedMap<K,V>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=1599671320688067438L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[sm:java.util.SortedMap<K,V>]
+        PsiModifierListStub[mask=18]
+      PsiMethodStub[cons CheckedSortedMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        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[comparator:java.util.Comparator<? super K>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        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:]
+      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:]
+    PsiClassStub[name=CheckedSortedSet fqn=java.util.Collections.CheckedSortedSet]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.CheckedSet<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.SortedSet<E>, java.io.Serializable]
+      PsiFieldStub[serialVersionUID:long=1599911165492914959L]
+        PsiModifierListStub[mask=26]
+      PsiFieldStub[ss:java.util.SortedSet<E>]
+        PsiModifierListStub[mask=18]
+      PsiMethodStub[cons CheckedSortedSet:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.SortedSet<E>]
+            PsiModifierListStub[mask=0]
+          PsiParameterStub[p2:java.lang.Class<E>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[comparator:java.util.Comparator<? super E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        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:]
+      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:]
     PsiClassStub[name=CopiesList fqn=java.util.Collections.CopiesList]
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
@@ -12,11 +916,11 @@
       PsiRefListStub[EXTENDS_LIST:java.util.AbstractList<E>]
       PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess, java.io.Serializable]
       PsiFieldStub[serialVersionUID:long=2739099268398711800L]
-        PsiModifierListStub[mask=4120]
+        PsiModifierListStub[mask=26]
       PsiFieldStub[n:int]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiFieldStub[element:E]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiMethodStub[cons CopiesList:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -38,6 +942,20 @@
           PsiParameterStub[p1:java.lang.Object]
             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[get:E]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
@@ -45,10 +963,88 @@
           PsiParameterStub[p1:int]
             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[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:]
+    PsiClassStub[name=EmptyEnumeration fqn=java.util.Collections.EmptyEnumeration]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Enumeration<E>]
+      PsiFieldStub[EMPTY_ENUMERATION:java.util.Collections.EmptyEnumeration<java.lang.Object>]
+        PsiModifierListStub[mask=4120]
+      PsiMethodStub[cons EmptyEnumeration:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hasMoreElements:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[nextElement:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=EmptyIterator fqn=java.util.Collections.EmptyIterator]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Iterator<E>]
+      PsiFieldStub[EMPTY_ITERATOR:java.util.Collections.EmptyIterator<java.lang.Object>]
+        PsiModifierListStub[mask=4120]
+      PsiMethodStub[cons EmptyIterator:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hasNext:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[next:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[remove:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
     PsiClassStub[name=EmptyList fqn=java.util.Collections.EmptyList]
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
-      PsiRefListStub[EXTENDS_LIST:java.util.AbstractList<java.lang.Object>]
+        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=8842843931221139166L]
         PsiModifierListStub[mask=26]
@@ -57,11 +1053,26 @@
         PsiTypeParameterListStub
         PsiParameterListStub
         PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[iterator:java.util.Iterator<E>]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[listIterator:java.util.ListIterator<E>]
+        PsiModifierListStub[mask=1]
+        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[contains:boolean]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
@@ -69,22 +1080,107 @@
           PsiParameterStub[p1:java.lang.Object]
             PsiModifierListStub[mask=0]
         PsiRefListStub[THROWS_LIST:]
-      PsiMethodStub[get:java.lang.Object]
+      PsiMethodStub[containsAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            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[get:E]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
         PsiParameterListStub
           PsiParameterStub[p1:int]
             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[readResolve:java.lang.Object]
         PsiModifierListStub[mask=2]
         PsiTypeParameterListStub
         PsiParameterListStub
         PsiRefListStub[THROWS_LIST:]
+    PsiClassStub[name=EmptyListIterator fqn=java.util.Collections.EmptyListIterator]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.Collections.EmptyIterator<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.ListIterator<E>]
+      PsiFieldStub[EMPTY_ITERATOR:java.util.Collections.EmptyListIterator<java.lang.Object>]
+        PsiModifierListStub[mask=4120]
+      PsiMethodStub[cons EmptyListIterator:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[hasPrevious:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[previous:E]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[nextIndex:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[previousIndex:int]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[set:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[add:void]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:E]
+            PsiModifierListStub[mask=0]
+        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>]
+        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]
       PsiFieldStub[serialVersionUID:long=6428348081105594320L]
         PsiModifierListStub[mask=26]
@@ -117,24 +1213,24 @@
           PsiParameterStub[p1:java.lang.Object]
             PsiModifierListStub[mask=0]
         PsiRefListStub[THROWS_LIST:]
-      PsiMethodStub[get:java.lang.Object]
+      PsiMethodStub[get:V]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
         PsiParameterListStub
           PsiParameterStub[p1:java.lang.Object]
             PsiModifierListStub[mask=0]
         PsiRefListStub[THROWS_LIST:]
-      PsiMethodStub[keySet:java.util.Set<java.lang.Object>]
+      PsiMethodStub[keySet:java.util.Set<K>]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
         PsiParameterListStub
         PsiRefListStub[THROWS_LIST:]
-      PsiMethodStub[values:java.util.Collection<java.lang.Object>]
+      PsiMethodStub[values:java.util.Collection<V>]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
         PsiParameterListStub
         PsiRefListStub[THROWS_LIST:]
-      PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<java.lang.Object,java.lang.Object>>]
+      PsiMethodStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
         PsiParameterListStub
@@ -159,7 +1255,9 @@
     PsiClassStub[name=EmptySet fqn=java.util.Collections.EmptySet]
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
-      PsiRefListStub[EXTENDS_LIST:java.util.AbstractSet<java.lang.Object>]
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractSet<E>]
       PsiRefListStub[IMPLEMENTS_LIST:java.io.Serializable]
       PsiFieldStub[serialVersionUID:long=1582296315990362920L]
         PsiModifierListStub[mask=26]
@@ -168,7 +1266,7 @@
         PsiTypeParameterListStub
         PsiParameterListStub
         PsiRefListStub[THROWS_LIST:]
-      PsiMethodStub[iterator:java.util.Iterator<java.lang.Object>]
+      PsiMethodStub[iterator:java.util.Iterator<E>]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
         PsiParameterListStub
@@ -178,6 +1276,11 @@
         PsiTypeParameterListStub
         PsiParameterListStub
         PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[isEmpty:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
       PsiMethodStub[contains:boolean]
         PsiModifierListStub[mask=1]
         PsiTypeParameterListStub
@@ -185,6 +1288,27 @@
           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[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[readResolve:java.lang.Object]
         PsiModifierListStub[mask=2]
         PsiTypeParameterListStub
@@ -193,12 +1317,12 @@
     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]
+      PsiFieldStub[REVERSE_ORDER:java.util.Collections.ReverseComparator]
+        PsiModifierListStub[mask=4120]
       PsiMethodStub[cons ReverseComparator:void]
         PsiModifierListStub[mask=2]
         PsiTypeParameterListStub
@@ -213,6 +1337,11 @@
           PsiParameterStub[p2:java.lang.Comparable<java.lang.Object>]
             PsiModifierListStub[mask=0]
         PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[readResolve:java.lang.Object]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+        PsiRefListStub[THROWS_LIST:]
     PsiClassStub[name=ReverseComparator2 fqn=java.util.Collections.ReverseComparator2]
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
@@ -223,7 +1352,7 @@
       PsiFieldStub[serialVersionUID:long=4374092139857L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[cmp:java.util.Comparator<T>]
-        PsiModifierListStub[mask=2]
+        PsiModifierListStub[mask=4112]
       PsiMethodStub[cons ReverseComparator2:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -240,11 +1369,143 @@
           PsiParameterStub[p2:T]
             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[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=SetFromMap fqn=java.util.Collections.SetFromMap]
+      PsiModifierListStub[mask=10]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiRefListStub[EXTENDS_LIST:java.util.AbstractSet<E>]
+      PsiRefListStub[IMPLEMENTS_LIST:java.util.Set<E>, java.io.Serializable]
+      PsiFieldStub[m:java.util.Map<E,java.lang.Boolean>]
+        PsiModifierListStub[mask=18]
+      PsiFieldStub[s:java.util.Set<E>]
+        PsiModifierListStub[mask=130]
+      PsiFieldStub[serialVersionUID:long=2454657854757543876L]
+        PsiModifierListStub[mask=26]
+      PsiMethodStub[cons SetFromMap:void]
+        PsiModifierListStub[mask=4096]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Map<E,java.lang.Boolean>]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:]
+      PsiMethodStub[clear:void]
+        PsiModifierListStub[mask=1]
+        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[contains:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.lang.Object]
+            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[add:boolean]
+        PsiModifierListStub[mask=1]
+        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[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[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[containsAll:boolean]
+        PsiModifierListStub[mask=1]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.util.Collection<?>]
+            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[readObject:void]
+        PsiModifierListStub[mask=2]
+        PsiTypeParameterListStub
+        PsiParameterListStub
+          PsiParameterStub[p1:java.io.ObjectInputStream]
+            PsiModifierListStub[mask=0]
+        PsiRefListStub[THROWS_LIST:java.io.IOException, java.lang.ClassNotFoundException]
     PsiClassStub[name=SingletonList fqn=java.util.Collections.SingletonList]
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
@@ -253,7 +1514,7 @@
       PsiRefListStub[EXTENDS_LIST:java.util.AbstractList<E>]
       PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess, java.io.Serializable]
       PsiFieldStub[serialVersionUID:long=3093736618740652951L]
-        PsiModifierListStub[mask=4120]
+        PsiModifierListStub[mask=26]
       PsiFieldStub[element:E]
         PsiModifierListStub[mask=18]
       PsiMethodStub[cons SingletonList:void]
@@ -263,6 +1524,11 @@
           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
@@ -291,62 +1557,6 @@
           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]
@@ -459,9 +1669,9 @@
       PsiFieldStub[serialVersionUID:long=3053995032091335093L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[c:java.util.Collection<E>]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiFieldStub[mutex:java.lang.Object]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiMethodStub[cons SynchronizedCollection:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -566,6 +1776,13 @@
         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]
     PsiClassStub[name=SynchronizedList fqn=java.util.Collections.SynchronizedList]
       PsiModifierListStub[mask=4104]
       PsiTypeParameterListStub
@@ -574,9 +1791,9 @@
       PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedCollection<E>]
       PsiRefListStub[IMPLEMENTS_LIST:java.util.List<E>]
       PsiFieldStub[serialVersionUID:long=-7754090372962971524L]
-        PsiModifierListStub[mask=4120]
+        PsiModifierListStub[mask=26]
       PsiFieldStub[list:java.util.List<E>]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiMethodStub[cons SynchronizedList:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -698,9 +1915,9 @@
       PsiFieldStub[serialVersionUID:long=1978198479659022715L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[m:java.util.Map<K,V>]
-        PsiModifierListStub[mask=2]
+        PsiModifierListStub[mask=18]
       PsiFieldStub[mutex:java.lang.Object]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiFieldStub[keySet:java.util.Set<K>]
         PsiModifierListStub[mask=130]
       PsiFieldStub[entrySet:java.util.Set<java.util.Map.Entry<K,V>>]
@@ -814,6 +2031,13 @@
         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]
     PsiClassStub[name=SynchronizedRandomAccessList fqn=java.util.Collections.SynchronizedRandomAccessList]
       PsiModifierListStub[mask=4104]
       PsiTypeParameterListStub
@@ -822,7 +2046,7 @@
       PsiRefListStub[EXTENDS_LIST:java.util.Collections.SynchronizedList<E>]
       PsiRefListStub[IMPLEMENTS_LIST:java.util.RandomAccess]
       PsiFieldStub[serialVersionUID:long=1530674583602358482L]
-        PsiModifierListStub[mask=4120]
+        PsiModifierListStub[mask=26]
       PsiMethodStub[cons SynchronizedRandomAccessList:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -902,7 +2126,7 @@
       PsiFieldStub[serialVersionUID:long=-8798146769416483793L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[sm:java.util.SortedMap<K,V>]
-        PsiModifierListStub[mask=2]
+        PsiModifierListStub[mask=18]
       PsiMethodStub[cons SynchronizedSortedMap:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -967,7 +2191,7 @@
       PsiFieldStub[serialVersionUID:long=8695801310862127406L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[ss:java.util.SortedSet<E>]
-        PsiModifierListStub[mask=2]
+        PsiModifierListStub[mask=18]
       PsiMethodStub[cons SynchronizedSortedSet:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -1032,7 +2256,7 @@
       PsiFieldStub[serialVersionUID:long=1820017752578914078L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[c:java.util.Collection<? extends E>]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiMethodStub[cons UnmodifiableCollection:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -1136,9 +2360,9 @@
       PsiRefListStub[EXTENDS_LIST:java.util.Collections.UnmodifiableCollection<E>]
       PsiRefListStub[IMPLEMENTS_LIST:java.util.List<E>]
       PsiFieldStub[serialVersionUID:long=-283967356065247728L]
-        PsiModifierListStub[mask=4120]
+        PsiModifierListStub[mask=26]
       PsiFieldStub[list:java.util.List<? extends E>]
-        PsiModifierListStub[mask=4096]
+        PsiModifierListStub[mask=4112]
       PsiMethodStub[cons UnmodifiableList:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -1536,7 +2760,7 @@
       PsiFieldStub[serialVersionUID:long=-8806743815996713206L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[sm:java.util.SortedMap<K,? extends V>]
-        PsiModifierListStub[mask=2]
+        PsiModifierListStub[mask=18]
       PsiMethodStub[cons UnmodifiableSortedMap:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -1592,7 +2816,7 @@
       PsiFieldStub[serialVersionUID:long=-4929149591599911165L]
         PsiModifierListStub[mask=26]
       PsiFieldStub[ss:java.util.SortedSet<E>]
-        PsiModifierListStub[mask=2]
+        PsiModifierListStub[mask=18]
       PsiMethodStub[cons UnmodifiableSortedSet:void]
         PsiModifierListStub[mask=4096]
         PsiTypeParameterListStub
@@ -1662,8 +2886,6 @@
       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
@@ -1693,9 +2915,9 @@
       PsiModifierListStub[mask=9]
       PsiTypeParameterListStub
         PsiTypeParameter[T]
-          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Object, java.lang.Comparable<? super T>]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
       PsiParameterListStub
-        PsiParameterStub[p1:java.util.List<? extends T>]
+        PsiParameterStub[p1:java.util.List<? extends java.lang.Comparable<? super T>>]
           PsiModifierListStub[mask=0]
         PsiParameterStub[p2:T]
           PsiModifierListStub[mask=0]
@@ -1704,9 +2926,9 @@
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
         PsiTypeParameter[T]
-          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Object, java.lang.Comparable<? super T>]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
       PsiParameterListStub
-        PsiParameterStub[p1:java.util.List<? extends T>]
+        PsiParameterStub[p1:java.util.List<? extends java.lang.Comparable<? super T>>]
           PsiModifierListStub[mask=0]
         PsiParameterStub[p2:T]
           PsiModifierListStub[mask=0]
@@ -1715,9 +2937,9 @@
       PsiModifierListStub[mask=10]
       PsiTypeParameterListStub
         PsiTypeParameter[T]
-          PsiRefListStub[EXTENDS_BOUNDS_LIST:java.lang.Object, java.lang.Comparable<? super T>]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
       PsiParameterListStub
-        PsiParameterStub[p1:java.util.List<? extends T>]
+        PsiParameterStub[p1:java.util.List<? extends java.lang.Comparable<? super T>>]
           PsiModifierListStub[mask=0]
         PsiParameterStub[p2:T]
           PsiModifierListStub[mask=0]
@@ -2099,6 +3321,15 @@
         PsiParameterStub[p2:java.lang.Class<E>]
           PsiModifierListStub[mask=0]
       PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[zeroLengthArray:T[]]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.lang.Class<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
     PsiMethodStub[checkedSet:java.util.Set<E>]
       PsiModifierListStub[mask=9]
       PsiTypeParameterListStub
@@ -2162,6 +3393,27 @@
         PsiParameterStub[p3:java.lang.Class<V>]
           PsiModifierListStub[mask=0]
       PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[emptyIterator:java.util.Iterator<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[emptyListIterator:java.util.ListIterator<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[emptyEnumeration:java.util.Enumeration<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+      PsiRefListStub[THROWS_LIST:]
     PsiMethodStub[emptySet:java.util.Set<T>]
       PsiModifierListStub[mask=25]
       PsiTypeParameterListStub
@@ -2194,6 +3446,15 @@
         PsiParameterStub[p1:T]
           PsiModifierListStub[mask=0]
       PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[singletonIterator:java.util.Iterator<E>]
+      PsiModifierListStub[mask=4104]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:E]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
     PsiMethodStub[singletonList:java.util.List<T>]
       PsiModifierListStub[mask=9]
       PsiTypeParameterListStub
@@ -2262,7 +3523,7 @@
           PsiModifierListStub[mask=0]
       PsiRefListStub[THROWS_LIST:]
     PsiMethodStub[eq:boolean]
-      PsiModifierListStub[mask=10]
+      PsiModifierListStub[mask=4104]
       PsiTypeParameterListStub
       PsiParameterListStub
         PsiParameterStub[p1:java.lang.Object]
@@ -2290,6 +3551,7 @@
       PsiRefListStub[THROWS_LIST:]
     PsiMethodStub[varargs addAll:boolean]
       PsiModifierListStub[mask=9]
+        PsiAnnotationStub[@java.lang.SafeVarargs]
       PsiTypeParameterListStub
         PsiTypeParameter[T]
           PsiRefListStub[EXTENDS_BOUNDS_LIST:]
@@ -2299,3 +3561,21 @@
         PsiParameterStub[p2:T...]
           PsiModifierListStub[mask=0]
       PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[newSetFromMap:java.util.Set<E>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[E]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Map<E,java.lang.Boolean>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
+    PsiMethodStub[asLifoQueue:java.util.Queue<T>]
+      PsiModifierListStub[mask=9]
+      PsiTypeParameterListStub
+        PsiTypeParameter[T]
+          PsiRefListStub[EXTENDS_BOUNDS_LIST:]
+      PsiParameterListStub
+        PsiParameterStub[p1:java.util.Deque<T>]
+          PsiModifierListStub[mask=0]
+      PsiRefListStub[THROWS_LIST:]
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SameVarMethodNames.java b/java/java-tests/testData/refactoring/inlineMethod/SameVarMethodNames.java
new file mode 100644
index 0000000..0260f08
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SameVarMethodNames.java
@@ -0,0 +1,13 @@
+class Test {
+  public boolean isConsideredFinal(int cl) {
+    return haveSeenAllExp<caret>ectedAtCl(cl);
+  }
+
+  private boolean haveSeenAllExpectedAtCl(int cl) {
+    return cl == cl();
+  }
+
+  int cl() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/inlineMethod/SameVarMethodNames.java.after b/java/java-tests/testData/refactoring/inlineMethod/SameVarMethodNames.java.after
new file mode 100644
index 0000000..a7ff12c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/inlineMethod/SameVarMethodNames.java.after
@@ -0,0 +1,9 @@
+class Test {
+  public boolean isConsideredFinal(int cl) {
+      return cl == cl();
+  }
+
+    int cl() {
+    return 0;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/after/Outer.java b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/after/Outer.java
new file mode 100644
index 0000000..aafb683
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/after/Outer.java
@@ -0,0 +1,10 @@
+class Outer {
+    static void foo() {}
+
+    static class Inner {
+    }
+
+    {
+        Runnable r = Outer::foo;
+    }
+}
diff --git a/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/before/Outer.java b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/before/Outer.java
new file mode 100644
index 0000000..ae82c74
--- /dev/null
+++ b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/before/Outer.java
@@ -0,0 +1,9 @@
+class Outer {
+    static class Inner {
+        static void foo() {}
+    }
+
+    {
+        Runnable r = Inner::foo;
+    }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy
index 45a3f81..5d0bcd4 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy
@@ -26,6 +26,8 @@
 import com.intellij.psi.util.PsiTreeUtil
 import com.intellij.testFramework.PsiTestUtil
 import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
+import org.jetbrains.annotations.NotNull
+
 /**
  * @author peter
  */
@@ -94,7 +96,7 @@
   
   static class CacheVerifyingContributor extends CompletionContributor {
     @Override
-    void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) {
+    void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) {
       PsiClass psiClass = PsiTreeUtil.getParentOfType(parameters.position, PsiClass)
       for (ci in OverrideImplementExploreUtil.getMethodsToOverrideImplement(psiClass, true)) {
         assert ci.element.valid
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy
index a5397a2..8a54c95 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy
@@ -47,7 +47,9 @@
 import com.intellij.openapi.fileEditor.FileEditor
 import com.intellij.openapi.fileEditor.FileEditorManager
 import com.intellij.openapi.progress.ProgressManager
+import com.intellij.openapi.util.Computable
 import com.intellij.openapi.util.Disposer
+import com.intellij.psi.PsiClass
 import com.intellij.psi.PsiFile
 import com.intellij.psi.PsiJavaFile
 import com.intellij.psi.statistics.StatisticsManager
@@ -559,7 +561,7 @@
   static class LongContributor extends CompletionContributor {
 
     @Override
-    void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) {
+    void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) {
       result.runRemainingContributors(parameters, true)
       Thread.sleep 500
     }
@@ -892,9 +894,7 @@
   void bar(int aaa, int aaaaa) { foo(<caret>) }
 } """)
     type 'a'
-    println myFixture.lookupElementStrings
     type 'a'
-    println myFixture.lookupElementStrings
     type ','
     assert myFixture.editor.document.text.contains('foo(aaa, )')
   }
@@ -967,7 +967,12 @@
   void x__goo() {}
 }
 '''
-    def cls = ((PsiJavaFile)myFixture.file).getClasses()[0]
+    PsiClass cls = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
+          @Override
+          public PsiClass compute() {
+            return ((PsiJavaFile)myFixture.file).getClasses()[0];
+          }
+    });
     def foo = cls.methods[0]
     def goo = cls.methods[2]
     type('x')
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java
index 8aa780a..6eb495d 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java
@@ -64,6 +64,7 @@
   }
 
   public void testGenerics() throws Exception {
+    myFixture.addFileToProject("a.properties", "foo=bar"); // check that property variants don't override reflection ones
     doTest(0, "foo");
   }
 
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy
index c1e6d41..900555d 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy
@@ -633,6 +633,19 @@
     checkPreferredItems 0, 'fact'
   }
 
+  public void testPreferAnnotationsToInterfaceKeyword() {
+    checkPreferredItems 0, 'Deprecated', 'Override'
+  }
+
+  public void testPreferThrownExceptionsInCatch() {
+    checkPreferredItems 0, 'FileNotFoundException', 'File'
+  }
+
+  public void testHonorFirstLetterCase() {
+    CodeInsightSettings.getInstance().COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE;
+    checkPreferredItems 0, 'posIdMap', 'PImageDecoder', 'PNGImageDecoder'
+  }
+
   public void testGlobalStaticMemberStats() {
     configureNoCompletion(getTestName(false) + ".java")
     myFixture.complete(CompletionType.BASIC, 2)
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy
index ba38fd1..79a94aa 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy
@@ -792,7 +792,7 @@
 
   public void testDoubleFalse() throws Throwable {
     configureByFile(getTestName(false) + ".java");
-    assertFirstStringItems("false", "fefefef", "float", "finalize");
+    assertFirstStringItems("fefefef", "false", "float", "finalize");
   }
 
   public void testSameNamedVariableInNestedClasses() throws Throwable {
@@ -938,6 +938,13 @@
 
   public void testQualifyInnerMembers() throws Throwable { doTest('\n') }
 
+  public void testDeepInner() throws Throwable {
+    configure()
+    assert myFixture.lookupElementStrings == ['ClassInner1', 'ClassInner1.ClassInner2']
+    selectItem(lookup.items[1])
+    checkResult()
+  }
+
   public void testSuggestExpectedTypeMembers() throws Throwable { doTest('\n') }
   public void testSuggestExpectedTypeMembersInCall() throws Throwable { doTest('\n') }
   public void testSuggestExpectedTypeMembersInAnno() throws Throwable { doTest('\n') }
@@ -1209,6 +1216,12 @@
 
   public void testConstantInAnno() { doTest() }
 
+  public void testCharsetName() {
+    myFixture.addClass("package java.nio.charset; public class Charset { public static Charset forName(String s) {} }")
+    configureByTestName()
+    assert myFixture.lookupElementStrings.contains('UTF-8')
+  }
+
   public void testInnerClassInExtendsGenerics() {
     def text = "package bar; class Foo extends List<Inne<caret>> { public static class Inner {} }"
     myFixture.configureFromExistingVirtualFile(myFixture.addClass(text).containingFile.virtualFile)
@@ -1240,7 +1253,7 @@
     configure()
     def items = myFixture.lookupElements.findAll { it.lookupString == 'String' }
     assert items.size() == 1
-    assert LookupElementPresentation.renderElement(items[0]).tailText?.contains('java.lang')
+    assert LookupElementPresentation.renderElement(items[0]).tailText == ' (java.lang)'
   }
 
   public void testSameSignature() {
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
index 74d2465..f6be068 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
@@ -368,6 +368,9 @@
   public void testIDEA125816() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
   public void testIDEA57338() { doTest(LanguageLevel.JDK_1_6, JavaSdkVersion.JDK_1_6, false); }
   public void testIDEA67600() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
+  public void testIDEA126697() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, true); }
+  public void testIDEA126633() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
+  public void testIDEA124363() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
   //jdk should propagate LL 1.4 but actually it provides LL 1.7?!
   public void testCastObjectToIntJdk14() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_4, false); }
 
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java
index 20a5d51..7950628 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java
@@ -184,6 +184,10 @@
     doTest();
   }
 
+  public void testRawTypeFromParentArrayType() throws Exception {
+    doTest();
+  }
+
   private void doTest() throws Exception {
     doTest(false);
   }
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java
index f5e6a65..6bd7654 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java
@@ -226,6 +226,22 @@
     doTest();
   }
 
+  public void testIDEA125254() throws Exception {
+    doTest();
+  }
+
+  public void testIDEA124961() throws Exception {
+    doTest();
+  }
+
+  public void testIDEA126109() throws Exception {
+    doTest();
+  }
+
+  public void testIDEA126809() throws Exception {
+    doTest();
+  }
+
   private void doTest() {
     doTest(false);
   }
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java
index 16af900..6860bc0 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewMethodRefHighlightingTest.java
@@ -261,6 +261,18 @@
     doTest();
   }
 
+  public void testRejectReceiverTypesForConstructorRefs() {
+    doTest();
+  }
+
+  public void testEnumValuesMethod() throws Exception {
+    doTest();
+  }
+
+  public void testMissedApplicableMemberContainingClassSubstitution() throws Exception {
+    doTest();
+  }
+
   private void doTest() {
     doTest(false);
   }
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddMethodQualifierTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddMethodQualifierTest.java
new file mode 100644
index 0000000..48572b2
--- /dev/null
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddMethodQualifierTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2000-2014 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.intellij.codeInsight.daemon.quickFix;
+
+import com.intellij.JavaTestUtil;
+import com.intellij.codeInsight.daemon.impl.quickfix.AddMethodQualifierFix;
+import com.intellij.codeInsight.intention.IntentionAction;
+import com.intellij.psi.PsiNamedElement;
+import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.*;
+
+/**
+ * @author Dmitry Batkovich
+ */
+public class AddMethodQualifierTest extends JavaCodeInsightFixtureTestCase {
+
+  @Override
+  protected String getTestDataPath() {
+    return JavaTestUtil.getJavaTestDataPath() + "/codeInsight/daemonCodeAnalyzer/quickFix/addMethodCallQualifier/";
+  }
+
+  public void testNonStaticMethod() {
+    doTest("fieldElement", "staticElement", "localElement1", "paramElement");
+  }
+
+  public void testStaticMethod() {
+    doTest("staticElement", "localElement1", "paramElement");
+  }
+
+  public void testNestedMethod() {
+    doTest("fieldElement", "localElement1", "nestedField", "nestedParamElement", "staticElement", "paramElement");
+  }
+
+  public void testConstructor() {
+    doTest("fieldElement", "staticElement", "localElement1");
+  }
+
+  public void testStaticInitializer() {
+    doTest("staticElement", "localElement1");
+  }
+
+  public void testFix() {
+    doTestFix();
+  }
+
+  private void doTestFix() {
+    myFixture.configureByFile(getTestName(false) + "Before.java");
+    final AddMethodQualifierFix quickFix = getQuickFix();
+    assertNotNull(quickFix);
+    myFixture.launchAction(quickFix);
+    myFixture.checkResultByFile(getTestName(false) + "After.java");
+  }
+
+  private void doTest(final String... candidatesNames) {
+    myFixture.configureByFile(getTestName(false) + ".java");
+    final AddMethodQualifierFix addMethodQualifierFix = getQuickFix();
+    if (candidatesNames.length == 0) {
+      assertNull(addMethodQualifierFix);
+      return;
+    }
+    assertNotNull(addMethodQualifierFix);
+    final Set<String> actualCandidatesNames = new TreeSet<String>(ContainerUtil.map(addMethodQualifierFix.getCandidates(), new Function<PsiNamedElement, String>() {
+      @Override
+      public String fun(final PsiNamedElement psiNamedElement) {
+        final String name = psiNamedElement.getName();
+        assertNotNull(name);
+        return name;
+      }
+    }));
+    final Set<String> expectedCandidatesNames = new TreeSet<String>(ContainerUtil.list(candidatesNames));
+    assertEquals(expectedCandidatesNames, actualCandidatesNames);
+  }
+
+  @Nullable
+  private AddMethodQualifierFix getQuickFix() {
+    final List<IntentionAction> availableIntentions = myFixture.getAvailableIntentions();
+    AddMethodQualifierFix addMethodQualifierFix = null;
+    for (final IntentionAction availableIntention : availableIntentions) {
+      if (availableIntention instanceof AddMethodQualifierFix) {
+        addMethodQualifierFix = (AddMethodQualifierFix)availableIntention;
+        break;
+      }
+    }
+    return addMethodQualifierFix;
+  }
+
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy
index 41d72f7..2047f13 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy
@@ -27,6 +27,7 @@
 import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider
 import com.intellij.psi.JavaPsiFacade
 import com.intellij.psi.PsiClass
+import com.intellij.psi.PsiLiteralExpression
 import com.intellij.psi.PsiMethod
 import com.intellij.psi.search.GlobalSearchScope
 import com.intellij.testFramework.LightProjectDescriptor
@@ -592,6 +593,225 @@
     assert regions[0].placeholderText == '{...}'
   }
 
+  public void "test insert boolean literal argument name"() {
+    def text = """class Groo {
+
+ public void test() {
+  boolean testNow = System.currentTimeMillis() > 34000;
+  int times = 1;
+  float pi = 4;
+  String title = "Testing..."
+  char ch = 'q'
+  File file;
+
+  configure(true, false, 555, 3.141f, "Huge Title", 'c', null);
+  configure(testNow, shouldIgnoreRoots(), fourteen, pi, title, c, file);
+ }
+
+ pubic void configure(boolean testNow, boolean shouldIgnoreRoots, int times, float pi, String title, char terminate, File file) {
+  System.out.println();
+  System.out.println();
+ }
+
+}"""
+    configure text
+    PsiClass fooClass = JavaPsiFacade.getInstance(project).findClass('Groo', GlobalSearchScope.allScope(project))
+
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.size() == 9
+
+    def literals = fooClass.methods[0].body.statements[6].children[0].children[1].children.findAll { it instanceof PsiLiteralExpression }
+    def parameters = fooClass.methods[1].parameterList.parameters
+
+    for (int i = 0; i < literals.size(); i++) {
+      def currentElement = literals[i]
+      def correspondingFolding = regions[i + 1]
+      assert correspondingFolding.startOffset == currentElement.textRange.startOffset && correspondingFolding.endOffset == currentElement.textRange.endOffset
+      assert correspondingFolding.placeholderText == parameters[i].name + ": " + currentElement.text
+    }
+  }
+
+  public void "test do not inline name if setter"() {
+    def text = """class Groo {
+
+ public void test() {
+  setTestNow(false);
+  System.out.println("");
+ }
+
+ pubic void setTestNow(boolean testNow) {
+  System.out.println("");
+  System.out.println("");
+ }
+
+}"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions
+    assert regions.size() == 2
+  }
+
+  public void "test do not collapse varargs"() {
+    def text = """
+public class VarArgTest {
+
+  public void main() {
+    System.out.println("AAA");
+    testBooleanVarargs(13, false);
+  }
+
+  public boolean testBooleanVarargs(int test, boolean... booleans) {
+    int temp = test;
+    return false;
+  }
+}
+"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.size() == 3
+    checkRangeOffsetByPositionInText(regions[1], text, "13")
+    assert regions[1].placeholderText == "test: 13"
+  }
+
+  public void "test inline if argument length is one (EA-57555)"() {
+    def text = """
+public class CharSymbol {
+
+  public void main() {
+    System.out.println("AAA");
+    count(1, false);
+  }
+
+  public void count(int test, boolean fast) {
+    int temp = test;
+    boolean isFast = fast;
+  }
+}
+"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.size() == 4
+
+    checkRangeOffsetByPositionInText(regions[1], text, "1")
+    assert regions[1].placeholderText == "test: 1"
+
+    checkRangeOffsetByPositionInText(regions[2], text, "false")
+    assert regions[2].placeholderText == "fast: false"
+  }
+
+  public void "test inline names if literal expression can be assigned to method parameter"() {
+    def text = """
+public class CharSymbol {
+
+  public void main() {
+    Object obj = new Object();
+    count(100, false, "Hi!");
+  }
+
+  public void count(Integer test, Boolean boo, CharSequence seq) {
+    int a = test;
+    Object obj = new Object();
+  }
+}
+"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.size() == 5
+
+    checkRangeOffsetByPositionInText(regions[1], text, "100")
+    assert regions[1].placeholderText == "test: 100"
+
+    checkRangeOffsetByPositionInText(regions[2], text, "false")
+    assert regions[2].placeholderText == "boo: false"
+
+    checkRangeOffsetByPositionInText(regions[3], text, '"Hi!"')
+    assert regions[3].placeholderText == 'seq: "Hi!"'
+  }
+
+  public void "test inline negative numbers (IDEA-126753)"() {
+    def text = """
+public class CharSymbol {
+
+  public void main() {
+    Object obj = new Object();
+    count(-1, obj);
+  }
+
+  public void count(int test, Object obj) {
+    Object tmp = obj;
+    boolean isFast = false;
+  }
+}
+"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.size() == 3
+
+    checkRangeOffsetByPositionInText(regions[1], text, "-1")
+    assert regions[1].placeholderText == "test: -1"
+  }
+
+  public void "test inline constructor literal arguments names"() {
+    def text = """
+public class Test {
+
+  public void main() {
+    System.out.println("AAA");
+    Checker r = new Checker(true, false) {
+        @Override
+        void test() {
+        }
+    };
+  }
+
+  abstract class Checker {
+    Checker(boolean applyToFirst, boolean applyToSecond) {}
+    abstract void test();
+  }
+}
+"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.length == 6
+
+    assert regions[1].placeholderText == "applyToFirst: true"
+    assert regions[2].placeholderText == "applyToSecond: false"
+
+    checkRangeOffsetByPositionInText(regions[1], text, "true")
+    checkRangeOffsetByPositionInText(regions[2], text, "false")
+  }
+
+  public void "test inline anonymous class constructor literal arguments names"() {
+    def text = """
+public class Test {
+
+  Test(int counter, boolean shouldTest) {
+    System.out.println();
+    System.out.println();
+  }
+
+  public static void main() {
+    System.out.println();
+    Test t = new Test(10, false);
+  }
+
+}
+"""
+    configure text
+    def regions = myFixture.editor.foldingModel.allFoldRegions.sort { it.startOffset }
+    assert regions.length == 4
+
+    assert regions[2].placeholderText == "counter: 10"
+    assert regions[3].placeholderText == "shouldTest: false"
+
+    checkRangeOffsetByPositionInText(regions[2], text, "10")
+    checkRangeOffsetByPositionInText(regions[3], text, "false")
+  }
+
+  private static def checkRangeOffsetByPositionInText(FoldRegion region, String text, String foldElement) {
+    assert region.startOffset == text.indexOf(foldElement) && region.endOffset == text.indexOf(foldElement) + foldElement.length()
+  }
+
+
   private def changeFoldRegions(Closure op) {
     myFixture.editor.foldingModel.runBatchFoldingOperationDoNotCollapseCaret(op)
   }
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/SwapIfStatementsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SwapIfStatementsTest.java
new file mode 100644
index 0000000..a973a97
--- /dev/null
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SwapIfStatementsTest.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2000-2014 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.intellij.codeInsight.intention;
+
+import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase;
+
+/**
+ * @author Dmitry Batkovich
+ */
+public class SwapIfStatementsTest extends LightQuickFixParameterizedTestCase {
+
+  @Override
+  protected String getBasePath() {
+    return "/codeInsight/daemonCodeAnalyzer/quickFix/swapIfStatements";
+  }
+
+  @Override
+  protected boolean shouldBeAvailableAfterExecution() {
+    return true;
+  }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java
index 6df51f0..454bb7f 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java
@@ -76,6 +76,10 @@
     doTestField();
   }
 
+  public void testAnnotations() throws Exception {
+    doTestField();
+  }
+
   public void testLiteral() throws Exception {
     doTestField();
   }
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy
index cc50869..3acb984 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/template/LiveTemplateTest.groovy
@@ -461,7 +461,7 @@
   }
 
   @Override
-  protected void invokeTestRunnable(final Runnable runnable) throws Exception {
+  protected void invokeTestRunnable(@NotNull final Runnable runnable) throws Exception {
     if (name in ["testNavigationActionsDontTerminateTemplate", "testTemplateWithEnd", "testDisappearingVar", "test escape string characters in soutv"]) {
       runnable.run();
       return;
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/ContractInferenceFromSourceTest.groovy b/java/java-tests/testSrc/com/intellij/codeInspection/ContractInferenceFromSourceTest.groovy
index ab9a566..32982f3 100644
--- a/java/java-tests/testSrc/com/intellij/codeInspection/ContractInferenceFromSourceTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/ContractInferenceFromSourceTest.groovy
@@ -171,6 +171,55 @@
     assert c == []
   }
 
+  public void "test plain delegation"() {
+    def c = inferContracts("""
+  boolean delegating(Object o) {
+    return smth(o);
+  }
+  boolean smth(Object o) {
+    assert o instanceof String;
+    return true;
+  }
+""")
+    assert c == ['null -> fail']
+  }
+
+  public void "test arg swapping delegation"() {
+    def c = inferContracts("""
+  boolean delegating(Object o, Object o1) {
+    return smth(o1, o);
+  }
+  boolean smth(Object o, Object o1) {
+    return o == null && o1 != null;
+  }
+""")
+    assert c == ['_, !null -> false', 'null, null -> false', '!null, null -> true']
+  }
+
+  public void "test negating delegation"() {
+    def c = inferContracts("""
+  boolean delegating(Object o) {
+    return !smth(o);
+  }
+  boolean smth(Object o) {
+    return o == null;
+  }
+""")
+    assert c == ['null -> false', '!null -> true']
+  }
+
+  public void "test delegation with constant"() {
+    def c = inferContracts("""
+  boolean delegating(Object o) {
+    return smth(null);
+  }
+  boolean smth(Object o) {
+    return o == null;
+  }
+""")
+    assert c == ['_ -> true']
+  }
+
   private String inferContract(String method) {
     return assertOneElement(inferContracts(method))
   }
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java
index 67987b3..833b519 100644
--- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java
@@ -71,6 +71,9 @@
   public void testGeneratedEquals() throws Throwable { doTest(); }
 
   public void testIDEA84489() throws Throwable { doTest(); }
+  public void testComparingNullToNotNull() { doTest(); }
+  public void testComparingNullableToNullable() { doTest(); }
+  public void testComparingNullableToUnknown() { doTest(); }
   public void testComparingToNotNullShouldNotAffectNullity() throws Throwable { doTest(); }
   public void testComparingToNullableShouldNotAffectNullity() throws Throwable { doTest(); }
   public void testStringTernaryAlwaysTrue() throws Throwable { doTest(); }
@@ -235,6 +238,7 @@
   public void testManySequentialInstanceofsNotComplex() { doTest(); }
   public void testLongDisjunctionsNotComplex() { doTest(); }
   public void testWhileNotComplex() { doTest(); }
+  public void testAssertTrueNotComplex() { doTest(); }
   public void testManyDisjunctiveFieldAssignmentsInLoopNotComplex() { doTest(); }
   public void testManyContinuesNotComplex() { doTest(); }
   public void testFinallyNotComplex() { doTest(); }
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/OfflineIRVTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/OfflineIRVTest.java
new file mode 100644
index 0000000..a1f81da
--- /dev/null
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/OfflineIRVTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
+ */
+
+/*
+ * User: anna
+ * Date: 14-Jan-2007
+ */
+package com.intellij.codeInspection;
+
+import com.intellij.codeInsight.daemon.HighlightDisplayKey;
+import com.intellij.codeInspection.actions.ViewOfflineResultsAction;
+import com.intellij.codeInspection.defUse.DefUseInspection;
+import com.intellij.codeInspection.defUse.DefUseInspectionBase;
+import com.intellij.codeInspection.ex.InspectionProfileImpl;
+import com.intellij.codeInspection.ex.InspectionToolWrapper;
+import com.intellij.codeInspection.ex.LocalInspectionToolWrapper;
+import com.intellij.codeInspection.ex.ToolsImpl;
+import com.intellij.codeInspection.offline.OfflineProblemDescriptor;
+import com.intellij.codeInspection.offlineViewer.OfflineViewParseUtil;
+import com.intellij.codeInspection.ui.InspectionResultsView;
+import com.intellij.codeInspection.ui.InspectionTree;
+import com.intellij.codeInspection.ui.InspectionTreeNode;
+import com.intellij.openapi.application.ex.PathManagerEx;
+import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.psi.PsiElement;
+import com.intellij.testFramework.PlatformTestUtil;
+import com.intellij.testFramework.TestSourceBasedTestCase;
+import com.intellij.util.ui.tree.TreeUtil;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public class OfflineIRVTest extends TestSourceBasedTestCase {
+  private InspectionResultsView myView;
+  private LocalInspectionToolWrapper myToolWrapper;
+
+  private static String varMessage(String name) {
+    return InspectionsBundle.message("inspection.unused.assignment.problem.descriptor1", "'"+name+"'");
+  }
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    HighlightDisplayKey.register(DefUseInspectionBase.SHORT_NAME);
+    myToolWrapper = new LocalInspectionToolWrapper(new DefUseInspection());
+    myView = ViewOfflineResultsAction.showOfflineView(getProject(), parse(), new InspectionProfileImpl("test") {
+      @Override
+      public boolean isToolEnabled(final HighlightDisplayKey key, PsiElement element) {
+        return Comparing.strEqual(key.toString(), DefUseInspectionBase.SHORT_NAME);
+      }
+
+      @Override
+      @NotNull
+      public InspectionToolWrapper[] getInspectionTools(PsiElement element) {
+        return new InspectionToolWrapper[]{myToolWrapper};
+      }
+
+      @Override
+      @NotNull
+      public ModifiableModel getModifiableModel() {
+        return new InspectionProfileImpl("test") {
+          @Override
+          @NotNull
+          public InspectionToolWrapper[] getInspectionTools(PsiElement element) {
+            return new InspectionToolWrapper[]{myToolWrapper};
+          }
+
+          @Override
+          public boolean isToolEnabled(final HighlightDisplayKey key, PsiElement element) {
+            return Comparing.strEqual(key.toString(), DefUseInspectionBase.SHORT_NAME);
+          }
+        };
+      }
+    }, null);
+    myView.getGlobalInspectionContext().getTools().put(
+      myToolWrapper.getShortName(), new ToolsImpl(myToolWrapper, myToolWrapper.getDefaultLevel(), true));
+    myToolWrapper.initialize(myView.getGlobalInspectionContext());
+  }
+
+  private Map<String, Map<String, Set<OfflineProblemDescriptor>>> parse() throws IOException {
+    final String moduleName = getModule().getName();
+    final Map<String, Map<String, Set<OfflineProblemDescriptor>>> map = new HashMap<String, Map<String, Set<OfflineProblemDescriptor>>>();
+    final File res = new File(PathManagerEx.getTestDataPath(), getTestPath() + File.separator + "res");
+    final File[] files = res.listFiles();
+    assert files != null;
+    for (File file : files) {
+      final String name = file.getName();
+      final String problems = FileUtil.loadFile(file);
+      final Map<String, Set<OfflineProblemDescriptor>> descriptors = OfflineViewParseUtil.parse(problems);
+      for (Set<OfflineProblemDescriptor> problemDescriptors : descriptors.values()) {
+        for (OfflineProblemDescriptor descriptor : problemDescriptors) {
+          descriptor.setModule(moduleName);
+        }
+      }
+      map.put(name.substring(0, name.lastIndexOf('.')), descriptors);
+    }
+    return map;
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    Disposer.dispose(myView);
+    myView = null;
+    myToolWrapper = null;
+    super.tearDown();
+  }
+
+  public void testOfflineView() throws Exception {
+    myView.getGlobalInspectionContext().getUIOptions().SHOW_STRUCTURE = true;
+    InspectionTree tree = updateTree();
+    TreeUtil.expandAll(tree);
+    PlatformTestUtil.assertTreeEqual(tree, "-" + getProject() + "\n"
+                                           + " -Probable bugs\n"
+                                           + "  -" + myToolWrapper + "\n"
+                                           + "   -" + getModule().toString() + "\n"
+                                           + "    -<default>\n"
+                                           + "     -Test\n"
+                                           + "      -foo()\n"
+                                           + "       " + varMessage("j") + "\n"
+                                           + "      -main(String[])\n"
+                                           + "       " + varMessage("test") + "\n"
+                                           + "      -f()\n"
+                                           + "       -D\n"
+                                           + "        -b()\n"
+                                           + "         " + varMessage("r") + "\n"
+                                           + "         -anonymous (java.lang.Runnable)\n"
+                                           + "          -run()\n"
+                                           + "           " + varMessage("i") + "\n"
+                                           + "      -ff()\n"
+                                           + "       " + varMessage("d") + "\n"
+                                           + "       " + varMessage("a") + "\n");
+    myView.getGlobalInspectionContext().getUIOptions().SHOW_STRUCTURE = false;
+    tree = updateTree();
+    PlatformTestUtil.assertTreeEqual(tree, "-" + getProject() + "\n"
+                                           + " -Probable bugs\n"
+                                           + "  -" + myToolWrapper + "\n"
+                                           + "   -Test\n"
+                                           + "    " + varMessage("j") + "\n"
+                                           + "    " + varMessage("test") + "\n"
+                                           + "    " + varMessage("r") + "\n"
+                                           + "    " + varMessage("i") + "\n"
+                                           + "    " + varMessage("d") + "\n"
+                                           + "    " + varMessage("a") + "\n");
+    TreeUtil.selectFirstNode(tree);
+    final InspectionTreeNode root = (InspectionTreeNode)tree.getLastSelectedPathComponent();
+    root.ignoreElement();
+    TreeUtil.traverse(root, new TreeUtil.Traverse() {
+      @Override
+      public boolean accept(final Object node) {
+        assertTrue(((InspectionTreeNode)node).isResolved());
+        return true;
+      }
+    });
+    myView.getGlobalInspectionContext().getUIOptions().FILTER_RESOLVED_ITEMS = true;
+    tree = updateTree();
+    PlatformTestUtil.assertTreeEqual(tree, getProject() + "\n");
+    myView.getGlobalInspectionContext().getUIOptions().FILTER_RESOLVED_ITEMS = false;
+    tree = updateTree();
+    PlatformTestUtil.assertTreeEqual(tree, "-" + getProject() + "\n"
+                                           + " -Probable bugs\n"
+                                           + "  -" + myToolWrapper + "\n"
+                                           + "   -Test\n"
+                                           + "    " + varMessage("j") + "\n"
+                                           + "    " + varMessage("test") + "\n"
+                                           + "    " + varMessage("r") + "\n"
+                                           + "    " + varMessage("i") + "\n"
+                                           + "    " + varMessage("d") + "\n"
+                                           + "    " + varMessage("a") + "\n");
+  }
+
+  private InspectionTree updateTree() {
+    myView.update();
+    final InspectionTree tree = myView.getTree();
+    TreeUtil.expandAll(tree);
+    return tree;
+  }
+
+  @Override
+  protected String getTestPath() {
+    return "inspection/offline";
+  }
+
+  @Override
+  protected String getTestDirectoryName() {
+    return "project";
+  }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java
index 4dd2964..a8b27ab 100644
--- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java
@@ -49,6 +49,7 @@
   public void testGetClassProcessing() throws Exception { doTest();}
   public void testInstanceOfChecks() throws Exception { doTest();}
   public void testForEachValue() throws Exception { doTest();}
+  public void testForEachValueIDEA126166() throws Exception { doTest();}
   public void testCaseThrowable() throws Exception { doTest();}
   public void testSafeTempVarName() throws Exception { doTest();}
 
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java
index 0a0c539..6cb5291 100644
--- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast18Test.java
@@ -18,7 +18,6 @@
 import com.intellij.codeInspection.ex.LocalInspectionToolWrapper;
 import com.intellij.codeInspection.redundantCast.RedundantCastInspection;
 import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
 import com.intellij.openapi.roots.LanguageLevelProjectExtension;
 import com.intellij.pom.java.LanguageLevel;
 import com.intellij.testFramework.IdeaTestUtil;
@@ -33,6 +32,7 @@
   public void testLambdaContext() throws Exception { doTest(); }
   public void testMethodRefContext() throws Exception { doTest(); }
   public void testExpectedSupertype() throws Exception { doTest(); }
+  public void testForeachValue() throws Exception { doTest(); }
 
   @Override
   protected Sdk getTestProjectSdk() {
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java
new file mode 100644
index 0000000..2d30216
--- /dev/null
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/SuspiciousCollectionMethodCalls14Test.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2000-2014 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.intellij.codeInspection;
+
+import com.intellij.JavaTestUtil;
+import com.intellij.codeInspection.miscGenerics.SuspiciousCollectionsMethodCallsInspection;
+import com.intellij.testFramework.LightProjectDescriptor;
+import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
+import org.jetbrains.annotations.NotNull;
+
+public class SuspiciousCollectionMethodCalls14Test extends LightCodeInsightFixtureTestCase {
+  private final SuspiciousCollectionsMethodCallsInspection myTool = new SuspiciousCollectionsMethodCallsInspection();
+
+  @Override
+  protected String getBasePath() {
+    return JavaTestUtil.getRelativeJavaTestDataPath() + "/inspection/suspiciousCalls";
+  }
+
+  private void doTest() throws Exception {
+    myFixture.enableInspections(myTool);
+    myFixture.testHighlighting(getTestName(false) + ".java");
+  }
+
+  public void testRemoveAll14() throws Exception { doTest(); }
+
+  @NotNull
+  @Override
+  protected LightProjectDescriptor getProjectDescriptor() {
+    return JAVA_1_4;
+  }
+}
diff --git a/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java b/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java
index ef4b5ea..498a117 100644
--- a/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java
+++ b/java/java-tests/testSrc/com/intellij/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java
@@ -27,8 +27,8 @@
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.asm4.ClassReader;
-import org.jetbrains.asm4.ClassWriter;
+import org.jetbrains.org.objectweb.asm.ClassReader;
+import org.jetbrains.org.objectweb.asm.ClassWriter;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java
index 86d79fb..92caad0 100644
--- a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java
+++ b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java
@@ -53,9 +53,11 @@
 import com.intellij.util.CommonProcessors;
 import com.intellij.util.ThrowableRunnable;
 import com.intellij.util.WaitFor;
+import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.NotNull;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -284,6 +286,26 @@
     assertSize(2, findUsages(findModel));
   }
 
+  public void testFindInOpenedFilesIncludesNoneProjectButOpenedFile() throws IOException {
+    File dir = createTempDirectory();
+    File file = new File(dir.getPath(), "A.test1234");
+    file.createNewFile();
+    FileUtil.writeToFile(file, "foo fo foo");
+    VirtualFile nonProjectFile = VfsUtil.findFileByIoFile(file, true);
+    assertNotNull(nonProjectFile);
+
+    FindModel findModel = new FindModel();
+    findModel.setStringToFind("fo");
+    findModel.setWholeWordsOnly(true);
+    findModel.setFromCursor(false);
+    findModel.setGlobal(true);
+    findModel.setMultipleFiles(true);
+    findModel.setCustomScope(true);
+    findModel.setCustomScope(new GlobalSearchScope.FilesScope(myProject, ContainerUtil.list(nonProjectFile)));
+
+    assertSize(1, findUsages(findModel));
+  }
+
   public void testWholeWordsInNonIndexedFiles() throws Exception {
     createFile(myModule, "A.test123", "foo fo foo");
 
diff --git a/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy b/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy
index fad8e4f..dabe06b 100644
--- a/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy
@@ -1,17 +1,30 @@
+/*
+ * Copyright 2000-2014 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.intellij.navigation
-import com.intellij.ide.util.gotoByName.ChooseByNameBase
-import com.intellij.ide.util.gotoByName.ChooseByNameModel
-import com.intellij.ide.util.gotoByName.ChooseByNamePopup
-import com.intellij.ide.util.gotoByName.GotoClassModel2
-import com.intellij.ide.util.gotoByName.GotoFileModel
-import com.intellij.ide.util.gotoByName.GotoSymbolModel2
+import com.intellij.ide.util.gotoByName.*
 import com.intellij.openapi.Disposable
 import com.intellij.openapi.application.ModalityState
 import com.intellij.openapi.util.Disposer
 import com.intellij.psi.PsiElement
+import com.intellij.psi.PsiFile
 import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
 import com.intellij.util.Consumer
 import com.intellij.util.concurrency.Semaphore
+import org.jetbrains.annotations.NotNull
+
 /**
  * @author peter
  */
@@ -135,24 +148,32 @@
   }
 
   public void "test goto file can go to dir"() {
-    def fooIndex = myFixture.addFileToProject("foo/index.html", "foo")
-    def barIndex = myFixture.addFileToProject("bar.txt/bar.txt", "foo")
+    PsiFile fooIndex = myFixture.addFileToProject("foo/index.html", "foo")
+    PsiFile barIndex = myFixture.addFileToProject("bar.txt/bar.txt", "foo")
 
     def popup = createPopup(new GotoFileModel(project), fooIndex)
-    assert calcPopupElements(popup, "foo/") == [fooIndex.containingDirectory]
-    assert calcPopupElements(popup, "foo\\") == [fooIndex.containingDirectory]
-    assert calcPopupElements(popup, "/foo") == [fooIndex.containingDirectory]
-    assert calcPopupElements(popup, "\\foo") == [fooIndex.containingDirectory]
+
+    def fooDir
+    def barDir
+    edt {
+      fooDir = fooIndex.containingDirectory
+      barDir = barIndex.containingDirectory
+    }
+
+    assert calcPopupElements(popup, "foo/") == [fooDir]
+    assert calcPopupElements(popup, "foo\\") == [fooDir]
+    assert calcPopupElements(popup, "/foo") == [fooDir]
+    assert calcPopupElements(popup, "\\foo") == [fooDir]
     assert calcPopupElements(popup, "foo") == []
     assert calcPopupElements(popup, "/index.html") == [fooIndex]
     assert calcPopupElements(popup, "\\index.html") == [fooIndex]
     assert calcPopupElements(popup, "index.html/") == [fooIndex]
     assert calcPopupElements(popup, "index.html\\") == [fooIndex]
 
-    assert calcPopupElements(popup, "bar.txt/") == [barIndex.containingDirectory]
-    assert calcPopupElements(popup, "bar.txt\\") == [barIndex.containingDirectory]
-    assert calcPopupElements(popup, "/bar.txt") == [barIndex.containingDirectory]
-    assert calcPopupElements(popup, "\\bar.txt") == [barIndex.containingDirectory]
+    assert calcPopupElements(popup, "bar.txt/") == [barDir]
+    assert calcPopupElements(popup, "bar.txt\\") == [barDir]
+    assert calcPopupElements(popup, "/bar.txt") == [barDir]
+    assert calcPopupElements(popup, "\\bar.txt") == [barDir]
     assert calcPopupElements(popup, "bar.txt") == [barIndex]
     popup.close(false)
   }
@@ -178,7 +199,10 @@
 
   public void "test super method in jdk"() {
     def ourRun = myFixture.addClass("package foo.bar; class Goo implements Runnable { public void run() {} }").methods[0]
-    def sdkRun = ourRun.containingClass.interfaces[0].methods[0]
+    def sdkRun
+    edt {
+      sdkRun = ourRun.containingClass.interfaces[0].methods[0]
+    }
     assert getPopupElements(new GotoSymbolModel2(project), 'run ', true) == [sdkRun]
     assert getPopupElements(new GotoSymbolModel2(project), 'run ', false) == [ourRun]
   }
@@ -218,7 +242,7 @@
   }
 
   @Override
-  protected void invokeTestRunnable(Runnable runnable) throws Exception {
+  protected void invokeTestRunnable(@NotNull Runnable runnable) throws Exception {
     runnable.run()
   }
 }
diff --git a/java/java-tests/testSrc/com/intellij/openapi/editor/impl/FoldingExceptionTest.java b/java/java-tests/testSrc/com/intellij/openapi/editor/impl/FoldingExceptionTest.java
index f40a58b..b168bc2 100644
--- a/java/java-tests/testSrc/com/intellij/openapi/editor/impl/FoldingExceptionTest.java
+++ b/java/java-tests/testSrc/com/intellij/openapi/editor/impl/FoldingExceptionTest.java
@@ -15,11 +15,8 @@
  */
 package com.intellij.openapi.editor.impl;
 
-import com.intellij.codeHighlighting.TextEditorHighlightingPass;
 import com.intellij.codeInsight.daemon.impl.CodeFoldingPassFactory;
-import com.intellij.mock.MockProgressIndicator;
 import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.PsiFile;
 import com.intellij.testFramework.EditorTestUtil;
 import com.intellij.testFramework.LightCodeInsightTestCase;
 
@@ -43,14 +40,7 @@
   }
 
   private static void runFoldingPass() {
-    PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(getProject());
-    psiDocumentManager.commitAllDocuments();
-    PsiFile psiFile = psiDocumentManager.getPsiFile(myEditor.getDocument());
-    assertNotNull(psiFile);
-
-    CodeFoldingPassFactory factory = getProject().getComponent(CodeFoldingPassFactory.class);
-    TextEditorHighlightingPass highlightingPass = factory.createHighlightingPass(psiFile, myEditor);
-    highlightingPass.collectInformation(new MockProgressIndicator());
-    highlightingPass.doApplyInformationToEditor();
+    PsiDocumentManager.getInstance(ourProject).commitAllDocuments();
+    EditorTestUtil.runTextEditorHighlightingPass(myEditor, CodeFoldingPassFactory.class);
   }
 }
diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsDuplicatesTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsDuplicatesTest.java
deleted file mode 100644
index dd32222..0000000
--- a/java/java-tests/testSrc/com/intellij/psi/ClsDuplicatesTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2000-2014 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.intellij.psi;
-
-import com.intellij.JavaTestUtil;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.testFramework.PsiTestCase;
-import com.intellij.testFramework.SkipSlowTestLocally;
-import com.intellij.usageView.UsageViewLongNameLocation;
-import gnu.trove.THashSet;
-import gnu.trove.TObjectHashingStrategy;
-
-import java.util.Set;
-
-@SkipSlowTestLocally
-public class ClsDuplicatesTest extends PsiTestCase {
-  private Set<PsiNamedElement> myUnique = new THashSet<PsiNamedElement>(new TObjectHashingStrategy<PsiNamedElement>() {
-    @Override
-    public int computeHashCode(PsiNamedElement object) {
-      String name = object.getName();
-      return name == null ? 0 : name.hashCode();
-    }
-
-    @Override
-    public boolean equals(PsiNamedElement o1, PsiNamedElement o2) {
-      return o1.getParent() == o2.getParent() &&
-             o1.getClass() == o2.getClass() &&
-             StringUtil.equals(o1.getName(), o2.getName()) &&
-             StringUtil.equals(o1.getText(), o2.getText());
-    }
-  });
-
-  @Override
-  protected void tearDown() throws Exception {
-    myUnique = null;
-    super.tearDown();
-  }
-
-  @Override
-  protected Sdk getTestProjectJdk() {
-    return JavaTestUtil.getTestJdk();
-  }
-
-  public void testDuplicates() throws Exception {
-    final PsiPackage rootPackage = JavaPsiFacade.getInstance(getProject()).findPackage("");
-    assert rootPackage != null;
-
-    final GlobalSearchScope scope = GlobalSearchScope.allScope(getProject());
-    JavaRecursiveElementVisitor visitor = new JavaRecursiveElementVisitor() {
-      @Override
-      public void visitPackage(PsiPackage aPackage) {
-        visit(aPackage);
-        for (PsiPackage subPackage : aPackage.getSubPackages(scope)) {
-          visitPackage(subPackage);
-        }
-        for (PsiClass aClass : aPackage.getClasses(scope)) {
-          visitClass(aClass);
-        }
-      }
-
-      @Override
-      public void visitElement(PsiElement element) {
-        if (element instanceof PsiNamedElement) {
-          visit((PsiNamedElement)element);
-        }
-        super.visitElement(element);
-      }
-
-      @Override
-      public void visitClass(PsiClass aClass) {
-        super.visitClass(aClass);
-        PsiElement parent = aClass.getParent();
-        if (parent instanceof PsiFile) {
-          myUnique.clear();
-        }
-      }
-    };
-
-    rootPackage.accept(visitor);
-  }
-
-  private void visit(PsiNamedElement element) {
-    if (!myUnique.add(element)) {
-      String description = ElementDescriptionUtil.getElementDescription(element, UsageViewLongNameLocation.INSTANCE);
-      fail("Duplicate Element: " + description + ": " + element.getText());
-    }
-  }
-}
diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java
index b832e65..c88c8c2 100644
--- a/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java
+++ b/java/java-tests/testSrc/com/intellij/psi/ClsMirrorBuildingTest.java
@@ -18,15 +18,18 @@
 import com.intellij.JavaTestUtil;
 import com.intellij.ide.highlighter.JavaFileType;
 import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.vfs.JarFileSystem;
-import com.intellij.openapi.vfs.LocalFileSystem;
+import com.intellij.openapi.vfs.StandardFileSystems;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.openapi.vfs.VirtualFileSystem;
 import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
 import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
 import com.intellij.psi.impl.compiled.ClsFileImpl;
+import com.intellij.psi.impl.compiled.InnerClassSourceStrategy;
+import com.intellij.psi.impl.compiled.StubBuildingVisitor;
+import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl;
 import com.intellij.testFramework.LightIdeaTestCase;
 import com.intellij.testFramework.PlatformTestUtil;
+import org.jetbrains.org.objectweb.asm.ClassReader;
 
 import java.io.IOException;
 
@@ -75,6 +78,35 @@
     doTest(clsPath, txtPath);
   }
 
+  public void testStrayInnersFiltering() throws IOException {
+    String path = JavaTestUtil.getJavaTestDataPath() + "/../../mockJDK-1.8/jre/lib/rt.jar!/java/lang/Class.class";
+    VirtualFile file = StandardFileSystems.jar().findFileByPath(path);
+    assertNotNull(path, file);
+
+    InnerClassSourceStrategy<VirtualFile> strategy = new InnerClassSourceStrategy<VirtualFile>() {
+      @Override
+      public VirtualFile findInnerClass(String innerName, VirtualFile outerClass) {
+        String baseName = outerClass.getNameWithoutExtension();
+        VirtualFile child = outerClass.getParent().findChild(baseName + "$" + innerName + ".class");
+        // stray inner classes should be filtered out
+        assert child != null : innerName + " is not an inner class of " + outerClass;
+        return child;
+      }
+
+      @Override
+      public void accept(VirtualFile innerClass, StubBuildingVisitor<VirtualFile> visitor) {
+        try {
+          byte[] bytes = innerClass.contentsToByteArray();
+          new ClassReader(bytes).accept(visitor, ClassReader.SKIP_FRAMES);
+        }
+        catch (IOException ignored) { }
+      }
+    };
+    PsiJavaFileStubImpl stub = new PsiJavaFileStubImpl("do.not.know.yet", true);
+    StubBuildingVisitor<VirtualFile> visitor = new StubBuildingVisitor<VirtualFile>(file, strategy, stub, 0, null);
+    new ClassReader(file.contentsToByteArray()).accept(visitor, ClassReader.SKIP_FRAMES);
+  }
+
   private void doTest() {
     doTest(getTestName(false));
   }
@@ -85,11 +117,9 @@
   }
 
   private static void doTest(String clsPath, String txtPath) {
-    VirtualFileSystem fs = clsPath.contains("!/") ? JarFileSystem.getInstance() : LocalFileSystem.getInstance();
-    VirtualFile vFile = fs.findFileByPath(clsPath);
-    assertNotNull(clsPath, vFile);
-    PsiFile clsFile = getPsiManager().findFile(vFile);
-    assertNotNull(vFile.getPath(), clsFile);
+    VirtualFileSystem fs = clsPath.contains("!/") ? StandardFileSystems.jar() : StandardFileSystems.local();
+    VirtualFile file = fs.findFileByPath(clsPath);
+    assertNotNull(clsPath, file);
 
     String expected;
     try {
@@ -100,6 +130,6 @@
       return;
     }
 
-    assertEquals(expected, ((ClsFileImpl)clsFile).getMirror().getText());
+    assertEquals(expected, ClsFileImpl.decompile(file).toString());
   }
 }
diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java
index 16392eb..e831741 100644
--- a/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java
+++ b/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java
@@ -690,7 +690,6 @@
     final PsiType returnType = methodsWithReturnType.getReturnType();
     assert returnType != null : methodsWithReturnType;
     assertEquals("pack.Parametrized<? extends T>", returnType.getCanonicalText());
-    assertEquals("public pack.Parametrized<? extends T> method() { /* compiled code */ }", methodsWithReturnType.getText());
   }
 
   private static void checkEnumConstant(String name, PsiField field, PsiClassType type) {
@@ -740,19 +739,20 @@
     assertEquals(PsiWildcardType.createUnbounded(myPsiManager), substitution);
   }
 
+  @SuppressWarnings("ConstantConditions")
   public void testModifiers() throws Exception {
-    final PsiClass psiClass = myJavaFacade.findClass("pack.Modifiers", RESOLVE_SCOPE);
+    PsiClass psiClass = myJavaFacade.findClass("pack.Modifiers", RESOLVE_SCOPE);
     assertNotNull(psiClass);
-    assertEquals("public class Modifiers {\n" +
-                 "    private transient int f1;\n" +
-                 "    private volatile int f2;\n" +
-                 "\n" +
-                 "    public Modifiers() { /* compiled code */ }\n" +
-                 "\n" +
-                 "    private void m1(int... i) { /* compiled code */ }\n" +
-                 "\n" +
-                 "    private synchronized void m2() { /* compiled code */ }\n" +
-                 "}",
-                 psiClass.getText().trim());
+
+    PsiField f1 = psiClass.findFieldByName("f1", false);
+    assertEquals("private transient", f1.getModifierList().getText());
+    PsiField f2 = psiClass.findFieldByName("f2", false);
+    assertEquals("private volatile", f2.getModifierList().getText());
+    PsiMethod init = psiClass.findMethodsByName("Modifiers", false)[0];
+    assertEquals("public", init.getModifierList().getText());
+    PsiMethod m1 = psiClass.findMethodsByName("m1", false)[0];
+    assertEquals("private", m1.getModifierList().getText());
+    PsiMethod m2 = psiClass.findMethodsByName("m2", false)[0];
+    assertEquals("private synchronized", m2.getModifierList().getText());
   }
 }
diff --git a/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java b/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java
index 301a993..096547c 100644
--- a/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java
+++ b/java/java-tests/testSrc/com/intellij/psi/MiscPsiTest.java
@@ -25,10 +25,11 @@
 import com.intellij.pom.java.LanguageLevel;
 import com.intellij.psi.impl.source.tree.LazyParseableElement;
 import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
+import org.jetbrains.annotations.NotNull;
 
 public class MiscPsiTest extends LightCodeInsightFixtureTestCase {
   @Override
-  protected void invokeTestRunnable(final Runnable runnable) throws Exception {
+  protected void invokeTestRunnable(@NotNull final Runnable runnable) throws Exception {
     new WriteCommandAction.Simple(getProject()) {
       @Override
       protected void run() throws Throwable {
diff --git a/java/java-tests/testSrc/com/intellij/psi/StubAstSwitchTest.groovy b/java/java-tests/testSrc/com/intellij/psi/StubAstSwitchTest.groovy
index c915398..021f7f9 100644
--- a/java/java-tests/testSrc/com/intellij/psi/StubAstSwitchTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/psi/StubAstSwitchTest.groovy
@@ -73,7 +73,13 @@
     }
     CountDownLatch latch = new CountDownLatch(count)
     for (c in classList) {
-      ApplicationManager.application.executeOnPooledThread { Thread.yield(); c.text; latch.countDown() }
+      ApplicationManager.application.executeOnPooledThread {
+        Thread.yield();
+        ApplicationManager.application.runReadAction {
+          c.text;
+        }
+        latch.countDown()
+      }
       for (m in c.methods) {
         def parameters = m.parameterList.parameters
         for (i in 0..<parameters.size()) {
diff --git a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy
index 302f1b3..d11a34f 100644
--- a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerFieldReferenceTest.groovy
@@ -328,9 +328,61 @@
     )
   }
 
+  void "test IDEA-123875"() {
+    doTest(
+      initial: '''\
+public class RearrangeFail {
 
+    public static final byte[] ENTITIES_END = "</entities>".getBytes();
+    private final Element entitiesEndElement = new Element(ENTITIES_END);
 
+    public static final byte[] ENTITIES_START = "<entities>".getBytes();
+    private final Element entitiesStartElement = new Element(ENTITIES_START);
 
+}
+''',
+      expected: '''\
+public class RearrangeFail {
 
+    public static final byte[] ENTITIES_END = "</entities>".getBytes();
+    public static final byte[] ENTITIES_START = "<entities>".getBytes();
+    private final Element entitiesEndElement = new Element(ENTITIES_END);
+    private final Element entitiesStartElement = new Element(ENTITIES_START);
 
 }
+''',
+      rules: [
+        rule(PUBLIC, STATIC, FINAL),
+        rule(PRIVATE),
+      ]
+    )
+  }
+
+  void "test IDEA-125099"() {
+    doTest(
+      initial: '''\
+public class test {
+
+    private int a = 2;
+
+    public static final String TEST = "1";
+    public static final String SHOULD_BE_IN_BETWEEN = "2";
+    public static final String USERS_ROLE_ID_COLUMN = TEST;
+}
+''',
+      expected: '''\
+public class test {
+
+    public static final String TEST = "1";
+    public static final String SHOULD_BE_IN_BETWEEN = "2";
+    public static final String USERS_ROLE_ID_COLUMN = TEST;
+    private int a = 2;
+}
+''',
+      rules: [
+        rule(PUBLIC, STATIC, FINAL),
+        rule(PRIVATE)
+      ]
+    )
+  }
+}
diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/file/impl/PsiEventsTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/file/impl/PsiEventsTest.java
index 8ea8d3a..2461a46 100644
--- a/java/java-tests/testSrc/com/intellij/psi/impl/file/impl/PsiEventsTest.java
+++ b/java/java-tests/testSrc/com/intellij/psi/impl/file/impl/PsiEventsTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2014 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.intellij.psi.impl.file.impl;
 
 
@@ -640,4 +655,90 @@
       getPsiManager().removePsiTreeChangeListener(listener);
     }
   }
+
+  public void testPsiEventsComeWhenDocumentAlreadyCommitted() throws Exception {
+    myFile = createFile("A.java", "class A { int i; }");
+    getPsiManager().addPsiTreeChangeListener(new PsiTreeChangeListener() {
+      @Override
+      public void beforeChildAddition(@NotNull PsiTreeChangeEvent event) {
+        // did not decide whether the doc should be committed at this point
+        //checkCommitted(false, event);
+      }
+
+      @Override
+      public void beforeChildRemoval(@NotNull PsiTreeChangeEvent event) {
+        // did not decide whether the doc should be committed at this point
+        //checkCommitted(false, event);
+      }
+
+      @Override
+      public void beforeChildReplacement(@NotNull PsiTreeChangeEvent event) {
+        // did not decide whether the doc should be committed at this point
+        //checkCommitted(false, event);
+      }
+
+      @Override
+      public void beforeChildMovement(@NotNull PsiTreeChangeEvent event) {
+        // did not decide whether the doc should be committed at this point
+        //checkCommitted(false, event);
+      }
+
+      @Override
+      public void beforeChildrenChange(@NotNull PsiTreeChangeEvent event) {
+        // did not decide whether the doc should be committed at this point
+        //checkCommitted(false, event);
+      }
+
+      @Override
+      public void beforePropertyChange(@NotNull PsiTreeChangeEvent event) {
+        // did not decide whether the doc should be committed at this point
+        //checkCommitted(false, event);
+      }
+
+      @Override
+      public void childAdded(@NotNull PsiTreeChangeEvent event) {
+        checkCommitted(true, event);
+      }
+
+      @Override
+      public void childRemoved(@NotNull PsiTreeChangeEvent event) {
+        checkCommitted(true, event);
+      }
+
+      @Override
+      public void childReplaced(@NotNull PsiTreeChangeEvent event) {
+        checkCommitted(true, event);
+      }
+
+      @Override
+      public void childrenChanged(@NotNull PsiTreeChangeEvent event) {
+        checkCommitted(true, event);
+      }
+
+      @Override
+      public void childMoved(@NotNull PsiTreeChangeEvent event) {
+        checkCommitted(true, event);
+      }
+
+      @Override
+      public void propertyChanged(@NotNull PsiTreeChangeEvent event) {
+        checkCommitted(true, event);
+      }
+    }, myTestRootDisposable);
+
+    PsiDocumentManager documentManager = PsiDocumentManager.getInstance(getProject());
+    Document document = documentManager.getDocument(getFile());
+    assertTrue(documentManager.isCommitted(document));
+
+    document.setText("");
+    documentManager.commitAllDocuments();
+    assertTrue(documentManager.isCommitted(document));
+  }
+
+  private void checkCommitted(boolean shouldBeCommitted, PsiTreeChangeEvent event) {
+    PsiFile file = event.getFile();
+    PsiDocumentManager documentManager = PsiDocumentManager.getInstance(file.getProject());
+    Document document = documentManager.getDocument(file);
+    assertEquals(shouldBeCommitted, documentManager.isCommitted(document));
+  }
 }
diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInLibrariesTest.groovy b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInLibrariesTest.groovy
index 5e6adfd..ce04dd0 100644
--- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInLibrariesTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInLibrariesTest.groovy
@@ -20,12 +20,12 @@
 import com.intellij.openapi.vfs.VirtualFile
 import com.intellij.psi.JavaPsiFacade
 import com.intellij.psi.PsiClass
-import com.intellij.psi.PsiFile
-import com.intellij.psi.PsiManager
 import com.intellij.psi.PsiMethod
+import com.intellij.psi.impl.source.PsiFileImpl
 import com.intellij.psi.search.GlobalSearchScope
 import com.intellij.psi.search.searches.ClassInheritorsSearch
 import com.intellij.psi.search.searches.OverridingMethodsSearch
+import com.intellij.psi.stubs.StubTreeLoader
 import com.intellij.testFramework.PsiTestUtil
 import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
 /**
@@ -150,14 +150,12 @@
 
     Collection<VirtualFile> pkgDirs = pkg.directories.collect { it.virtualFile }
     Collection<VirtualFile> pkgChildren = pkgDirs.collect { it.children as List }.flatten()
-    PsiFile javaSrc = psiManager.findFile(pkgChildren.find { it.name == 'LibraryClass.java' })
-    assert !javaSrc.contentsLoaded
-    assert !javaSrc.stub
+    VirtualFile javaSrc = pkgChildren.find { it.name == 'LibraryClass.java' }
+    checkFileIsNotLoadedAndHasNoIndexedStub(javaSrc)
 
     assert pkg.containsClassNamed('LibraryClass')
-    assert !javaSrc.contentsLoaded
-    assert !javaSrc.stub
-    assert !javaSrc.node.parsed
+    checkFileIsNotLoadedAndHasNoIndexedStub(javaSrc)
+    assert !((PsiFileImpl)psiManager.findFile(javaSrc)).treeElement
   }
 
   @Override
@@ -174,7 +172,7 @@
     def localFile = myFixture.copyFileToProject(testDataPathForTest + File.separator + "Foo.java", 'Foo.java')
     assert localFile != null
 
-    checkFileIsNotLoadedAndHasNoStub(localFile)
+    checkFileIsNotLoadedAndHasNoIndexedStub(localFile)
     assert facade.findClasses('Foo', scope).size() == 0
     PsiTestUtil.addLibrary(myModule, 'cas', lib.path, [] as String[], ["/classesAndSources.jar!/"] as String[])
 
@@ -187,14 +185,16 @@
 
     assert facade.findClasses('LibraryClass', scope).size() == 0
 
-    checkFileIsNotLoadedAndHasNoStub(vfile)
+    checkFileIsNotLoadedAndHasNoIndexedStub(vfile)
   }
 
-  private void checkFileIsNotLoadedAndHasNoStub(VirtualFile vfile) {
-    def file = PsiManager.getInstance(project).findFile(vfile);
+  private void checkFileIsNotLoadedAndHasNoIndexedStub(VirtualFile vfile) {
+    PsiFileImpl file = psiManager.findFile(vfile);
     assert file != null
 
     assert !file.contentsLoaded
-    assert !file.stub
+    assert !StubTreeLoader.instance.readFromVFile(project, vfile)
+    assert !StubTreeLoader.instance.canHaveStub(vfile)
+    assert file.stub // from text
   }
 }
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java
index 83e8fa1..b34486f 100644
--- a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java
+++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java
@@ -187,6 +187,18 @@
     doTest("Outer.Inner", "Outer", true, VisibilityUtil.ESCALATE_VISIBILITY, 0);
   }
 
+  public void testFromNestedToOuterMethodRef() throws Exception {
+    final LanguageLevelProjectExtension projectExtension = LanguageLevelProjectExtension.getInstance(getProject());
+    final LanguageLevel oldLevel = projectExtension.getLanguageLevel();
+    try {
+      projectExtension.setLanguageLevel(LanguageLevel.HIGHEST);
+      doTest("Outer.Inner", "Outer", true, VisibilityUtil.ESCALATE_VISIBILITY, 0);
+    }
+    finally {
+      projectExtension.setLanguageLevel(oldLevel);
+    }
+  }
+
   @NotNull
   @Override
   protected String getTestRoot() {
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java
index c77b344..99de5eb 100644
--- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java
+++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java
@@ -264,6 +264,10 @@
     doTest();
   }
 
+  public void testSameVarMethodNames() throws Exception {
+    doTest();
+  }
+
   private void doTestInlineThisOnly() {
     @NonNls String fileName = "/refactoring/inlineMethod/" + getTestName(false) + ".java";
     configureByFile(fileName);
diff --git a/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java b/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java
index 180a8ee..514348e 100644
--- a/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java
+++ b/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java
@@ -1,12 +1,29 @@
+/*
+ * Copyright 2000-2014 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.intellij.roots;
 
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.StdModuleTypes;
+import com.intellij.openapi.module.impl.ModuleEx;
 import com.intellij.openapi.module.impl.scopes.LibraryScope;
 import com.intellij.openapi.roots.*;
 import com.intellij.openapi.roots.libraries.Library;
 import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.testFramework.ModuleTestCase;
 import com.intellij.testFramework.PsiTestUtil;
 import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl;
@@ -207,4 +224,28 @@
     addLibrary(myModule, DependencyScope.COMPILE);
     assertTrue(myModule.getModuleWithDependenciesAndLibrariesScope(false).contains(file));
   }
+
+  public void testScopeEquality() {
+    Module module = createModule("a.iml", StdModuleTypes.JAVA);
+    addDependentModule(module, DependencyScope.COMPILE);
+    addLibrary(module, DependencyScope.COMPILE);
+
+    GlobalSearchScope deps = module.getModuleWithDependentsScope();
+    GlobalSearchScope depsTests = module.getModuleTestsWithDependentsScope();
+
+    assertFalse(deps.equals(depsTests));
+    assertFalse(depsTests.equals(deps));
+
+    ((ModuleEx)module).clearScopesCache();
+
+    GlobalSearchScope deps2 = module.getModuleWithDependentsScope();
+    GlobalSearchScope depsTests2 = module.getModuleTestsWithDependentsScope();
+
+    assertFalse(deps2.equals(depsTests2));
+    assertFalse(depsTests2.equals(deps2));
+    assertNotSame(deps, deps2);
+    assertNotSame(depsTests, depsTests2);
+    assertEquals(deps, deps2);
+    assertEquals(depsTests, depsTests2);
+  }
 }
diff --git a/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java b/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java
index 513fcec..2f6ea95 100644
--- a/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java
+++ b/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -179,6 +179,8 @@
   public void testArrayElements() throws Exception { doTest();}
   public void testAnonArray() throws Exception { doTest();}
   public void testVarArgs() throws Exception { doTest();}
+  public void testVarArgsAsAWhole() throws Exception { doTest();}
+  public void testVarArgsPartial() throws Exception { doTest();}
 
   public void testListTrackToArray() throws Exception { doTest();}
 }