1212
1313import org .eclipse .jdt .core .IJavaProject ;
1414import org .eclipse .jdt .core .JavaCore ;
15- import org .eclipse .jdt .internal .compiler .classfmt .ClassFileConstants ;
1615import org .eclipse .jface .dialogs .MessageDialog ;
1716import org .eclipse .osgi .util .NLS ;
1817import org .eclipse .swt .widgets .Display ;
2322 * @author Dmitry Geraskov (geraskov@gmail.com)
2423 *
2524 */
26- @ SuppressWarnings ("restriction" )
2725public class ProjectCompilerVersionChecker {
2826
2927 /**
@@ -38,8 +36,8 @@ public static boolean validateProjectComplianceLevel(final ConsoleConfiguration
3836 if (iJavaProject .exists ()) {
3937 String projectTarget = iJavaProject .getOption (JavaCore .COMPILER_CODEGEN_TARGET_PLATFORM , true );
4038 String eclipseCompilerVersion = System .getProperty ("java.specification.version" ); //$NON-NLS-1$
41- long projectJdkLevel = versionToJdkLevel (projectTarget );
42- long eclipseJdkLevel = versionToJdkLevel (eclipseCompilerVersion );
39+ long projectJdkLevel = decodeJdkVersion (projectTarget );
40+ long eclipseJdkLevel = decodeJdkVersion (eclipseCompilerVersion );
4341 if (eclipseJdkLevel < projectJdkLevel ){
4442 Display .getDefault ().syncExec (new Runnable (){
4543 @ Override
@@ -56,73 +54,15 @@ public void run() {
5654 return true ;
5755 }
5856
59- private static final String VERSION_JSR14 = "jsr14" ; //$NON-NLS-1$
60- private static final String VERSION_CLDC1_1 = "cldc1.1" ; //$NON-NLS-1$
61-
62- private static long versionToJdkLevel (Object versionID ) {
63- if (versionID instanceof String ) {
64- String version = (String ) versionID ;
65- // verification is optimized for all versions with same length and same "1." prefix
66- if (version .length () == 1 ) {
67- switch (version .charAt (0 )) {
68- case '9' :
69- return ClassFileConstants .JDK9 ;
70- default :
71- return 0 ;
72- }
73- }
74- if (version .length () == 2 && version .charAt (0 ) == '1' ) {
75- switch (version .charAt (1 )) {
76- case '0' :
77- return ClassFileConstants .JDK10 ;
78- case '1' :
79- return ClassFileConstants .JDK11 ;
80- case '2' :
81- return ClassFileConstants .JDK12 ;
82- case '3' :
83- return ClassFileConstants .JDK13 ;
84- case '4' :
85- return ClassFileConstants .JDK14 ;
86- case '5' :
87- return ClassFileConstants .JDK15 ;
88- case '6' :
89- return ClassFileConstants .JDK16 ;
90- case '7' :
91- return ClassFileConstants .JDK17 ;
92- default :
93- return 0 ;
94- }
95- }
96- if (version .length () == 3 && version .charAt (0 ) == '1' && version .charAt (1 ) == '.' ) {
97- switch (version .charAt (2 )) {
98- case '1' :
99- return ClassFileConstants .JDK1_1 ;
100- case '2' :
101- return ClassFileConstants .JDK1_2 ;
102- case '3' :
103- return ClassFileConstants .JDK1_3 ;
104- case '4' :
105- return ClassFileConstants .JDK1_4 ;
106- case '5' :
107- return ClassFileConstants .JDK1_5 ;
108- case '6' :
109- return ClassFileConstants .JDK1_6 ;
110- case '7' :
111- return ClassFileConstants .JDK1_7 ;
112- case '8' :
113- return ClassFileConstants .JDK1_8 ;
114- default :
115- return 0 ; // unknown
116- }
117- }
118- if (VERSION_JSR14 .equals (versionID )) {
119- return ClassFileConstants .JDK1_4 ;
120- }
121- if (VERSION_CLDC1_1 .equals (versionID )) {
122- return ClassFileConstants .CLDC_1_1 ;
123- }
57+ private static long decodeJdkVersion (String versionString ) {
58+ long result = 0 ;
59+ int length = versionString .length ();
60+ if (length == 1 || length == 2 ) {
61+ result = Long .parseLong (versionString );
62+ } else if (length == 3 && versionString .charAt (0 ) == '1' && versionString .charAt (1 ) == '.' ) {
63+ result = Long .parseLong (versionString .substring (2 ));
12464 }
125- return 0 ; // unknown
65+ return result ;
12666 }
12767
12868
0 commit comments