[java] improves "unsupported language level" message (IDEA-168859)

This commit is contained in:
Roman Shevchenko
2017-03-06 11:27:27 +01:00
parent f445fe460d
commit 74daf8d522
15 changed files with 252 additions and 214 deletions
@@ -20,9 +20,9 @@ public class NumericLiterals {
int i15 = <error descr="Integer number too large">0xf044332211</error>;
int oi1 = 017777777777;
int oi2 = <error descr="Integer number too large">08</error>;
int bi1 = <error descr="Binary literals are not supported at this language level">0b0010</error>;
int bi2 = <error descr="Binary literals are not supported at this language level">0B0010</error>;
int bi3 = <error descr="Underscores in literals are not supported at this language level">1_2</error>;
int bi1 = <error descr="Binary literals are not supported at language level '1.4'">0b0010</error>;
int bi2 = <error descr="Binary literals are not supported at language level '1.4'">0B0010</error>;
int bi3 = <error descr="Underscores in literals are not supported at language level '1.4'">1_2</error>;
long l1 = -<error descr="Long number too large">9223372036854775809L</error>;
long l2 = <error descr="Long number too large">9223372036854775808L</error>;
@@ -36,21 +36,21 @@ public class NumericLiterals {
long l10 = 0x8000000000000000L;
long ol1 = 01777777777777777777600L;
long ol2 = 01777777777777777777777L;
long bl1 = <error descr="Binary literals are not supported at this language level">0b0010l</error>;
long bl2 = <error descr="Binary literals are not supported at this language level">0B0010L</error>;
long bl3 = <error descr="Underscores in literals are not supported at this language level">10_24L</error>;
long bl1 = <error descr="Binary literals are not supported at language level '1.4'">0b0010l</error>;
long bl2 = <error descr="Binary literals are not supported at language level '1.4'">0B0010L</error>;
long bl3 = <error descr="Underscores in literals are not supported at language level '1.4'">10_24L</error>;
float f1= <error descr="Floating point number too small">1e-46f</error>;
float f2 = <error descr="Floating point number too large">1e39f</error>;
float f3 = 0E1F;
float f4 = <error descr="Hexadecimal floating point literals are not supported at this language level">0xabc.defP2f</error>;
float f5 = <error descr="Underscores in literals are not supported at this language level">3.141_592f</error>;
float f4 = <error descr="Hexadecimal floating point literals are not supported at language level '1.4'">0xabc.defP2f</error>;
float f5 = <error descr="Underscores in literals are not supported at language level '1.4'">3.141_592f</error>;
float f6 = .0f;
double dd1 = <error descr="Floating point number too small">1e-324</error>;
double dd2 = <error descr="Floating point number too large">1e309</error>;
double dd3 = 0E1;
double dd4 = <error descr="Hexadecimal floating point literals are not supported at this language level">0x1.fffffffffffffP1023</error>;
double dd4 = <error descr="Hexadecimal floating point literals are not supported at language level '1.4'">0x1.fffffffffffffP1023</error>;
double d1 = <error descr="Malformed floating point literal">1.E</error>;
double d2 = <error descr="Malformed floating point literal">1.e</error>;
double d3 = <error descr="Malformed floating point literal">1.E+</error>;
@@ -62,7 +62,7 @@ public class NumericLiterals {
double d9 = <error descr="Malformed floating point literal">1e-d</error>;
double d10 = <error descr="Malformed floating point literal">1e-F</error>;
double d11 = <error descr="Malformed floating point literal">1e-f</error>;
double d12 = <error descr="Underscores in literals are not supported at this language level">3.141_592_653_589_793d</error>;
double d12 = <error descr="Underscores in literals are not supported at language level '1.4'">3.141_592_653_589_793d</error>;
double d13 = <error descr="Malformed floating point literal">.0e</error>;
}
}
}
@@ -1,19 +1,19 @@
import java.io.*;
import java.util.*;
<error descr="Static imports are not supported at this language level">import static java.lang.Math.*;</error>
<error descr="Static imports are not supported at language level '1.4'">import static java.lang.Math.*;</error>
@interface <error descr="Annotations are not supported at this language level">Anno</error> { }
@interface <error descr="Annotations are not supported at language level '1.4'">Anno</error> { }
<error descr="Annotations are not supported at this language level">@Anno</error>
<error descr="Annotations are not supported at language level '1.4'">@Anno</error>
class UnsupportedFeatures {
void m(<error descr="Variable arity methods are not supported at this language level">String... args</error>) throws Exception {
<error descr="For-each loops are not supported at this language level">for (String s : args) { System.out.println(s); }</error>
void m(<error descr="Variable arity methods are not supported at language level '1.4'">String... args</error>) throws Exception {
<error descr="For-each loops are not supported at language level '1.4'">for (String s : args) { System.out.println(s); }</error>
List<error descr="Generics are not supported at this language level"><String></error> list =
new ArrayList<error descr="Generics are not supported at this language level"><></error>();
List<error descr="Generics are not supported at language level '1.4'"><String></error> list =
new ArrayList<error descr="Generics are not supported at language level '1.4'"><></error>();
<error descr="For-each loops are not supported at this language level">for (Object s : list) {}</error>
<error descr="For-each loops are not supported at language level '1.4'">for (Object s : list) {}</error>
Arrays.asList<error descr="'asList(java.lang.String...)' in 'java.util.Arrays' cannot be applied to '(java.lang.String)'">("")</error>;
<error descr="Incompatible types. Found: 'boolean', required: 'java.lang.Boolean'">Boolean b = true;</error>
<error descr="Incompatible types. Found: 'java.lang.Boolean', required: 'boolean'">boolean b1 = Boolean.TRUE;</error>
@@ -21,4 +21,4 @@ class UnsupportedFeatures {
java.lang.annotation.ElementType t = null;
switch (<error descr="Incompatible types. Found: 'java.lang.annotation.ElementType', required: 'byte, char, short or int'">t</error>) { }
}
}
}
@@ -6,7 +6,7 @@ class UnsupportedFeatures {
for (String s : args) { System.out.println(s); }
List<String> list =
new ArrayList<error descr="Diamond types are not supported at this language level"><></error>();
new ArrayList<error descr="Diamond types are not supported at language level '1.6'"><></error>();
for (String s : list) {}
Arrays.asList("");
@@ -14,22 +14,22 @@ class UnsupportedFeatures {
boolean b1 = Boolean.TRUE;
try { Reader r = new FileReader("/dev/null"); }
catch (<error descr="Multi-catches are not supported at this language level">FileNotFoundException | IOException e</error>) { e.printStackTrace(); }
catch (<error descr="Multi-catches are not supported at language level '1.6'">FileNotFoundException | IOException e</error>) { e.printStackTrace(); }
try <error descr="Try-with-resources are not supported at this language level">(Reader r = new FileReader("/dev/null"))</error> { }
try <error descr="Try-with-resources are not supported at language level '1.6'">(Reader r = new FileReader("/dev/null"))</error> { }
I i1 = <error descr="Method references are not supported at this language level">UnsupportedFeatures::m</error>;
I i2 = <error descr="Lambda expressions are not supported at this language level">() -> { }</error>;
I i1 = <error descr="Method references are not supported at language level '1.6'">UnsupportedFeatures::m</error>;
I i2 = <error descr="Lambda expressions are not supported at language level '1.6'">() -> { }</error>;
switch (<error descr="Incompatible types. Found: 'java.lang.String', required: 'byte, char, short or int'">list.get(0)</error>) {
case "foo": break;
}
}
void f(<error descr="Receiver parameters are not supported at this language level">Object this</error>) { }
void f(<error descr="Receiver parameters are not supported at language level '1.6'">Object this</error>) { }
interface I {
<error descr="Extension methods are not supported at this language level">default void m() { }</error>
<error descr="Extension methods are not supported at this language level">static void m() { }</error>
<error descr="Extension methods are not supported at language level '1.6'">default void m() { }</error>
<error descr="Extension methods are not supported at language level '1.6'">static void m() { }</error>
}
}
}
@@ -1,14 +1,14 @@
class Test {
interface I {
<error descr="Extension methods are not supported at this language level">static void foo() {}</error>
<error descr="Extension methods are not supported at language level '1.7'">static void foo() {}</error>
}
abstract class IImpl implements I {}
abstract static class IImpl implements I {}
interface I2 extends I {}
{
<error descr="Static interface method invocations are not supported at this language level">I.foo();</error>
IImpl.<error descr="Static interface method invocations are not supported at this language level">foo</error>();
I2.<error descr="Static interface method invocations are not supported at this language level">foo</error>();
I.<error descr="Static interface method calls are not supported at language level '1.7'">foo</error>();
IImpl.<error descr="Static interface method calls are not supported at language level '1.7'">foo</error>();
I2.<error descr="Static interface method calls are not supported at language level '1.7'">foo</error>();
}
}
@@ -0,0 +1,7 @@
import java.io.Serializable;
class IntersectionTypeCast {
void m(Runnable r) {
Object o = <error descr="Intersection types in casts are not supported at language level '1.7'">(Runnable & Serializable)r</error>;
}
}
@@ -1,3 +1,3 @@
<error descr="Modules are not supported at this language level">module M {
<error descr="Modules are not supported at language level '1.8'">module M {
requires A;
}</error>
@@ -3,6 +3,6 @@ import java.io.*;
class UnsupportedFeatures {
void m() throws Exception {
Reader r1 = new FileReader("/dev/null");
try (<error descr="Resource references are not supported at this language level">r1</error>; Reader r2 = new FileReader("/dev/null")) { }
try (<error descr="Resource references are not supported at language level '1.8'">r1</error>; Reader r2 = new FileReader("/dev/null")) { }
}
}
@@ -15,7 +15,7 @@ abstract class C {
void notWrong() { }
}
class B extends <error descr="Type annotations are not supported at this language level">@Deprecated</error> Object { }
class B extends <error descr="Type annotations are not supported at language level '1.7'">@Deprecated</error> Object { }
enum E {
@Anno E1
@@ -24,7 +24,7 @@ enum E {
interface I {
@<error descr="Duplicate annotation">Anno</error>
public @<error descr="Duplicate annotation">Anno</error>
Collection<<error descr="Type annotations are not supported at this language level">@Anno</error> String>
Collection<<error descr="Type annotations are not supported at language level '1.7'">@Anno</error> String>
method(@<error descr="Duplicate annotation">Anno</error> @<error descr="Duplicate annotation">Anno</error> Object o);
}
@@ -36,4 +36,4 @@ interface I {
@interface Part { }
Part[] arrayValue() default {@Part, @Part};
}
}