Skip to content

Commit

Permalink
Add new API for supported/unsupported Java versions
Browse files Browse the repository at this point in the history
- `List<String> getAllJavaProjectVersions()` - all Java versions that
could be used for Java projects inside Eclipse. The difference to
existing `getAllVersions()` API is that later one knows almost all Java
versions ever released and might be used not only in JDT core but also
in debugger/PDE area.
- `boolean isSupportedJavaProjectVersion(String version)` - differs from
existing `isSupportedJavaVersion()` in the same way as explained above
- `String getFirstSupportedJavaVersion()` - similar to existing
`latestSupportedJavaVersion()` and should return minimal "default"
version supported by JDT.

API above will be used in JDT UI, Debug (PR's are following), and (most
likely) PDE.

**Internal** API added in batch compiler `CompilerOptions`:
- `getFirstSupportedJavaVersion()`
- `getFirstSupportedJdkLevel()`

Bumped minor version segments on both core and compiler, even if
compiler "only" provides internal API, it is more convenient to have
them in-sync.

See #2536
  • Loading branch information
iloveeclipse committed Jun 19, 2024
1 parent 975b68e commit 42df6e6
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 6 deletions.
2 changes: 1 addition & 1 deletion org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main
Bundle-ManifestVersion: 2
Bundle-Name: Eclipse Compiler for Java(TM)
Bundle-SymbolicName: org.eclipse.jdt.core.compiler.batch
Bundle-Version: 3.38.100.qualifier
Bundle-Version: 3.39.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: Eclipse.org
Automatic-Module-Name: org.eclipse.jdt.core.compiler.batch
Expand Down
2 changes: 1 addition & 1 deletion org.eclipse.jdt.core.compiler.batch/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<version>4.33.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.jdt.core.compiler.batch</artifactId>
<version>3.38.100-SNAPSHOT</version>
<version>3.39.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.internal.compiler.Compiler;
Expand Down Expand Up @@ -258,6 +259,25 @@ public class CompilerOptions {
* Note: Whenever a new version is added, make sure getLatestVersion()
* is updated with it.
*/

/**
* Unsupported JLS versions
*/
/*
* Note: Whenever a new version is obsoleted, make sure getFirstVersion() is updated.
*/
public static Set<String> UNSUPPORTED_VERSIONS = Set.of(
VERSION_1_1,
VERSION_1_2,
VERSION_1_3,
VERSION_1_4,
VERSION_JSR14,
VERSION_CLDC1_1,
VERSION_1_5,
VERSION_1_6,
VERSION_1_7
);

public static final String ERROR = "error"; //$NON-NLS-1$
public static final String WARNING = "warning"; //$NON-NLS-1$
public static final String INFO = "info"; //$NON-NLS-1$
Expand Down Expand Up @@ -647,6 +667,18 @@ public CompilerOptions(Map<String, String> settings, boolean parseLiteralExpress
this.parseLiteralExpressionsAsConstants = parseLiteralExpressionsAsConstants;
}

/**
* Return the first (oldest) Java language version supported by the Eclipse compiler
*/
public static String getFirstSupportedJavaVersion() {
return VERSION_1_8;
}
/**
* Return the first (oldest) Java language level supported by the Eclipse compiler
*/
public static long getFirstSupportedJdkLevel() {
return ClassFileConstants.JDK1_8;
}
/**
* Return the latest Java language version supported by the Eclipse compiler
*/
Expand Down
4 changes: 2 additions & 2 deletions org.eclipse.jdt.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core; singleton:=true
Bundle-Version: 3.38.100.qualifier
Bundle-Version: 3.39.0.qualifier
Bundle-Activator: org.eclipse.jdt.core.JavaCore
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand Down Expand Up @@ -47,7 +47,7 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.21.0,4.0.0)",
org.eclipse.core.filesystem;bundle-version="[1.11.0,2.0.0)",
org.eclipse.text;bundle-version="[3.6.0,4.0.0)",
org.eclipse.team.core;bundle-version="[3.1.0,4.0.0)";resolution:=optional,
org.eclipse.jdt.core.compiler.batch;bundle-version="3.38.0";visibility:=reexport
org.eclipse.jdt.core.compiler.batch;bundle-version="3.39.0";visibility:=reexport
Bundle-RequiredExecutionEnvironment: JavaSE-17
Eclipse-ExtensibleAPI: true
Bundle-ActivationPolicy: lazy
Expand Down
59 changes: 58 additions & 1 deletion org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -3322,10 +3322,28 @@ public final class JavaCore extends Plugin {
* @category OptionValue
*/
public static final String VERSION_CLDC_1_1 = "cldc1.1"; //$NON-NLS-1$
private static List<String> allVersions = Collections.unmodifiableList(Arrays.asList(VERSION_CLDC_1_1, VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4, VERSION_1_5,
private static final List<String> allVersions = Collections.unmodifiableList(Arrays.asList(VERSION_CLDC_1_1, VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4, VERSION_1_5,
VERSION_1_6, VERSION_1_7, VERSION_1_8, VERSION_9, VERSION_10, VERSION_11, VERSION_12, VERSION_13, VERSION_14, VERSION_15, VERSION_16, VERSION_17, VERSION_18,
VERSION_19, VERSION_20, VERSION_21, VERSION_22));

/**
* Unordered set of all Java versions <b>not supported</b> by compiler anymore.
* The values are from {@link JavaCore}{@code #VERSION_*}.
*/
private static final Set<String> UNSUPPORTED_VERSIONS = CompilerOptions.UNSUPPORTED_VERSIONS;

/**
* Ordered set (from oldest to latest) of all Java versions <b>supported</b> by Eclipse Java projects.
* The values are from {@link JavaCore}{@code #VERSION_*}.
*/
private static final List<String> SUPPORTED_VERSIONS;
static {
ArrayList<String> temp = new ArrayList<>();
temp.addAll(allVersions);
temp.removeAll(UNSUPPORTED_VERSIONS);
SUPPORTED_VERSIONS = Collections.unmodifiableList(temp);
}

/**
* Returns all {@link JavaCore}{@code #VERSION_*} levels in the order of their
* introduction. For e.g., {@link JavaCore#VERSION_1_8} appears before {@link JavaCore#VERSION_10}
Expand All @@ -3337,6 +3355,18 @@ public static List<String> getAllVersions() {
return allVersions;
}

/**
* Returns all supported (see {@link JavaCore#isSupportedJavaProjectVersion(String)}) Java project versions in the
* order of their introduction. For e.g., {@link JavaCore#VERSION_1_8} appears before {@link JavaCore#VERSION_10}
*
* @return all supported Java project versions
* @see #isSupportedJavaProjectVersion(String)
* @since 3.39
*/
public static List<String> getAllJavaProjectVersions() {
return SUPPORTED_VERSIONS;
}

/**
* Returns whether the given version of Java or Java Runtime is supported
* by the Java Development Toolkit.
Expand All @@ -3352,6 +3382,21 @@ public static boolean isSupportedJavaVersion(String version) {
return CompilerOptions.versionToJdkLevel(version, false) > 0;
}

/**
* Not all known Java versions are supported by Eclipse Java projects. This method answers if the given version is
* supported for editing and compilation.
*
* @return {@code true} if the given string represents Java language version supported by the Eclipse Java projects
* @see #getAllJavaProjectVersions()
* @since 3.39
*/
public static boolean isSupportedJavaProjectVersion(String version) {
if(version == null || version.isBlank()) {
return false;
}
return SUPPORTED_VERSIONS.contains(version);
}

/**
* Configurable option value: {@value}.
* @since 2.0
Expand Down Expand Up @@ -6453,6 +6498,18 @@ public static void setOptions(Hashtable<String, String> newOptions) {
public static String latestSupportedJavaVersion() {
return allVersions.get(allVersions.size() - 1);
}

/**
* First (oldest) Java language version supported by the Eclipse compiler.
* This is the first entry from {@link JavaCore#getAllJavaProjectVersions()}.
*
* @since 3.39
* @return first (oldest) Java language version supported by the Eclipse compiler
*/
public static String getFirstSupportedJavaVersion() {
return SUPPORTED_VERSIONS.get(0);
}

/**
* Compares two given versions of the Java platform. The versions being compared must both be
* one of the supported values mentioned in
Expand Down
2 changes: 1 addition & 1 deletion org.eclipse.jdt.core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<version>4.33.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.38.100-SNAPSHOT</version>
<version>3.39.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>

<properties>
Expand Down

0 comments on commit 42df6e6

Please sign in to comment.