Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package com.intellij.java.language.projectRoots;

import com.intellij.java.language.internal.DefaultJavaSdkType;
import consulo.application.Application;
import consulo.content.bundle.Sdk;
import consulo.content.bundle.SdkModificator;
import consulo.content.bundle.SdkTable;
Expand All @@ -26,35 +27,35 @@
import java.io.File;

public abstract class JavaSdkType extends SdkType {
/**
* Return default impl JavaSdkType implementation
*/
@Nonnull
public static JavaSdkType getDefaultJavaSdkType() {
return EP_NAME.findExtensionOrFail(DefaultJavaSdkType.class);
}
/**
* Return default impl JavaSdkType implementation
*/
@Nonnull
public static JavaSdkType getDefaultJavaSdkType() {
return Application.get().getExtensionPoint(SdkType.class).findExtensionOrFail(DefaultJavaSdkType.class);
}

public JavaSdkType(String name) {
super(name);
}
public JavaSdkType(String name) {
super(name);
}

public final Sdk createJdk(String jdkName, @Nonnull String home) {
Sdk jdk = SdkTable.getInstance().createSdk(jdkName, this);
SdkModificator sdkModificator = jdk.getSdkModificator();
public final Sdk createJdk(String jdkName, @Nonnull String home) {
Sdk jdk = SdkTable.getInstance().createSdk(jdkName, this);
SdkModificator sdkModificator = jdk.getSdkModificator();

String path = home.replace(File.separatorChar, '/');
sdkModificator.setHomePath(path);
sdkModificator.setVersionString(jdkName); // must be set after home path, otherwise setting home path clears the version string
sdkModificator.commitChanges();
String path = home.replace(File.separatorChar, '/');
sdkModificator.setHomePath(path);
sdkModificator.setVersionString(jdkName); // must be set after home path, otherwise setting home path clears the version string
sdkModificator.commitChanges();

setupSdkPaths(jdk);
setupSdkPaths(jdk);

return jdk;
}
return jdk;
}

public abstract String getBinPath(Sdk sdk);
public abstract String getBinPath(Sdk sdk);

public abstract String getToolsPath(Sdk sdk);
public abstract String getToolsPath(Sdk sdk);

public abstract void setupCommandLine(@Nonnull GeneralCommandLine generalCommandLine, @Nonnull Sdk sdk);
public abstract void setupCommandLine(@Nonnull GeneralCommandLine generalCommandLine, @Nonnull Sdk sdk);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,83 +15,83 @@
* @see LanguageLevel
*/
public enum JavaSdkVersion {
JDK_1_0(LanguageLevel.JDK_1_3),
JDK_1_1(LanguageLevel.JDK_1_3),
JDK_1_2(LanguageLevel.JDK_1_3),
JDK_1_3(LanguageLevel.JDK_1_3),
JDK_1_4(LanguageLevel.JDK_1_4),
JDK_1_5(LanguageLevel.JDK_1_5),
JDK_1_6(LanguageLevel.JDK_1_6),
JDK_1_7(LanguageLevel.JDK_1_7),
JDK_1_8(LanguageLevel.JDK_1_8),
JDK_1_9(LanguageLevel.JDK_1_9),
JDK_10(LanguageLevel.JDK_10),
JDK_11(LanguageLevel.JDK_11),
JDK_12(LanguageLevel.JDK_12),
JDK_13(LanguageLevel.JDK_13),
JDK_14(LanguageLevel.JDK_14),
JDK_15(LanguageLevel.JDK_15),
JDK_16(LanguageLevel.JDK_16),
JDK_17(LanguageLevel.JDK_17),
JDK_18(LanguageLevel.JDK_18),
JDK_19(LanguageLevel.JDK_19),
JDK_20(LanguageLevel.JDK_20),
JDK_21(LanguageLevel.JDK_21),
JDK_22(LanguageLevel.JDK_22),
JDK_23(LanguageLevel.JDK_X);
JDK_1_0(LanguageLevel.JDK_1_3),
JDK_1_1(LanguageLevel.JDK_1_3),
JDK_1_2(LanguageLevel.JDK_1_3),
JDK_1_3(LanguageLevel.JDK_1_3),
JDK_1_4(LanguageLevel.JDK_1_4),
JDK_1_5(LanguageLevel.JDK_1_5),
JDK_1_6(LanguageLevel.JDK_1_6),
JDK_1_7(LanguageLevel.JDK_1_7),
JDK_1_8(LanguageLevel.JDK_1_8),
JDK_1_9(LanguageLevel.JDK_1_9),
JDK_10(LanguageLevel.JDK_10),
JDK_11(LanguageLevel.JDK_11),
JDK_12(LanguageLevel.JDK_12),
JDK_13(LanguageLevel.JDK_13),
JDK_14(LanguageLevel.JDK_14),
JDK_15(LanguageLevel.JDK_15),
JDK_16(LanguageLevel.JDK_16),
JDK_17(LanguageLevel.JDK_17),
JDK_18(LanguageLevel.JDK_18),
JDK_19(LanguageLevel.JDK_19),
JDK_20(LanguageLevel.JDK_20),
JDK_21(LanguageLevel.JDK_21),
JDK_22(LanguageLevel.JDK_22),
JDK_23(LanguageLevel.JDK_X);

public static JavaSdkVersion MAX_JDK = JDK_23;
public static JavaSdkVersion MAX_JDK = JDK_23;

private final LanguageLevel myMaxLanguageLevel;
private final LanguageLevel myMaxLanguageLevel;

JavaSdkVersion(@Nonnull LanguageLevel maxLanguageLevel) {
myMaxLanguageLevel = maxLanguageLevel;
}

@Nonnull
public LanguageLevel getMaxLanguageLevel() {
return myMaxLanguageLevel;
}

@Nonnull
public String getDescription() {
int feature = ordinal();
return feature < 5 ? "1." + feature : String.valueOf(feature);
}
JavaSdkVersion(@Nonnull LanguageLevel maxLanguageLevel) {
myMaxLanguageLevel = maxLanguageLevel;
}

public boolean isAtLeast(@Nonnull JavaSdkVersion version) {
return compareTo(version) >= 0;
}
@Nonnull
public LanguageLevel getMaxLanguageLevel() {
return myMaxLanguageLevel;
}

@Nonnull
public static JavaSdkVersion fromLanguageLevel(@Nonnull LanguageLevel languageLevel) throws IllegalArgumentException {
if (languageLevel == LanguageLevel.JDK_1_3) {
return JDK_1_3;
@Nonnull
public String getDescription() {
int feature = ordinal();
return feature < 5 ? "1." + feature : String.valueOf(feature);
}
JavaSdkVersion[] values = values();
if (languageLevel == LanguageLevel.JDK_X) {
return values[values.length - 1];

public boolean isAtLeast(@Nonnull JavaSdkVersion version) {
return compareTo(version) >= 0;
}
for (JavaSdkVersion version : values) {
if (version.getMaxLanguageLevel().isAtLeast(languageLevel)) {
return version;
}

@Nonnull
public static JavaSdkVersion fromLanguageLevel(@Nonnull 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;
}
}
throw new IllegalArgumentException("Can't map " + languageLevel + " to any of " + Arrays.toString(values));
}
throw new IllegalArgumentException("Can't map " + languageLevel + " to any of " + Arrays.toString(values));
}

/**
* See {@link JavaVersion#parse(String)} for supported formats.
*/
@Nullable
public static JavaSdkVersion fromVersionString(@Nonnull String versionString) {
JavaVersion version = JavaVersion.tryParse(versionString);
return version != null ? fromJavaVersion(version) : null;
}
/**
* See {@link JavaVersion#parse(String)} for supported formats.
*/
@Nullable
public static JavaSdkVersion fromVersionString(@Nonnull String versionString) {
JavaVersion version = JavaVersion.tryParse(versionString);
return version != null ? fromJavaVersion(version) : null;
}

@Nullable
public static JavaSdkVersion fromJavaVersion(@Nonnull JavaVersion version) {
JavaSdkVersion[] values = values();
return version.feature < values.length ? values[version.feature] : null;
}
@Nullable
public static JavaSdkVersion fromJavaVersion(@Nonnull JavaVersion version) {
JavaSdkVersion[] values = values();
return version.feature < values.length ? values[version.feature] : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/*
* @author max
*/
package com.intellij.java.language.projectRoots;

import com.intellij.java.language.psi.util.PsiUtil;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ComponentScope;
import consulo.annotation.component.ServiceAPI;
import consulo.ide.ServiceManager;
import consulo.language.psi.PsiElement;

import jakarta.annotation.Nonnull;

/**
* @author max
*/
@ServiceAPI(ComponentScope.APPLICATION)
public class JavaVersionService {
public static JavaVersionService getInstance() {
return ServiceManager.getService(JavaVersionService.class);
}
public static JavaVersionService getInstance() {
return ServiceManager.getService(JavaVersionService.class);
}

public boolean isAtLeast(@Nonnull PsiElement element, @Nonnull JavaSdkVersion version) {
return PsiUtil.getLanguageLevel(element).isAtLeast(version.getMaxLanguageLevel());
}
@RequiredReadAction
public boolean isAtLeast(@Nonnull PsiElement element, @Nonnull JavaSdkVersion version) {
return PsiUtil.getLanguageLevel(element).isAtLeast(version.getMaxLanguageLevel());
}

public JavaSdkVersion getJavaSdkVersion(@Nonnull PsiElement element) {
return JavaSdkVersion.fromLanguageLevel(PsiUtil.getLanguageLevel(element));
}
@RequiredReadAction
public JavaSdkVersion getJavaSdkVersion(@Nonnull PsiElement element) {
return JavaSdkVersion.fromLanguageLevel(PsiUtil.getLanguageLevel(element));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,55 +17,55 @@
*/
@ServiceAPI(ComponentScope.APPLICATION)
public abstract class OwnJdkVersionDetector {
public static OwnJdkVersionDetector getInstance() {
return ServiceManager.getService(OwnJdkVersionDetector.class);
}

/**
* @deprecated use {@link #detectJdkVersionInfo(String)} (to be removed in IDEA 2019)
*/
@Deprecated
@Nullable
public String detectJdkVersion(@Nonnull String homePath) {
JdkVersionInfo info = detectJdkVersionInfo(homePath);
return info != null ? info.getVersion() : null;
}

@Nullable
public abstract JdkVersionInfo detectJdkVersionInfo(@Nonnull String homePath);

public static final class JdkVersionInfo {
public final JavaVersion version;
public final Bitness bitness;

public JdkVersionInfo(@Nonnull JavaVersion version, @Nonnull Bitness bitness) {
this.version = version;
this.bitness = bitness;
}

@Override
public String toString() {
return version + " " + bitness;
public static OwnJdkVersionDetector getInstance() {
return ServiceManager.getService(OwnJdkVersionDetector.class);
}

/**
* @deprecated use {@link #version} (to be removed in IDEA 2019)
* @deprecated use {@link #detectJdkVersionInfo(String)} (to be removed in IDEA 2019)
*/
@Deprecated
public String getVersion() {
return formatVersionString(version);
@Nullable
public String detectJdkVersion(@Nonnull String homePath) {
JdkVersionInfo info = detectJdkVersionInfo(homePath);
return info != null ? info.getVersion() : null;
}

/**
* @deprecated use {@link #bitness} (to be removed in IDEA 2019)
*/
@Deprecated
public Bitness getBitness() {
return bitness;
@Nullable
public abstract JdkVersionInfo detectJdkVersionInfo(@Nonnull String homePath);

public static final class JdkVersionInfo {
public final JavaVersion version;
public final Bitness bitness;

public JdkVersionInfo(@Nonnull JavaVersion version, @Nonnull Bitness bitness) {
this.version = version;
this.bitness = bitness;
}

@Override
public String toString() {
return version + " " + bitness;
}

/**
* @deprecated use {@link #version} (to be removed in IDEA 2019)
*/
@Deprecated
public String getVersion() {
return formatVersionString(version);
}

/**
* @deprecated use {@link #bitness} (to be removed in IDEA 2019)
*/
@Deprecated
public Bitness getBitness() {
return bitness;
}
}
}

public static String formatVersionString(@Nonnull JavaVersion version) {
return "java version \"" + version + '"';
}
public static String formatVersionString(@Nonnull JavaVersion version) {
return "java version \"" + version + '"';
}
}
Loading
Loading