[java] merges language level name and JDK version description

This commit is contained in:
Roman Shevchenko
2018-01-18 13:54:21 +01:00
parent c86688b5e6
commit 9f05380c48
10 changed files with 35 additions and 39 deletions

View File

@@ -165,8 +165,7 @@ public class AttachSourcesNotificationProvider extends EditorNotifications.Provi
StringBuilder info = new StringBuilder().append("bytecode version: ").append(major).append('.').append(minor);
JavaSdkVersion sdkVersion = ClsParsingUtil.getJdkVersionByBytecode(major);
if (sdkVersion != null) {
int feature = sdkVersion.ordinal();
info.append(" (Java ").append(feature < 5 ? "1." : "").append(feature).append(')');
info.append(" (Java ").append(sdkVersion.getDescription()).append(')');
}
return info.toString();
}

View File

@@ -42,7 +42,8 @@ public enum JavaSdkVersion {
@NotNull
public String getDescription() {
return JavaVersion.compose(ordinal(), 0, 0, 0, false).toString();
int feature = ordinal();
return feature < 5 ? "1." + feature : String.valueOf(feature);
}
public boolean isAtLeast(@NotNull JavaSdkVersion version) {

View File

@@ -1,6 +1,4 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
*/
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.pom.java;
import com.intellij.core.JavaCoreBundle;
@@ -22,19 +20,18 @@ import org.jetbrains.annotations.Nullable;
* @see JavaSdkVersion
*/
public enum LanguageLevel {
JDK_1_3("Java 1.3", JavaCoreBundle.message("jdk.1.3.language.level.description"), "1.3"),
JDK_1_4("Java 1.4", JavaCoreBundle.message("jdk.1.4.language.level.description"), "1.4"),
JDK_1_5("Java 5.0", JavaCoreBundle.message("jdk.1.5.language.level.description"), "1.5", "5"),
JDK_1_6("Java 6", JavaCoreBundle.message("jdk.1.6.language.level.description"), "1.6", "6"),
JDK_1_7("Java 7", JavaCoreBundle.message("jdk.1.7.language.level.description"), "1.7", "7"),
JDK_1_8("Java 8", JavaCoreBundle.message("jdk.1.8.language.level.description"), "1.8", "8"),
JDK_1_9("Java 9", JavaCoreBundle.message("jdk.1.9.language.level.description"), "9", "1.9"),
JDK_X("Java X", JavaCoreBundle.message("jdk.X.language.level.description"), "");
JDK_1_3(JavaCoreBundle.message("jdk.1.3.language.level.description"), "1.3"),
JDK_1_4(JavaCoreBundle.message("jdk.1.4.language.level.description"), "1.4"),
JDK_1_5(JavaCoreBundle.message("jdk.1.5.language.level.description"), "1.5", "5"),
JDK_1_6(JavaCoreBundle.message("jdk.1.6.language.level.description"), "1.6", "6"),
JDK_1_7(JavaCoreBundle.message("jdk.1.7.language.level.description"), "1.7", "7"),
JDK_1_8(JavaCoreBundle.message("jdk.1.8.language.level.description"), "1.8", "8"),
JDK_1_9(JavaCoreBundle.message("jdk.1.9.language.level.description"), "9", "1.9"),
JDK_X(JavaCoreBundle.message("jdk.X.language.level.description"), "");
public static final LanguageLevel HIGHEST = JDK_1_9;
public static final Key<LanguageLevel> KEY = Key.create("LANGUAGE_LEVEL");
private final String myName;
private final String myPresentableText;
private final String[] myCompilerComplianceOptions;
@@ -42,15 +39,14 @@ public enum LanguageLevel {
* @param compilerComplianceOptions versions supported by Javac '-source' parameter
* @see <a href="http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html">Javac Reference</a>
*/
LanguageLevel(String name, @Nls String presentableText, String... compilerComplianceOptions) {
myName = name;
LanguageLevel(@Nls String presentableText, String... compilerComplianceOptions) {
myPresentableText = presentableText;
myCompilerComplianceOptions = compilerComplianceOptions;
}
@NotNull
/** @deprecated use {@link JavaSdkVersion#getDescription()} (to be removed in IDEA 2019) */
public String getName() {
return myName;
return this == JDK_X ? "Java X" : "Java " + JavaSdkVersion.fromLanguageLevel(this).getDescription();
}
@NotNull

View File

@@ -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 language level '1.6'"><></error>();
new ArrayList<error descr="Diamond types are not supported at language level '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 language level '1.6'">FileNotFoundException | IOException e</error>) { e.printStackTrace(); }
catch (<error descr="Multi-catches are not supported at language level '6'">FileNotFoundException | IOException e</error>) { e.printStackTrace(); }
try <error descr="Try-with-resources are not supported at language level '1.6'">(Reader r = new FileReader("/dev/null"))</error> { }
try <error descr="Try-with-resources are not supported at language level '6'">(Reader r = new FileReader("/dev/null"))</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>;
I i1 = <error descr="Method references are not supported at language level '6'">UnsupportedFeatures::m</error>;
I i2 = <error descr="Lambda expressions are not supported at language level '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 language level '1.6'">Object this</error>) { }
void f(<error descr="Receiver parameters are not supported at language level '6'">Object this</error>) { }
interface I {
<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>
<error descr="Extension methods are not supported at language level '6'">default void m() { }</error>
<error descr="Extension methods are not supported at language level '6'">static void m() { }</error>
}
}

View File

@@ -1,14 +1,14 @@
class Test {
interface I {
<error descr="Extension methods are not supported at language level '1.7'">static void foo() {}</error>
<error descr="Extension methods are not supported at language level '7'">static void foo() {}</error>
}
abstract static class IImpl implements I {}
interface I2 extends I {}
{
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>();
I.<error descr="Static interface method calls are not supported at language level '7'">foo</error>();
IImpl.<error descr="Static interface method calls are not supported at language level '7'">foo</error>();
I2.<error descr="Static interface method calls are not supported at language level '7'">foo</error>();
}
}

View File

@@ -2,6 +2,6 @@ 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>;
Object o = <error descr="Intersection types in casts are not supported at language level '7'">(Runnable & Serializable)r</error>;
}
}

