Skip to content

Commit 8ec39c8

Browse files
committed
Fix AI Debug
1 parent 2ebd962 commit 8ec39c8

File tree

5 files changed

+21
-10
lines changed

5 files changed

+21
-10
lines changed

intellij-plugin/hs-features/ai-debugger-core/src/org/hyperskill/academy/ai/debugger/core/breakpoint/AIBreakPointService.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ class AIBreakPointService(private val project: Project, private val scope: Corou
2929

3030
fun initialize() {
3131
val language = project.course?.languageById ?: return
32-
val type = language.getAIBreakpointType()
32+
val type = language.findAIBreakpointType() ?: return
3333
breakpointManager.getBreakpoints(type).forEach(::highlightBreakpoint)
3434
addListener(type)
3535
}
3636

3737
fun toggleLineBreakpoint(language: Language, file: VirtualFile, line: Int) = runReadAction {
38-
val type = language.getAIBreakpointType()
38+
val type = language.findAIBreakpointType() ?: return@runReadAction
3939
removeBreakpointsOnLine(line)
4040
breakpointManager.addLineBreakpoint(type, file.url, line, type.createProperties())
4141
}
@@ -84,8 +84,9 @@ class AIBreakPointService(private val project: Project, private val scope: Corou
8484
}
8585

8686
companion object {
87-
fun Language.getAIBreakpointType(): XLineBreakpointType<XBreakpointProperties<*>> {
88-
val breakPointType = BreakpointTypeManager.getInstance(this).getBreakPointType()
87+
fun Language.findAIBreakpointType(): XLineBreakpointType<XBreakpointProperties<*>>? {
88+
val manager = BreakpointTypeManager.getInstanceOrNull(this) ?: return null
89+
val breakPointType = manager.getBreakPointType()
8990
return XDebuggerUtil.getInstance().findBreakpointType(breakPointType::class.java)
9091
}
9192
}

intellij-plugin/hs-features/ai-debugger-core/src/org/hyperskill/academy/ai/debugger/core/breakpoint/AIBreakpointHintMouseMotionListener.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import com.intellij.openapi.util.TextRange
1010
import com.intellij.openapi.vfs.VirtualFile
1111
import com.intellij.xdebugger.XDebuggerManager
1212
import com.jetbrains.educational.ml.debugger.response.BreakpointHintDetails
13-
import org.hyperskill.academy.ai.debugger.core.breakpoint.AIBreakPointService.Companion.getAIBreakpointType
13+
import org.hyperskill.academy.ai.debugger.core.breakpoint.AIBreakPointService.Companion.findAIBreakpointType
1414
import org.hyperskill.academy.ai.debugger.core.ui.AIBreakpointHint
1515
import org.hyperskill.academy.learning.course
1616
import org.hyperskill.academy.learning.courseFormat.ext.languageById
@@ -40,7 +40,7 @@ class AIBreakpointHintMouseMotionListener(
4040
private fun hasBreakpointAtLine(editor: Editor, line: Int, virtualFile: VirtualFile): Boolean {
4141
val project = editor.project ?: return false
4242
val language = project.course?.languageById ?: return false
43-
val type = language.getAIBreakpointType()
43+
val type = language.findAIBreakpointType() ?: return false
4444
return XDebuggerManager.getInstance(project).breakpointManager.findBreakpointsAtLine(type, virtualFile, line).isNotEmpty()
4545
}
4646

intellij-plugin/hs-features/ai-debugger-core/src/org/hyperskill/academy/ai/debugger/core/breakpoint/BreakpointTypeManager.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ interface BreakpointTypeManager {
1111
companion object {
1212
private val EP_NAME = LanguageExtension<BreakpointTypeManager>("HyperskillEducational.breakpointTypeManager")
1313

14-
fun getInstance(language: Language): BreakpointTypeManager = EP_NAME.forLanguage(language)
14+
fun getInstanceOrNull(language: Language): BreakpointTypeManager? =
15+
EP_NAME.forLanguage(language) ?: EP_NAME.forLanguage(Language.ANY)
16+
17+
fun getInstance(language: Language): BreakpointTypeManager =
18+
requireNotNull(getInstanceOrNull(language)) {
19+
"No BreakpointTypeManager registered for language '${language.id}'. " +
20+
"Please register an implementation via 'HyperskillEducational.breakpointTypeManager'."
21+
}
1522
}
1623
}

intellij-plugin/hs-features/ai-debugger-core/src/org/hyperskill/academy/ai/debugger/core/session/AIDebugSessionRunner.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import com.intellij.xdebugger.XDebugProcess
1919
import com.intellij.xdebugger.XDebuggerManager
2020
import com.intellij.xdebugger.XDebuggerManagerListener
2121
import org.hyperskill.academy.ai.debugger.core.breakpoint.AIBreakPointService
22-
import org.hyperskill.academy.ai.debugger.core.breakpoint.AIBreakPointService.Companion.getAIBreakpointType
22+
import org.hyperskill.academy.ai.debugger.core.breakpoint.AIBreakPointService.Companion.findAIBreakpointType
2323
import org.hyperskill.academy.ai.debugger.core.breakpoint.AIBreakpointHintMouseMotionListener
2424
import org.hyperskill.academy.ai.debugger.core.utils.AIDebugUtils.failedTestName
2525
import org.hyperskill.academy.ai.debugger.core.utils.AIDebugUtils.runWithTests
@@ -52,7 +52,8 @@ class AIDebugSessionRunner(
5252

5353
private fun makeBreakpointsRegular() {
5454
val breakpointManager = XDebuggerManager.getInstance(project).breakpointManager
55-
breakpointManager.getBreakpoints(language.getAIBreakpointType()).forEach {
55+
val type = language.findAIBreakpointType() ?: return
56+
breakpointManager.getBreakpoints(type).forEach {
5657
breakpointManager.updateBreakpointPresentation(it, AllIcons.Debugger.Db_set_breakpoint, null)
5758
project.service<AIBreakPointService>().removeHighlighter(it)
5859
}

intellij-plugin/hs-features/ai-debugger-jvm/resources/ai-debugger-jvm.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
</dependencies>
77

88
<extensions defaultExtensionNs="HyperskillEducational">
9-
<breakpointTypeManager language="JVM" implementationClass="org.hyperskill.academy.ai.debugger.jvm.JvmBreakpointTypeManager"/>
9+
<!-- Register for concrete languages to avoid null from LanguageExtension.forLanguage(...) -->
10+
<breakpointTypeManager language="JAVA" implementationClass="org.hyperskill.academy.ai.debugger.jvm.JvmBreakpointTypeManager"/>
11+
<breakpointTypeManager language="kotlin" implementationClass="org.hyperskill.academy.ai.debugger.jvm.JvmBreakpointTypeManager"/>
1012
</extensions>
1113

1214
<extensions defaultExtensionNs="com.intellij">

0 commit comments

Comments
 (0)