Skip to content

Commit c4475ac

Browse files
committed
api版本提高到202,附加调试支持通过进程title匹配
1 parent 5a73ec7 commit c4475ac

14 files changed

Lines changed: 401 additions & 137 deletions

resources/META-INF/plugin.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
EmmyLua Attach Debugger Plugin for EmmyLua
99
]]></description>
1010

11-
<idea-version since-build="173.0"/>
11+
<idea-version since-build="202.0"/>
1212

1313
<depends>com.intellij.modules.platform</depends>
1414
<depends>com.tang</depends>
1515

1616
<extensions defaultExtensionNs="com.intellij">
1717
<xdebugger.attachDebuggerProvider
1818
implementation="com.tang.intellij.lua.debugger.emmyAttach.EmmyAttachDebuggerProvider"/>
19+
1920
<programRunner implementation="com.tang.intellij.lua.debugger.emmyLaunch.EmmyLaunchRunner"/>
2021
<configurationType implementation="com.tang.intellij.lua.debugger.emmyLaunch.EmmyLaunchConfigurationType"/>
2122

src/com/tang/intellij/lua/debugger/emmy/protoEx.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/com/tang/intellij/lua/debugger/emmyAttach/EmmyAttachConfigurationType.kt

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ import com.intellij.openapi.options.SettingsEditorGroup
1313
import com.intellij.openapi.project.Project
1414
import com.intellij.openapi.util.JDOMExternalizerUtil
1515
import com.tang.intellij.lua.debugger.LuaCommandLineState
16-
import com.tang.intellij.lua.debugger.LuaConfigurationFactory
1716
import com.tang.intellij.lua.debugger.LuaRunConfiguration
1817
import com.tang.intellij.lua.lang.LuaIcons
1918
import org.jdom.Element
2019
import javax.swing.Icon
20+
import com.tang.intellij.lua.debugger.LuaConfigurationFactory
21+
import com.tang.intellij.lua.debugger.emmy.EmmyDebugTransportType
2122