View File

@@ -1,3 +1,3 @@
<error descr="Modules are not supported at language level '1.8'">module M {
<error descr="Modules are not supported at language level '8'">module M {
requires A;
}</error>

View File

@@ -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 language level '1.8'">r1</error>; Reader r2 = new FileReader("/dev/null")) { }
try (<error descr="Resource references are not supported at language level '8'">r1</error>; Reader r2 = new FileReader("/dev/null")) { }
}
}

View File

@@ -15,7 +15,7 @@ abstract class C {
void notWrong() { }
}
class B extends <error descr="Type annotations are not supported at language level '1.7'">@Deprecated</error> Object { }
class B extends <error descr="Type annotations are not supported at language level '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 language level '1.7'">@Anno</error> String>
Collection<<error descr="Type annotations are not supported at language level '7'">@Anno</error> String>
method(@<error descr="Duplicate annotation">Anno</error> @<error descr="Duplicate annotation">Anno</error> Object o);
}

View File

@@ -1,6 +1,6 @@
class Test {
public void closeable(AutoCloseable y) {
try(<error descr="Resource references are not supported at language level '1.7'">y</error>) {
try(<error descr="Resource references are not supported at language level '7'">y</error>) {
System.out.println("Hello");
}
catch (Exception e) {
@@ -9,7 +9,7 @@ class Test {
}
public void incompleteCode(AutoCloseable y) {
try(<error descr="Resource references are not supported at language level '1.7'">y</error><error descr="')' expected"> </error>{
try(<error descr="Resource references are not supported at language level '7'">y</error><error descr="')' expected"> </error>{
System.out.println("Hello");
}
catch (Exception e) {