[java] LanguageLevel#feature method; javadoc

GitOrigin-RevId: f3c57f7101b3ce7369c66b97411c897bdcd46d24
This commit is contained in:
Tagir Valeev
2024-02-15 13:23:21 +00:00
committed by intellij-monorepo-bot
parent 83d82b0df9
commit 47a98d4500
25 changed files with 53 additions and 29 deletions
@@ -229,7 +229,7 @@ final class AttachSourcesNotificationProvider implements EditorNotificationProvi
LanguageLevel level = JavaMultiReleaseUtil.getVersion(file);
@Nls StringBuilder info = new StringBuilder();
if (level != null) {
info.append(JavaUiBundle.message("class.file.multi.release.decompiled.text", level.toJavaVersion().feature));
info.append(JavaUiBundle.message("class.file.multi.release.decompiled.text", level.feature()));
} else {
info.append(JavaUiBundle.message("class.file.decompiled.text"));
}
@@ -68,6 +68,6 @@ internal class GeneratorContext(
val sdkFeatureVersion: Int
get() {
return sdkVersion?.maxLanguageLevel?.toJavaVersion()?.feature ?: 8
return sdkVersion?.maxLanguageLevel?.feature() ?: 8
}
}
@@ -40,7 +40,7 @@ abstract class LanguageLevelCombo @JvmOverloads constructor(
val otherItems = items.filterAndAdd(buildList {
LanguageLevel.entries
.sortedBy { it.toJavaVersion().feature }
.sortedBy { it.feature() }
.filter { level: LanguageLevel -> level <= highestWithPreview && !level.isUnsupported &&
(level.isPreview || !ArrayUtil.contains(level, *LTS)) }
.forEach { level: LanguageLevel -> add(level) }
@@ -73,7 +73,7 @@ public final class LanguageLevelUtil {
static {
for (LanguageLevel level : LanguageLevel.values()) {
if (level.ordinal() > LanguageLevel.HIGHEST.ordinal()) break;
int feature = level.toJavaVersion().feature + 1;
int feature = level.feature() + 1;
ourPresentableShortMessage.put(level, feature >= 9 ? String.valueOf(feature) : "1." + feature);
}
}
@@ -66,7 +66,7 @@ public enum JavaSdkVersion {
if (languageLevel == LanguageLevel.JDK_X) {
return values[values.length - 1];
}
int feature = languageLevel.toJavaVersion().feature;
int feature = languageLevel.feature();
if (feature < values.length) {
return values[feature];
}
@@ -134,19 +134,39 @@ public enum LanguageLevel {
return myPresentableText.get();
}
/**
* @param level level to compare to
* @return true, if this language level is at least the same or newer than the level we are comparing to.
* A preview level for Java version X is assumed to be between non-preview version X and non-preview version X+1
*/
public boolean isAtLeast(@NotNull LanguageLevel level) {
return compareTo(level) >= 0;
}
/**
* @param level level to compare to
* @return true if this language level is strictly less than the level we are comparing to.
* A preview level for Java version X is assumed to be between non-preview version X and non-preview version X+1
*/
public boolean isLessThan(@NotNull LanguageLevel level) {
return compareTo(level) < 0;
}
/**
* @return the {@link JavaVersion} object that corresponds to this language level
*/
@NotNull
public JavaVersion toJavaVersion() {
return myVersion;
}
/**
* @return the language level feature number (like 8 for {@link #JDK_1_8}).
*/
public int feature() {
return myVersion.feature;
}
/** See {@link JavaVersion#parse(String)} for supported formats. */
@Nullable
public static LanguageLevel parse(@Nullable String compilerComplianceOption) {
@@ -31,7 +31,7 @@ public class UpgradeSdkFix implements IntentionAction {
@NotNull
@Override
public String getText() {
return JavaBundle.message("intention.name.upgrade.jdk.to", myLevel.toJavaVersion().feature);
return JavaBundle.message("intention.name.upgrade.jdk.to", myLevel.feature());
}
@NotNull
@@ -251,7 +251,7 @@ public final class JavadocGeneratorRunProfile implements ModuleRunProfile {
LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module);
if (languageLevel.isPreview()) {
parameters.add(JavaParameters.JAVA_ENABLE_PREVIEW_PROPERTY);
parameters.add("--source", String.valueOf(languageLevel.toJavaVersion().feature));
parameters.add("--source", String.valueOf(languageLevel.feature()));
break;
}
}
@@ -120,7 +120,7 @@ public final class JavaSdkImpl extends JavaSdk {
public @Nullable String getDefaultDocumentationUrl(@NotNull Sdk sdk) {
JavaSdkVersion version = getVersion(sdk);
int release = version != null ? version.ordinal() : 0;
if (release > LanguageLevel.HIGHEST.toJavaVersion().feature) return "https://download.java.net/java/early_access/jdk" + release + "/docs/api/";
if (release > LanguageLevel.HIGHEST.feature()) return "https://download.java.net/java/early_access/jdk" + release + "/docs/api/";
if (release >= 11) return "https://docs.oracle.com/en/java/javase/" + release + "/docs/api/";
if (release >= 6) return "https://docs.oracle.com/javase/" + release + "/docs/api/";
if (release == 5) return "https://docs.oracle.com/javase/1.5.0/docs/api/";
@@ -69,7 +69,7 @@ public final class AcceptedLanguageLevelsSettings implements PersistentStateComp
return;
}
int previewFeature = languageLevel.toJavaVersion().feature;
int previewFeature = languageLevel.feature();
if (languageLevel.isUnsupported()) {
PREVIEW_NOTIFICATION_GROUP.createNotification(
JavaBundle.message("java.preview.features.unsupported.title"),
@@ -60,7 +60,7 @@ class JavaLanguageVersionsCollector : ProjectUsagesCollector() {
LanguageLevelUtil.getCustomLanguageLevel(it) ?: projectLanguageLevel
}
languageLevels.mapTo(metrics) {
moduleLanguageLevel.metric(it.toJavaVersion().feature, it.isPreview)
moduleLanguageLevel.metric(it.feature(), it.isPreview)
}
}
@@ -133,7 +133,7 @@ public final class JavaPsiImplementationHelperImpl extends JavaPsiImplementation
else {
// Multi-release jar: assume that source file is placed in META-INF/versions/<ver>
// fallback to default location only if there's no the same file in the root
String versionPath = "META-INF/versions/" + level.toJavaVersion().feature + "/" + relativePath;
String versionPath = "META-INF/versions/" + level.feature() + "/" + relativePath;
if (JavaMultiReleaseUtil.findBaseFile(clsFile.getVirtualFile()) != null) {
finder = root -> root.findFileByRelativePath(versionPath);
} else {
@@ -47,7 +47,7 @@ public final class ForwardCompatibilityInspection extends AbstractBaseJavaLocalI
feature != JavaFeature.MODULES && !name.equals(PsiKeyword.WHEN) && // Keywords from module-info and 'when' still can be used as class names
!feature.isSufficient(languageLevel) && parent instanceof PsiClass) {
return JavaErrorBundle.message("restricted.identifier.warn", name,
feature.getMinimumLevel().toJavaVersion().feature);
feature.getMinimumLevel().feature());
}
switch (name) {
case PsiKeyword.ASSERT -> {
@@ -64,6 +64,6 @@ public final class JavaVersionBasedScope extends DelegatingGlobalSearchScope {
@Override
public String toString() {
return "Java " + myLevel.toJavaVersion().feature + " @ " + myBaseScope;
return "Java " + myLevel.feature() + " @ " + myBaseScope;
}
}
@@ -38,7 +38,7 @@ public final class ClassPresentationProvider implements ItemPresentationProvider
if (packageName.isEmpty()) return null;
LanguageLevel version = JavaMultiReleaseUtil.getVersion(file);
if (version != null) {
packageName += "/" + JavaPsiBundle.message("class.file.version", version.toJavaVersion().feature);
packageName += "/" + JavaPsiBundle.message("class.file.version", version.feature());
}
return NewUiValue.isEnabled() ? JavaPsiBundle.message("aux.context.display", packageName) : "(" + packageName + ")";
}
@@ -107,8 +107,8 @@ public final class JavaMultiReleaseUtil {
if (relativePath == null) return file;
VirtualFile versions = root.findFileByRelativePath("META-INF/versions");
if (versions == null) return file;
int feature = level.toJavaVersion().feature;
int minFeature = MIN_MULTI_RELEASE_VERSION.toJavaVersion().feature;
int feature = level.feature();
int minFeature = MIN_MULTI_RELEASE_VERSION.feature();
while (feature >= minFeature) {
VirtualFile versionRoot = versions.findChild(String.valueOf(feature));
if (versionRoot != null) {
@@ -137,7 +137,7 @@ public class OutputChecker {
current = res;
}
JavaSdkVersion version = JavaSdkVersionUtil.getJavaSdkVersion(jdk);
for (int feature = version.getMaxLanguageLevel().toJavaVersion().feature; feature > 6; feature--) {
for (int feature = version.getMaxLanguageLevel().feature(); feature > 6; feature--) {
File outFile = new File(outsDir, name + ".jdk" + feature + ".out");
if (outFile.exists()) {
current = outFile;
@@ -208,7 +208,7 @@ public class MockPsiReferenceType extends MockType implements ReferenceType {
@Override
public int majorVersion() {
return PsiUtil.getLanguageLevel(myClass).toJavaVersion().feature + 44;
return PsiUtil.getLanguageLevel(myClass).feature() + 44;
}
@Override
@@ -55,9 +55,7 @@ import org.jetbrains.jps.model.serialization.PathMacroUtil;
import org.jetbrains.jps.service.JpsServiceManager;
import org.jetbrains.jps.service.SharedThreadPool;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
import javax.tools.*;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
@@ -1039,7 +1037,7 @@ public final class JavaBuilder extends ModuleLevelBuilder {
@NotNull JpsModule module = chunk.representativeTarget().getModule();
final LanguageLevel level = JpsJavaExtensionService.getInstance().getLanguageLevel(module);
final int languageLevel = level != null ? level.toJavaVersion().feature : 0;
final int languageLevel = level != null ? level.feature() : 0;
final int chunkSdkVersion = getChunkSdkVersion(chunk);
int bytecodeTarget = getModuleBytecodeTarget(context, chunk, compilerConfiguration,
@@ -1120,7 +1118,7 @@ public final class JavaBuilder extends ModuleLevelBuilder {
private static int getLanguageLevel(@NotNull JpsModule module) {
final LanguageLevel level = JpsJavaExtensionService.getInstance().getLanguageLevel(module);
return level != null ? level.toJavaVersion().feature : 0;
return level != null ? level.feature() : 0;
}
/**
@@ -45,6 +45,13 @@ public enum LanguageLevel {
return myVersion;
}
/**
* @return the language level feature number (like 8 for {@link #JDK_1_8}).
*/
public int feature() {
return myVersion.feature;
}
public boolean isPreview() {
return name().endsWith("_PREVIEW") || name().endsWith("_X");
}
@@ -203,7 +203,7 @@ public final class GenerationUtil {
}
if (member != null) {
vc.put("java_version", PsiUtil.getLanguageLevel(member).toJavaVersion().feature);
vc.put("java_version", PsiUtil.getLanguageLevel(member).feature());
final Project project = member.getProject();
vc.put("settings", CodeStyle.getSettings(project).getCustomSettings(JavaCodeStyleSettings.class));
vc.put("project", project);
@@ -124,7 +124,7 @@ public class GradleMiscImportingTest extends GradleJavaImportingTestCase {
@Test
public void testPreviewLanguageLevel() throws Exception {
int feature = LanguageLevel.HIGHEST.toJavaVersion().feature;
int feature = LanguageLevel.HIGHEST.feature();
importProject(
"apply plugin: 'java'\n" +
"java.sourceCompatibility = " + feature+ "\n" +
@@ -4,7 +4,6 @@ package org.jetbrains.plugins.javaFX.wizard
import com.intellij.icons.AllIcons
import com.intellij.ide.fileTemplates.FileTemplateManager
import com.intellij.ide.starters.local.*
import com.intellij.ide.starters.local.StandardAssetsProvider
import com.intellij.ide.starters.shared.*
import com.intellij.openapi.project.ProjectManager
import com.intellij.openapi.projectRoots.JavaSdk
@@ -98,7 +97,7 @@ internal class JavaFxModuleBuilder : StarterModuleBuilder() {
val properties = HashMap(super.getGeneratorContextProperties(sdk, dependencyConfig))
val sdkVersion = sdk?.let { JavaSdk.getInstance().getVersion(it) }
val sdkFeatureVersion = sdkVersion?.maxLanguageLevel?.toJavaVersion()?.feature
val sdkFeatureVersion = sdkVersion?.maxLanguageLevel?.feature()
if (sdkFeatureVersion == null) {
properties["javafx.version"] = getUnknownFxVersion(dependencyConfig)
@@ -157,7 +157,7 @@ class MavenCommandLineInspectionProjectConfigurator : CommandLineInspectionProje
SdkLookup
.newLookupBuilder()
.withProgressIndicator(context.progressIndicator)
.withVersionFilter { JavaVersion.tryParse(it)?.feature == level.toJavaVersion().feature }
.withVersionFilter { JavaVersion.tryParse(it)?.feature == level.feature() }
.withSdkType(JavaSdk.getInstance())
.onSdkResolved { sdk ->
future.complete(sdk)
@@ -276,7 +276,7 @@ open class MavenCompilerImportingTest : MavenMultiVersionImportingTestCase() {
}
private suspend fun doTestPreview(compilerArgs: String?) {
val feature = LanguageLevel.HIGHEST.toJavaVersion().feature
val feature = LanguageLevel.HIGHEST.feature()
importProjectAsync(("<groupId>test</groupId>" +
"<artifactId>project</artifactId>" +
"<version>1</version>" +