22-
class EmmyAttachConfigurationType : ConfigurationType {
23+
class EmmyAttachConfigurationType : ConfigurationType {
2324
override fun getIcon(): Icon {
2425
return LuaIcons.FILE
2526
}
@@ -37,23 +38,32 @@ class EmmyAttachConfigurationType : ConfigurationType {
3738
}
3839

3940
override fun getConfigurationFactories(): Array<ConfigurationFactory> {
40-
return arrayOf( EmmyAttachDebuggerConfigurationFactory(this))
41+
return arrayOf(EmmyAttachDebuggerConfigurationFactory(this))
4142
}
4243
}
4344

45+
enum class EmmyAttachMode(private val desc: String) {
46+
Pid("Pid"),
47+
ProcessName("ProcessName");
48+
49+
override fun toString(): String {
50+
return desc;
51+
}
52+
}
4453

4554
class EmmyAttachDebuggerConfigurationFactory(val type: EmmyAttachConfigurationType) : LuaConfigurationFactory(type) {
4655
override fun createTemplateConfiguration(project: Project): RunConfiguration {
4756
return EmmyAttachDebugConfiguration(project, this)
4857
}
4958
}
5059

51-
class EmmyAttachDebugConfiguration(project: Project, factory: EmmyAttachDebuggerConfigurationFactory) : LuaRunConfiguration(project, factory),
60+
class EmmyAttachDebugConfiguration(project: Project, factory: EmmyAttachDebuggerConfigurationFactory) :
61+
LuaRunConfiguration(project, factory),
5262
RunConfigurationWithSuppressedDefaultRunAction {
63+
var attachMode = EmmyAttachMode.Pid;
5364
var pid = "0"
54-
// var processName = ""
55-
// var usePid = true
56-
var captureLog = false
65+
var processName = ""
66+
var encoding = "gbk"
5767

5868
override fun getConfigurationEditor(): SettingsEditor<out RunConfiguration> {
5969
val group = SettingsEditorGroup<EmmyAttachDebugConfiguration>()
@@ -71,25 +81,26 @@ class EmmyAttachDebugConfiguration(project: Project, factory: EmmyAttachDebugger
7181

7282
override fun writeExternal(element: Element) {
7383
super.writeExternal(element)
84+
JDOMExternalizerUtil.writeField(element, "AttachMode", attachMode.ordinal.toString())
7485
JDOMExternalizerUtil.writeField(element, "Pid", pid)
75-
// JDOMExternalizerUtil.writeField(element, "ProcessName", processName)
76-
// JDOMExternalizerUtil.writeField(element, "UsePid", usePid.toString())
77-
JDOMExternalizerUtil.writeField(element, "CaptureLog", captureLog.toString())
86+
JDOMExternalizerUtil.writeField(element, "ProcessName", processName)
87+
JDOMExternalizerUtil.writeField(element, "Encoding", encoding)
7888
}
7989

8090
override fun readExternal(element: Element) {
8191
super.readExternal(element)
92+
JDOMExternalizerUtil.readField(element, "AttachMode")?.let { value ->
93+
val i = value.toInt()
94+
attachMode = EmmyAttachMode.values().find { it.ordinal == i } ?: EmmyAttachMode.Pid
95+
}
8296
JDOMExternalizerUtil.readField(element, "Pid")?.let {
8397
pid = it
8498
}
85-
// JDOMExternalizerUtil.readField(element, "ProcessName")?.let {
86-
// processName = it
87-
// }
88-
// JDOMExternalizerUtil.readField(element, "UsePid")?.let {
89-
// usePid = it == "true"
90-
// }
91-
JDOMExternalizerUtil.readField(element, "CaptureLog")?.let { value ->
92-
captureLog = value == "true"
99+
JDOMExternalizerUtil.readField(element, "ProcessName")?.let {
100+
processName = it
101+
}
102+
JDOMExternalizerUtil.readField(element, "Encoding")?.let {
103+
encoding = it
93104
}
94105
}
95106
}

src/com/tang/intellij/lua/debugger/emmyAttach/EmmyAttachDebugProcess.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import com.intellij.execution.process.*
2222
import com.intellij.execution.ui.ConsoleViewContentType
2323
import com.intellij.openapi.util.Key
2424
import com.intellij.xdebugger.XDebugSession
25-
import com.intellij.xdebugger.XSourcePosition
26-
import com.intellij.xdebugger.breakpoints.XLineBreakpoint
2725
import com.tang.intellij.lua.debugger.LogConsoleType
2826
import com.tang.intellij.lua.debugger.emmy.*
2927
import com.tang.intellij.lua.debugger.utils.FileUtils
@@ -104,15 +102,6 @@ class EmmyAttachDebugProcess(
104102
return handler.exitCode == 0
105103
}
106104

107-
// work around 等以后删掉
108-
override fun registerBreakpoint(sourcePosition: XSourcePosition, breakpoint: XLineBreakpoint<*>) {
109-
val file = sourcePosition.file
110-
val shortPath = file.canonicalPath
111-
if (shortPath != null) {
112-
send(AddBreakPointReqEx(listOf(BreakPointEx(shortPath, breakpoint.line + 1, breakpoint.conditionExpression?.expression))))
113-
}
114-
}
115-
116105
override fun onReceiveMessage(cmd: MessageCMD, json: String) {
117106
if (cmd == MessageCMD.AttachedNotify) {
118107
val msg = Gson().fromJson(json, AttachedNotify::class.java)

src/com/tang/intellij/lua/debugger/emmyAttach/EmmyAttachDebugSettingsPanel.form

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.tang.intellij.lua.debugger.emmyAttach.EmmyAttachDebugSettingsPanel">
3-
<grid id="27dc6" binding="panel" layout-manager="GridLayoutManager" row-count="2" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
3+
<grid id="27dc6" binding="panel" layout-manager="GridLayoutManager" row-count="5" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
44
<margin top="0" left="0" bottom="0" right="0"/>
55
<constraints>
66
<xy x="20" y="20" width="500" height="400"/>
@@ -10,12 +10,12 @@
1010
<children>
1111
<vspacer id="67aeb">
1212
<constraints>
13-
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
13+
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
1414
</constraints>
1515
</vspacer>
1616
<component id="dcdb3" class="javax.swing.JTextField" binding="ProcessId">
1717
<constraints>
18-
<grid row="0" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
18+
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
1919
<preferred-size width="150" height="-1"/>
2020
</grid>
2121
</constraints>
@@ -29,6 +29,65 @@
2929
<text value="Process Id:"/>
3030
</properties>
3131
</component>
32+
<component id="f9bed" class="javax.swing.JLabel">
33+
<constraints>
34+
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
35+
</constraints>
36+
<properties>
37+
<text value="Process Name:"/>
38+
</properties>
39+
</component>
40+
<component id="6f626" class="javax.swing.JLabel">
41+
<constraints>
42+
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
43+
</constraints>
44+
<properties>
45+
<enabled value="true"/>
46+
<text value="Encoding:"/>
47+
</properties>
48+
</component>
49+
<component id="b42b3" class="javax.swing.JTextField" binding="ProcessName">
50+
<constraints>
51+
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
52+
<preferred-size width="150" height="-1"/>
53+
</grid>
54+
</constraints>
55+
<properties/>
56+
</component>
57+
<component id="878e8" class="javax.swing.JTextField" binding="Encoding">
58+
<constraints>
59+
<grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
60+
<preferred-size width="150" height="-1"/>
61+
</grid>
62+
</constraints>
63+
<properties/>
64+
</component>
65+
<grid id="b16b" binding="AttachMode" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
66+
<margin top="0" left="0" bottom="0" right="0"/>
67+
<constraints>
68+
<grid row="3" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
69+
</constraints>
70+
<properties/>
71+
<border type="none"/>
72+
<children>
73+
<component id="98d52" class="javax.swing.JRadioButton" binding="UsePid">
74+
<constraints>
75+
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
76+
</constraints>
77+
<properties>
78+
<text value="use pid"/>
79+
</properties>
80+
</component>
81+
<component id="89fb" class="javax.swing.JRadioButton" binding="UseProcessName">
82+
<constraints>
83+
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
84+
</constraints>
85+
<properties>
86+
<text value="use name"/>
87+
</properties>
88+
</component>
89+
</children>
90+
</grid>
3291
</children>
3392
</grid>
3493
</form>

src/com/tang/intellij/lua/debugger/emmyAttach/EmmyAttachDebugSettingsPanel.java

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,57 @@
1212

1313
public class EmmyAttachDebugSettingsPanel extends SettingsEditor<EmmyAttachDebugConfiguration> implements DocumentListener {
1414
private JTextField ProcessId;
15-
// private JCheckBox captureProcessLogCheckBox;
15+
1616
private JPanel panel;
17-
// private JList<ProcessDetailInfo> ProcessList;
17+
private JTextField ProcessName;
18+
private JTextField Encoding;
1819

19-
private ButtonGroup UseType;
20+
private JRadioButton UsePid;
21+
private JRadioButton UseProcessName;
22+
private JPanel AttachMode;
23+
private ButtonGroup AttachModeGroup;
2024

2125
public EmmyAttachDebugSettingsPanel(Project project) {
2226
ProcessId.getDocument().addDocumentListener(this);
23-
// DefaultListModel<ProcessDetailInfo> model = new DefaultListModel<>();
24-
// ProcessList.setModel(model);
27+
ProcessName.getDocument().addDocumentListener(this);
28+
29+
Encoding.setText("gbk");
30+
Encoding.getDocument().addDocumentListener(this);
2531

26-
// captureProcessLogCheckBox.addActionListener(e -> onChanged());
32+
AttachModeGroup = new ButtonGroup();
33+
AttachModeGroup.add(UsePid);
34+
AttachModeGroup.add(UseProcessName);
35+
UsePid.addChangeListener(e -> onChanged());
36+
UseProcessName.addChangeListener(e -> onChanged());
2737
}
2838

2939

3040
@Override
3141
protected void resetEditorFrom(@NotNull EmmyAttachDebugConfiguration configuration) {
3242
ProcessId.setText(configuration.getPid());
43+
ProcessName.setText(configuration.getProcessName());
44+
Encoding.setText(configuration.getEncoding());
45+
46+
if(configuration.getAttachMode() == EmmyAttachMode.Pid){
47+
UsePid.setSelected(true);
48+
}
49+
else if(configuration.getAttachMode() == EmmyAttachMode.ProcessName){
50+
UseProcessName.setSelected(true);
51+
}
3352

34-
// captureProcessLogCheckBox.setSelected(configuration.getCaptureLog());
3553
}
3654

3755
@Override
3856
protected void applyEditorTo(@NotNull EmmyAttachDebugConfiguration configuration) throws ConfigurationException {
3957
configuration.setPid(ProcessId.getText());
40-
// configuration.setCaptureLog(captureProcessLogCheckBox.isSelected());
58+
configuration.setProcessName(ProcessName.getText());
59+
configuration.setEncoding(Encoding.getText());
60+
61+
if (UsePid.isSelected()) {
62+
configuration.setAttachMode(EmmyAttachMode.Pid);
63+
} else if (UseProcessName.isSelected()) {
64+
configuration.setAttachMode(EmmyAttachMode.ProcessName);
65+
}
4166
}
4267

4368
@Override

src/com/tang/intellij/lua/debugger/emmyAttach/EmmyAttachDebuggerProvider.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,25 @@ import com.intellij.openapi.project.Project
2525
import com.intellij.openapi.util.Key
2626
import com.intellij.openapi.util.SystemInfoRt
2727
import com.intellij.openapi.util.UserDataHolder
28+
import com.intellij.xdebugger.attach.XAttachDebuggerProvider
29+
import com.intellij.xdebugger.attach.XAttachHost
2830
import com.intellij.xdebugger.attach.XLocalAttachDebugger
29-
import com.intellij.xdebugger.attach.XLocalAttachDebuggerProvider
3031
import com.tang.intellij.lua.debugger.utils.FileUtils
3132
import com.tang.intellij.lua.debugger.utils.ProcessDetailInfo
3233
import com.tang.intellij.lua.debugger.utils.listProcesses
3334

34-
class EmmyAttachDebuggerProvider : XLocalAttachDebuggerProvider {
35+
class EmmyAttachDebuggerProvider : XAttachDebuggerProvider {
3536
companion object {
3637
val DETAIL_KEY = Key.create<Map<Int, ProcessDetailInfo>>("LuaLocalAttachDebuggerProvider.key")
3738
}
3839

3940
private var processMap = mapOf<Int, ProcessDetailInfo>()
4041

41-
override fun getAvailableDebuggers(project: Project, processInfo: ProcessInfo, userDataHolder: UserDataHolder): List<XLocalAttachDebugger> {
42+
override fun isAttachHostApplicable(p0: XAttachHost): Boolean {
43+
return true
44+
}
45+
46+
override fun getAvailableDebuggers(project: Project, attachHost: XAttachHost , processInfo: ProcessInfo, userDataHolder: UserDataHolder): List<XLocalAttachDebugger> {
4247
if (!SystemInfoRt.isWindows)
4348
return emptyList()
4449
if (userDataHolder.getUserData(DETAIL_KEY) == null) {
@@ -69,5 +74,6 @@ class EmmyAttachDebuggerProvider : XLocalAttachDebuggerProvider {
6974
return emptyList()
7075
}
7176

72-
override fun getAttachGroup() = EmmyAttachGroup.instance
77+
override fun getPresentationGroup() = EmmyAttachGroup.instance
78+
7379
}

src/com/tang/intellij/lua/debugger/emmyAttach/EmmyAttachGroup.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,26 @@
1414
* limitations under the License.
1515
*/
1616

17+
1718
package com.tang.intellij.lua.debugger.emmyAttach
1819

1920
import com.intellij.execution.process.ProcessInfo
2021
import com.intellij.openapi.project.Project
2122
import com.intellij.openapi.util.UserDataHolder
22-
import com.intellij.xdebugger.attach.XLocalAttachGroup
23+
import com.intellij.xdebugger.attach.XAttachProcessPresentationGroup
2324
import com.tang.intellij.lua.debugger.utils.getDisplayName
2425
import com.tang.intellij.lua.lang.LuaIcons
2526
import java.io.File
2627
import javax.swing.Icon
2728
import javax.swing.filechooser.FileSystemView
2829

29-
class EmmyAttachGroup : XLocalAttachGroup {
30+
class EmmyAttachGroup : XAttachProcessPresentationGroup {
3031

3132
companion object {
3233
val instance = EmmyAttachGroup()
3334
}
3435

35-
override fun getProcessDisplayText(project: Project, processInfo: ProcessInfo, userDataHolder: UserDataHolder): String {
36+
override fun getItemDisplayText(project: Project, processInfo: ProcessInfo, userDataHolder: UserDataHolder): String {
3637
val map = userDataHolder.getUserData(EmmyAttachDebuggerProvider.DETAIL_KEY)
3738
if (map != null) {
3839
val detail = map[processInfo.pid]
@@ -42,7 +43,7 @@ class EmmyAttachGroup : XLocalAttachGroup {
4243
return processInfo.executableName
4344
}
4445

45-
override fun getProcessIcon(project: Project, processInfo: ProcessInfo, userDataHolder: UserDataHolder): Icon {
46+
override fun getItemIcon(project: Project, processInfo: ProcessInfo, userDataHolder: UserDataHolder): Icon {
4647
val map = userDataHolder.getUserData(EmmyAttachDebuggerProvider.DETAIL_KEY)
4748
if (map != null) {
4849
val detail = map[processInfo.pid]
@@ -59,10 +60,17 @@ class EmmyAttachGroup : XLocalAttachGroup {
5960

6061
override fun getGroupName() = "EmmyLua Attach Debugger"
6162

62-
override fun compare(project: Project, a: ProcessInfo, b: ProcessInfo, userDataHolder: UserDataHolder) =
63+
override fun compare(a: ProcessInfo, b: ProcessInfo): Int =
6364
a.executableName.toLowerCase().compareTo(b.executableName.toLowerCase())
6465

6566
override fun getOrder(): Int {
6667
return 0
6768
}
69+
70+
override fun getProcessIcon(p0: Project, p1: ProcessInfo, p2: UserDataHolder): Icon {
71+
return getItemIcon(p0,p1,p2);
72+
}
73+
override fun getProcessDisplayText(p0: Project, p1: ProcessInfo, p2: UserDataHolder): String {
74+
return getItemDisplayText(p0,p1,p2);
75+
}
6876
}

0 commit comments

Comments
 (0)