mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
find and use matching jdk if remote jre version do not match project sdk
This commit is contained in:
@@ -53,6 +53,10 @@ import com.intellij.openapi.application.ApplicationNamesInfo;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.ProjectJdkTable;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
@@ -86,7 +90,6 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.IOException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.*;
|
||||
@@ -605,11 +608,34 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
|
||||
private void checkVirtualMachineVersion(VirtualMachine vm) {
|
||||
final String version = vm.version();
|
||||
if ("1.4.0".equals(version)) {
|
||||
SwingUtilities.invokeLater(() -> Messages.showMessageDialog(
|
||||
getProject(),
|
||||
DebuggerInvocationUtil.swingInvokeLater(myProject, () -> Messages.showMessageDialog(
|
||||
myProject,
|
||||
DebuggerBundle.message("warning.jdk140.unstable"), DebuggerBundle.message("title.jdk140.unstable"), Messages.getWarningIcon()
|
||||
));
|
||||
}
|
||||
Sdk projectSdk = ProjectRootManager.getInstance(myProject).getProjectSdk();
|
||||
if (getSession().getAlternativeJre() == null && !versionMatch(projectSdk, version)) {
|
||||
for (Sdk sdk : ProjectJdkTable.getInstance().getAllJdks()) {
|
||||
if (versionMatch(sdk, version)) {
|
||||
XDebugSessionImpl.NOTIFICATION_GROUP.createNotification(
|
||||
DebuggerBundle.message("message.remote.jre.version.mismatch",
|
||||
version,
|
||||
projectSdk != null ? projectSdk.getVersionString() : "unknown",
|
||||
sdk.getName())
|
||||
, MessageType.INFO).notify(myProject);
|
||||
getSession().setAlternativeJre(sdk);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean versionMatch(@Nullable Sdk sdk, String version) {
|
||||
if (sdk != null) {
|
||||
String versionString = sdk.getVersionString();
|
||||
return versionString != null && versionString.contains(version);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*Event dispatching*/
|
||||
|
||||
@@ -41,6 +41,7 @@ import com.intellij.notification.NotificationType;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
@@ -50,6 +51,7 @@ import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.psi.PsiCompiledElement;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElementFinder;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.unscramble.ThreadState;
|
||||
@@ -92,7 +94,7 @@ public class DebuggerSession implements AbstractDebuggerSession {
|
||||
private final String mySessionName;
|
||||
private final DebugProcessImpl myDebugProcess;
|
||||
private final GlobalSearchScope mySearchScope;
|
||||
private final Sdk myAlternativeJre;
|
||||
private Sdk myAlternativeJre;
|
||||
|
||||
private final DebuggerContextImpl SESSION_EMPTY_CONTEXT;
|
||||
//Thread, user is currently stepping through
|
||||
@@ -123,6 +125,11 @@ public class DebuggerSession implements AbstractDebuggerSession {
|
||||
return myAlternativeJre;
|
||||
}
|
||||
|
||||
public void setAlternativeJre(Sdk sdk) {
|
||||
myAlternativeJre = sdk;
|
||||
Extensions.findExtension(PsiElementFinder.EP_NAME, getProject(), AlternativeJreClassFinder.class).clearCache();
|
||||
}
|
||||
|
||||
public boolean isModifiedClassesScanRequired() {
|
||||
return myModifiedClassesScanRequired;
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ error.no.shmem.address=Shared memory address unspecified
|
||||
debugger.jdi.bootstrap.error={0}. Check your JDK installation.
|
||||
warning.jdk140.unstable=The debuggee VM version is "1.4.0".\nJ2SDK 1.4.0 documented bugs may cause unstable debugger behavior.\nWe recommend using J2SDK 1.4.0_01 or higher.
|
||||
title.jdk140.unstable=VM Version Warning
|
||||
message.remote.jre.version.mismatch=Remote jre version ({0})\ndo not match project jdk version ({1}), \nwill use sources from sdk: {2}
|
||||
error.invalid.argument={0,choice, 1#Invalid argument|2#Invalid arguments}
|
||||
error.vm.disconnected=VM disconnected. Target virtual machine closed connection
|
||||
error.unknown.host=Cannot connect to remote process, host is unknown
|
||||
|
||||
Reference in New Issue
Block a user