summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/snakeyaml-2.4.jarbin0 -> 339838 bytes
-rw-r--r--src/cppcheckplus/control/MyContorlUtil.java118
-rw-r--r--src/cppcheckplus/control/UIFrame.java5
-rw-r--r--src/cppcheckplus/control/menubar.xml1
-rw-r--r--src/toolsconfig/settings.xml8
-rw-r--r--src/toolsconfig/tools.yaml11
6 files changed, 34 insertions, 109 deletions
diff --git a/lib/snakeyaml-2.4.jar b/lib/snakeyaml-2.4.jar
new file mode 100644
index 0000000..c8bb638
--- /dev/null
+++ b/lib/snakeyaml-2.4.jar
Binary files differ
diff --git a/src/cppcheckplus/control/MyContorlUtil.java b/src/cppcheckplus/control/MyContorlUtil.java
index e7e3d07..8befdc7 100644
--- a/src/cppcheckplus/control/MyContorlUtil.java
+++ b/src/cppcheckplus/control/MyContorlUtil.java
@@ -28,6 +28,7 @@ import java.io.IOException;
28import java.io.InputStream; 28import java.io.InputStream;
29import java.util.ArrayList; 29import java.util.ArrayList;
30import java.util.List; 30import java.util.List;
31import java.util.Map;
31import javax.imageio.ImageIO; 32import javax.imageio.ImageIO;
32import javax.swing.BorderFactory; 33import javax.swing.BorderFactory;
33import javax.swing.Box; 34import javax.swing.Box;
@@ -35,7 +36,6 @@ import javax.swing.Icon;
35import javax.swing.ImageIcon; 36import javax.swing.ImageIcon;
36import javax.swing.JLabel; 37import javax.swing.JLabel;
37import javax.swing.JMenuItem; 38import javax.swing.JMenuItem;
38import javax.swing.JOptionPane;
39import javax.swing.UIManager; 39import javax.swing.UIManager;
40import javax.swing.plaf.FontUIResource; 40import javax.swing.plaf.FontUIResource;
41import javax.xml.parsers.DocumentBuilder; 41import javax.xml.parsers.DocumentBuilder;
@@ -48,7 +48,7 @@ import org.w3c.dom.Document;
48import org.w3c.dom.Element; 48import org.w3c.dom.Element;
49import org.w3c.dom.Node; 49import org.w3c.dom.Node;
50import org.w3c.dom.NodeList; 50import org.w3c.dom.NodeList;
51import toolsconfig.ToolsConfig; 51import org.yaml.snakeyaml.Yaml;
52import toolsconfig.ToolsRegistry; 52import toolsconfig.ToolsRegistry;
53 53
54 54
@@ -318,116 +318,38 @@ public class MyContorlUtil {
318 return menuBar; 318 return menuBar;
319 } 319 }
320 320
321
322 public static void fixSettingPath(String xml, String tool, String newPath) {
323 try {
324 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
325 DocumentBuilder db = dbf.newDocumentBuilder();
326 Document doc = db.parse(MyContorlUtil.getXMLFile(xml));
327 Element root = doc.getDocumentElement();
328 NodeList tools = root.getChildNodes();
329 if (tools != null) {
330 for (int i = 0; i < tools.getLength(); i++) {
331 org.w3c.dom.Node menu = tools.item(i);
332 if (menu.getNodeType() == Node.ELEMENT_NODE) {
333 if (menu.getNodeName().equalsIgnoreCase("tool")) {
334 org.w3c.dom.Node att =
335 menu.getAttributes().getNamedItem("id");
336 String toolName =
337 MyContorlUtil.getStringAttribute(menu,
338 "toolName");
339 if (tool.equals("cppcheck") &&
340 toolName.equals("cppcheck")) {
341 org.w3c.dom.Node attribute =
342 menu.getAttributes()
343 .getNamedItem("filePath");
344 if (attribute != null) {
345 attribute.setNodeValue(
346 newPath.replaceAll("\\\\", "\\/"));
347 }
348 } else if (tool.equals("flawfinder") &&
349 toolName.equals("flawfinder")) {
350 org.w3c.dom.Node attribute =
351 menu.getAttributes()
352 .getNamedItem("filePath");
353 if (attribute != null) {
354 attribute.setNodeValue(
355 newPath.replaceAll("\\\\", "\\/"));
356 }
357 }
358 }
359 }
360 }
361 }
362
363 Transformer transformer =
364 TransformerFactory.newInstance().newTransformer();
365 DOMSource source = new DOMSource(doc);
366 File file = new File(ClassLoader.getSystemResource(xml).toURI());
367 FileOutputStream outstream =
368 new FileOutputStream("src/cppcheckplus/control/settings.xml");
369 StreamResult reslut = new StreamResult(outstream);
370 transformer.transform(source, reslut);
371 outstream.close();
372
373 } catch (Exception ex) {
374 ex.printStackTrace();
375 }
376 }
377
378 public static void loadToolsRoad(String xml, UIFrame ui, 321 public static void loadToolsRoad(String xml, UIFrame ui,
379 ActionListener action) { 322 ActionListener action) {
380 try { 323 Yaml yaml = new Yaml();
381 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
382 DocumentBuilder db = dbf.newDocumentBuilder();
383 Document doc = db.parse(MyContorlUtil.getXMLFile(xml));
384 Element root = doc.getDocumentElement();
385 NodeList tools = root.getChildNodes();
386 324
325 try (InputStream input = Main.class.getClassLoader()
326 .getResourceAsStream(xml)) {
327 Map<String, Object> data = yaml.load(input);
387 MyRootMenu checkBar = new MyRootMenu(); 328 MyRootMenu checkBar = new MyRootMenu();
388 String toolName, filePath, para; 329 // 遍历map的所有key-value
389 MyMenuItem menuItem; 330 data.forEach((key, value) -> {
390 if (tools == null) { 331 Map<String, Object> tool = (Map<String, Object>) value;
391 // 弹窗提示
392 JOptionPane.showMessageDialog(null, "Error: 工具配置文件未找到",
393 "提示", 2);
394 return;
395 }
396 for (int i = 0; i < tools.getLength(); i++) {
397 org.w3c.dom.Node menu = tools.item(i);
398 if (menu.getNodeType() != Node.ELEMENT_NODE ||
399 !menu.getNodeName().equalsIgnoreCase("tool")) {
400 continue;
401 }
402 toolName = MyContorlUtil.getStringAttribute(menu, "toolName");
403 filePath = MyContorlUtil.getStringAttribute(menu, "filePath");
404 para = MyContorlUtil.getStringAttribute(menu, "para");
405
406 ToolsConfig tool = ToolsRegistry.getTool(toolName);
407 if (tool != null) {
408 tool.init(filePath, para, ui);
409 continue;
410 }
411 try { 332 try {
412 Class<?> clazz = Class.forName("toolsconfig." + toolName); 333 Class<?> clazz = Class.forName("toolsconfig." + key);
413 Object obj = clazz.getDeclaredConstructor().newInstance(); 334 Object obj = clazz.getDeclaredConstructor().newInstance();
414 ToolsRegistry.getTool(toolName).init(filePath, para, ui); 335 ToolsRegistry.getTool(key).init(tool.get("path").toString(),
336 tool.get("params").toString(), ui);
415 } catch (Exception e) { 337 } catch (Exception e) {
416 e.printStackTrace(); 338 e.printStackTrace();
417 } 339 }
418 menuItem = new MyMenuItem(); 340 MyMenuItem menuItem = new MyMenuItem();
419 menuItem.setText(toolName); 341 menuItem.setText(key);
420 menuItem.setToolTipText(toolName); 342 menuItem.setToolTipText(key);
421 menuItem.setActionCommand(toolName); 343 menuItem.setActionCommand(key);
422 344
423 menuItem.addActionListener(action); 345 menuItem.addActionListener(action);
424 checkBar.add(menuItem); 346 checkBar.add(menuItem);
425 } 347 });
426 348
427 checkBar.setText("检���工具"); 349 checkBar.setText("检���工具");
428 ui.mymenubar.add(checkBar, 1); 350 ui.mymenubar.add(checkBar, 1);
429 } catch (Exception ex) { 351 } catch (Exception e) {
430 ex.printStackTrace(); 352 e.printStackTrace();
431 } 353 }
432 } 354 }
433 355
diff --git a/src/cppcheckplus/control/UIFrame.java b/src/cppcheckplus/control/UIFrame.java
index 499d056..100b82c 100644
--- a/src/cppcheckplus/control/UIFrame.java
+++ b/src/cppcheckplus/control/UIFrame.java
@@ -34,7 +34,6 @@ import javax.swing.JTextArea;
34import javax.swing.event.ListSelectionEvent; 34import javax.swing.event.ListSelectionEvent;
35import javax.swing.event.ListSelectionListener; 35import javax.swing.event.ListSelectionListener;
36import javax.swing.plaf.TabbedPaneUI; 36import javax.swing.plaf.TabbedPaneUI;
37import toolsconfig.ToolsConfig;
38import toolsconfig.ToolsRegistry; 37import toolsconfig.ToolsRegistry;
39 38
40// 构造界面 39// 构造界面
@@ -43,7 +42,7 @@ public class UIFrame extends JFrame {
43 // XML配置文件路径 42 // XML配置文件路径
44 private final String menuBarXML = "cppcheckplus/control/menubar.xml"; 43 private final String menuBarXML = "cppcheckplus/control/menubar.xml";
45 private final String outlookPanelXML = "cppcheckplus/control/outlook.xml"; 44 private final String outlookPanelXML = "cppcheckplus/control/outlook.xml";
46 private final String settingsXML = "toolsconfig/settings.xml"; 45 private final String settings = "toolsconfig/tools.yaml";
47 private final String stdclangXML = "cppcheckplus/control/stdclang.xml"; 46 private final String stdclangXML = "cppcheckplus/control/stdclang.xml";
48 // 界面组件 47 // 界面组件
49 private final MyContentPanel contentPanel; 48 private final MyContentPanel contentPanel;
@@ -196,7 +195,7 @@ public class UIFrame extends JFrame {
196 } 195 }
197 }); 196 });
198 197
199 MyContorlUtil.loadToolsRoad(settingsXML, this, new ActionListener() { 198 MyContorlUtil.loadToolsRoad(settings, this, new ActionListener() {
200 @Override 199 @Override
201 public void actionPerformed(ActionEvent e) { 200 public void actionPerformed(ActionEvent e) {
202 String toolName = e.getActionCommand(); 201 String toolName = e.getActionCommand();
diff --git a/src/cppcheckplus/control/menubar.xml b/src/cppcheckplus/control/menubar.xml
index 0aae26b..17ff0b8 100644
--- a/src/cppcheckplus/control/menubar.xml
+++ b/src/cppcheckplus/control/menubar.xml
@@ -9,6 +9,7 @@
9 <menuitem text="关闭" tooltip="退出程序" icon="control/images/toolbar/right.png" action="onMenuClose"/> 9 <menuitem text="关闭" tooltip="退出程序" icon="control/images/toolbar/right.png" action="onMenuClose"/>
10 </menu> 10 </menu>
11 <menu text="设置"> 11 <menu text="设置">
12 <menuitem text="规则集选择" tooltip="检查规则集选择" icon="control/images/add.png" action="onRuleSet"/>
12 <menu text="结果筛选"> 13 <menu text="结果筛选">
13 <menuitem text="按照类别筛选" tooltip="结果按缺陷类别排序" icon="control/images/email.png" action="onOrderType"/> 14 <menuitem text="按照类别筛选" tooltip="结果按缺陷类别排序" icon="control/images/email.png" action="onOrderType"/>
14 <menuitem text="按照级别筛选" tooltip="结果按缺陷等级排序" icon="control/images/email.png" action="onOrderLevel"/> 15 <menuitem text="按照级别筛选" tooltip="结果按缺陷等级排序" icon="control/images/email.png" action="onOrderLevel"/>
diff --git a/src/toolsconfig/settings.xml b/src/toolsconfig/settings.xml
deleted file mode 100644
index 77dd785..0000000
--- a/src/toolsconfig/settings.xml
+++ /dev/null
@@ -1,8 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?><settings>
2 <tool filePath="C:\\Users\\we-unite\\Desktop\\Project\\Project\\code\\cppcheck\\bin\\debug\\cppcheck.exe" para="--enable=all" toolName="cppcheck">
3 </tool>
4 <tool filePath="C:\\Users\\we-unite\\Desktop\\Project\\Project\\code\\flawfinder-2.0.19\\flawfinder-2.0.19\\flawfinder.py" para="" toolName="flawfinder">
5 </tool>
6 <tool filePath="clang-tidy.exe" para="-I C:\\Program Files\\LLVM\\lib\\clang\\17" toolName="clangTidy">
7 </tool>
8</settings> \ No newline at end of file
diff --git a/src/toolsconfig/tools.yaml b/src/toolsconfig/tools.yaml
new file mode 100644
index 0000000..0f9f013
--- /dev/null
+++ b/src/toolsconfig/tools.yaml
@@ -0,0 +1,11 @@
1clangTidy:
2 path: "clang-tidy.exe"
3 params: "-I C:\\Program Files\\LLVM\\lib\\clang\\17"
4
5cppcheck:
6 path: "C:\\Users\\we-unite\\Desktop\\Project\\Project\\code\\cppcheck\\bin\\debug\\cppcheck.exe"
7 params: "--enable=all"
8
9flawfinder:
10 path: "C:\\Users\\we-unite\\Desktop\\Project\\Project\\code\\flawfinder-2.0.19\\flawfinder-2.0.19\\flawfinder.py"
11 params: ""