mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
[java] '--enable-preview' flag in compiler options (IDEA-187805)
This commit is contained in:
@@ -38,7 +38,9 @@ public class TargetOptionsComponent extends JPanel {
|
||||
targets.add("1.1");
|
||||
targets.add("1.2");
|
||||
for (LanguageLevel level : LanguageLevel.values()) {
|
||||
targets.add(JpsJavaSdkType.complianceOption(level.toJavaVersion()));
|
||||
if (level != LanguageLevel.JDK_X && !level.isPreview()) {
|
||||
targets.add(JpsJavaSdkType.complianceOption(level.toJavaVersion()));
|
||||
}
|
||||
}
|
||||
Collections.reverse(targets);
|
||||
KNOWN_TARGETS = ArrayUtil.toStringArray(targets);
|
||||
|
||||
@@ -119,6 +119,10 @@ public class ModuleChunk {
|
||||
options.add("-source");
|
||||
options.add(sourceVersion);
|
||||
|
||||
if (languageLevel.isPreview()) {
|
||||
options.add("--enable-preview");
|
||||
}
|
||||
|
||||
String bytecodeTarget = CompilerConfiguration.getInstance(getProject()).getBytecodeTargetLevel(myMainModule);
|
||||
if (StringUtil.isEmpty(bytecodeTarget)) {
|
||||
// according to IDEA rule: if not specified explicitly, set target to be the same as source language level
|
||||
|
||||
+3
@@ -153,6 +153,9 @@ public class JavaScratchCompilationSupport implements CompileTask {
|
||||
options.add(langLevel);
|
||||
options.add("-target");
|
||||
options.add(langLevel);
|
||||
if (sdkVersion.isAtLeast(JavaSdkVersion.JDK_11)) {
|
||||
options.add("--enable-preview");
|
||||
}
|
||||
}
|
||||
options.add("-proc:none"); // disable annotation processing
|
||||
|
||||
|
||||
@@ -26,11 +26,11 @@ public enum JavaSdkVersion {
|
||||
JDK_1_8(LanguageLevel.JDK_1_8),
|
||||
JDK_1_9(LanguageLevel.JDK_1_9),
|
||||
JDK_10(LanguageLevel.JDK_10),
|
||||
JDK_11(LanguageLevel.JDK_11_PREVIEW);
|
||||
JDK_11(LanguageLevel.JDK_11);
|
||||
|
||||
private final LanguageLevel myMaxLanguageLevel;
|
||||
|
||||
JavaSdkVersion(@NotNull LanguageLevel maxLanguageLevel) {
|
||||
JavaSdkVersion(LanguageLevel maxLanguageLevel) {
|
||||
myMaxLanguageLevel = maxLanguageLevel;
|
||||
}
|
||||
|
||||
@@ -51,17 +51,13 @@ public enum JavaSdkVersion {
|
||||
|
||||
@NotNull
|
||||
public static JavaSdkVersion fromLanguageLevel(@NotNull LanguageLevel languageLevel) throws IllegalArgumentException {
|
||||
if (languageLevel == LanguageLevel.JDK_1_3) {
|
||||
return JDK_1_3;
|
||||
}
|
||||
JavaSdkVersion[] values = values();
|
||||
if (languageLevel == LanguageLevel.JDK_X) {
|
||||
return values[values.length - 1];
|
||||
}
|
||||
for (JavaSdkVersion version : values) {
|
||||
if (version.getMaxLanguageLevel().isAtLeast(languageLevel)) {
|
||||
return version;
|
||||
}
|
||||
int feature = languageLevel.toJavaVersion().feature;
|
||||
if (feature < values.length) {
|
||||
return values[feature];
|
||||
}
|
||||
throw new IllegalArgumentException("Can't map " + languageLevel + " to any of " + Arrays.toString(values));
|
||||
}
|
||||
|
||||
@@ -21,25 +21,27 @@ import org.jetbrains.annotations.Nullable;
|
||||
* @see JavaSdkVersion
|
||||
*/
|
||||
public enum LanguageLevel {
|
||||
JDK_1_3(JavaCoreBundle.message("jdk.1.3.language.level.description")),
|
||||
JDK_1_4(JavaCoreBundle.message("jdk.1.4.language.level.description")),
|
||||
JDK_1_5(JavaCoreBundle.message("jdk.1.5.language.level.description")),
|
||||
JDK_1_6(JavaCoreBundle.message("jdk.1.6.language.level.description")),
|
||||
JDK_1_7(JavaCoreBundle.message("jdk.1.7.language.level.description")),
|
||||
JDK_1_8(JavaCoreBundle.message("jdk.1.8.language.level.description")),
|
||||
JDK_1_9(JavaCoreBundle.message("jdk.1.9.language.level.description")),
|
||||
JDK_10(JavaCoreBundle.message("jdk.10.language.level.description")),
|
||||
JDK_11(JavaCoreBundle.message("jdk.11.language.level.description")),
|
||||
JDK_11_PREVIEW(JavaCoreBundle.message("jdk.11.preview.language.level.description")),
|
||||
JDK_X(JavaCoreBundle.message("jdk.X.language.level.description"));
|
||||
JDK_1_3(JavaCoreBundle.message("jdk.1.3.language.level.description"), 3),
|
||||
JDK_1_4(JavaCoreBundle.message("jdk.1.4.language.level.description"), 4),
|
||||
JDK_1_5(JavaCoreBundle.message("jdk.1.5.language.level.description"), 5),
|
||||
JDK_1_6(JavaCoreBundle.message("jdk.1.6.language.level.description"), 6),
|
||||
JDK_1_7(JavaCoreBundle.message("jdk.1.7.language.level.description"), 7),
|
||||
JDK_1_8(JavaCoreBundle.message("jdk.1.8.language.level.description"), 8),
|
||||
JDK_1_9(JavaCoreBundle.message("jdk.1.9.language.level.description"), 9),
|
||||
JDK_10(JavaCoreBundle.message("jdk.10.language.level.description"), 10),
|
||||
JDK_11(JavaCoreBundle.message("jdk.11.language.level.description"), 11),
|
||||
JDK_11_PREVIEW(JavaCoreBundle.message("jdk.11.preview.language.level.description"), 11),
|
||||
JDK_X(JavaCoreBundle.message("jdk.X.language.level.description"), 12);
|
||||
|
||||
public static final LanguageLevel HIGHEST = JDK_10;
|
||||
public static final Key<LanguageLevel> KEY = Key.create("LANGUAGE_LEVEL");
|
||||
|
||||
private final String myPresentableText;
|
||||
private final JavaVersion myVersion;
|
||||
|
||||
LanguageLevel(@Nls String presentableText) {
|
||||
LanguageLevel(@Nls String presentableText, int major) {
|
||||
myPresentableText = presentableText;
|
||||
myVersion = JavaVersion.compose(major);
|
||||
}
|
||||
|
||||
public boolean isPreview() {
|
||||
@@ -67,13 +69,12 @@ public enum LanguageLevel {
|
||||
|
||||
@NotNull
|
||||
public JavaVersion toJavaVersion() {
|
||||
return JavaVersion.compose(ordinal() + 3);
|
||||
return myVersion;
|
||||
}
|
||||
|
||||
/** @deprecated use {@code org.jetbrains.jps.model.java.JpsJavaSdkType.complianceOption()} (to be removed in IDEA 2019) */
|
||||
public String getCompilerComplianceDefaultOption() {
|
||||
int major = toJavaVersion().feature;
|
||||
return major <= 8 ? "1." + major : String.valueOf(major);
|
||||
return myVersion.feature <= 8 ? "1." + myVersion.feature : String.valueOf(myVersion.feature);
|
||||
}
|
||||
|
||||
/** See {@link JavaVersion#parse(String)} for supported formats. */
|
||||
|
||||
+11
-15
@@ -1,18 +1,4 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
// 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.java.openapi.projectRoots;
|
||||
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion;
|
||||
@@ -20,6 +6,7 @@ import com.intellij.pom.java.LanguageLevel;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
|
||||
public class JavaSdkVersionTest {
|
||||
@Test
|
||||
@@ -27,6 +14,15 @@ public class JavaSdkVersionTest {
|
||||
assertEquals(JavaSdkVersion.JDK_1_3, JavaSdkVersion.fromLanguageLevel(LanguageLevel.JDK_1_3));
|
||||
assertEquals(JavaSdkVersion.JDK_1_6, JavaSdkVersion.fromLanguageLevel(LanguageLevel.JDK_1_6));
|
||||
assertEquals(JavaSdkVersion.JDK_1_8, JavaSdkVersion.fromLanguageLevel(LanguageLevel.JDK_1_8));
|
||||
assertEquals(JavaSdkVersion.JDK_11, JavaSdkVersion.fromLanguageLevel(LanguageLevel.JDK_11));
|
||||
assertEquals(JavaSdkVersion.JDK_11, JavaSdkVersion.fromLanguageLevel(LanguageLevel.JDK_11_PREVIEW));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void maxLanguageLevelSanity() {
|
||||
for (JavaSdkVersion version : JavaSdkVersion.values()) {
|
||||
assertFalse("Fails for " + version.toString(), version.getMaxLanguageLevel().isPreview());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -847,6 +847,13 @@ public class JavaBuilder extends ModuleLevelBuilder {
|
||||
|
||||
addCrossCompilationOptions(compilerSdkVersion, options, context, chunk);
|
||||
|
||||
if (!options.contains("--enable-preview")) {
|
||||
LanguageLevel level = JpsJavaExtensionService.getInstance().getLanguageLevel(chunk.representativeTarget().getModule());
|
||||
if (level != null && level.isPreview()) {
|
||||
options.add("--enable-preview");
|
||||
}
|
||||
}
|
||||
|
||||
if (addAnnotationProcessingOptions(options, profile)) {
|
||||
final File srcOutput = ProjectPaths.getAnnotationProcessorGeneratedSourcesOutputDir(
|
||||
chunk.getModules().iterator().next(), chunk.containsTests(), profile
|
||||
|
||||
@@ -10,11 +10,21 @@ import org.jetbrains.annotations.NotNull;
|
||||
* @author nik
|
||||
*/
|
||||
public enum LanguageLevel {
|
||||
JDK_1_3, JDK_1_4, JDK_1_5, JDK_1_6, JDK_1_7, JDK_1_8, JDK_1_9, JDK_10, JDK_11, JDK_11_PREVIEW, JDK_X;
|
||||
JDK_1_3(3), JDK_1_4(4), JDK_1_5(5), JDK_1_6(6), JDK_1_7(7), JDK_1_8(8), JDK_1_9(9), JDK_10(10), JDK_11(11), JDK_11_PREVIEW(11), JDK_X(12);
|
||||
|
||||
private final JavaVersion myVersion;
|
||||
|
||||
LanguageLevel(int major) {
|
||||
myVersion = JavaVersion.compose(major);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JavaVersion toJavaVersion() {
|
||||
return JavaVersion.compose(ordinal() + 3);
|
||||
return myVersion;
|
||||
}
|
||||
|
||||
public boolean isPreview() {
|
||||
return name().endsWith("_PREVIEW");
|
||||
}
|
||||
|
||||
/** @deprecated use {@link JpsJavaSdkType#complianceOption} (to be removed in IDEA 2019) */
|
||||
|
||||
Reference in New Issue
Block a user