diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/action/TraceStreamAction.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/action/TraceStreamAction.java index 838104f63ab0..b7f36dd1e1a8 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/action/TraceStreamAction.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/action/TraceStreamAction.java @@ -15,6 +15,7 @@ import com.intellij.debugger.streams.ui.impl.ElementChooserImpl; import com.intellij.debugger.streams.ui.impl.EvaluationAwareTraceWindow; import com.intellij.debugger.streams.wrapper.StreamChain; import com.intellij.debugger.streams.wrapper.StreamChainBuilder; +import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; @@ -23,11 +24,17 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; +import com.intellij.openapi.projectRoots.JavaSdk; +import com.intellij.openapi.projectRoots.JavaSdkVersion; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiEditorUtil; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XDebuggerManager; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -73,6 +80,14 @@ public class TraceStreamAction extends AnAction { final XDebugSession session = getCurrentSession(e); Extensions.getExtensions(LibrarySupportProvider.EP_NAME); final PsiElement element = session == null ? null : myPositionResolver.getNearestElementToBreakpoint(session); + + if (element != null && isJdkAtLeast9(session.getProject(), element)) { + XDebuggerManagerImpl.NOTIFICATION_GROUP + .createNotification("This action does not work with JDK 9 yet", MessageType.WARNING) + .notify(session.getProject()); + return; + } + if (element != null) { final List chains = mySupportedLibraries.stream() .filter(library -> library.languageId.equals(element.getLanguage().getID())) @@ -151,6 +166,18 @@ public class TraceStreamAction extends AnAction { return project == null ? null : XDebuggerManager.getInstance(project).getCurrentSession(); } + private static boolean isJdkAtLeast9(@NotNull Project project, @NotNull PsiElement element) { + if (element.getLanguage().is(JavaLanguage.INSTANCE)) { + final Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk(); + if (sdk != null) { + final JavaSdkVersion javaVersion = JavaSdk.getInstance().getVersion(sdk); + if (javaVersion != null) return javaVersion.isAtLeast(JavaSdkVersion.JDK_1_9); + } + } + + return false; + } + private static class MyStreamChainChooser extends ElementChooserImpl { MyStreamChainChooser(@NotNull Editor editor) { super(editor);