如何在 Android Studio 中检查代码指标(代码行数、死代码行数、圈复杂度等)
How to check metrics of code (Lines of Code, Lines of Dead Code, Cyclomatic Complexity, ...) in Android Studio
我在 Android Studio 中计算代码指标时遇到一些问题。我发现 Metrics Reloaded,但我的 Android Studio 无法使用它们(加载此插件时它总是向我显示错误)。
在 Google 搜索中,我没有找到任何不同的插件或类似的东西。还有什么或者有人知道哪里可能有错误吗?
错误:
class with name 'com.sixrr.metrics.plugin.ProjectMetricsAction' cannot
be loaded [Plugin: MetricsReloaded]
com.intellij.diagnostic.PluginException: class with name
'com.sixrr.metrics.plugin.ProjectMetricsAction' cannot be loaded
[Plugin: MetricsReloaded] at
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.error(ActionManagerImpl.java:186)
at
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:151)
at
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:481)
at
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:469)
at
com.intellij.openapi.actionSystem.DefaultActionGroup.unStub(DefaultActionGroup.java:347)
at
com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:305)
at
com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:188)
at
com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:153)
at
com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:228)
at
com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:153)
at
com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:228)
at
com.intellij.openapi.actionSystem.impl.Utils.fillMenu(Utils.java:365)
at
com.intellij.openapi.actionSystem.impl.ActionMenu.fillMenu(ActionMenu.java:315)
at
com.intellij.openapi.actionSystem.impl.ActionMenu.access0(ActionMenu.java:41)
at
com.intellij.openapi.actionSystem.impl.ActionMenu$MenuListenerImpl.menuSelected(ActionMenu.java:271)
at javax.swing.JMenu.fireMenuSelected(JMenu.java:1038) at
javax.swing.JMenu$MenuChangeListener.stateChanged(JMenu.java:1118) at
javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.java:349)
at
javax.swing.DefaultButtonModel.setSelected(DefaultButtonModel.java:232)
at javax.swing.JMenu.setSelected(JMenu.java:305) at
javax.swing.JMenu.menuSelectionChanged(JMenu.java:1187) at
com.intellij.openapi.actionSystem.impl.ActionMenu.menuSelectionChanged(ActionMenu.java:235)
at
javax.swing.MenuSelectionManager.setSelectedPath(MenuSelectionManager.java:125)
at
javax.swing.plaf.basic.BasicMenuUI$Handler.mouseEntered(BasicMenuUI.java:526)
at java.awt.Component.processMouseEvent(Component.java:6557) at
javax.swing.JComponent.processMouseEvent(JComponent.java:3325) at
java.awt.Component.processEvent(Component.java:6313) at
java.awt.Container.processEvent(Container.java:2237) at
java.awt.Component.dispatchEventImpl(Component.java:4903) at
java.awt.Container.dispatchEventImpl(Container.java:2295) at
java.awt.Component.dispatchEvent(Component.java:4725) at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at
java.awt.LightweightDispatcher.retargetMouseEnterExit(Container.java:4677)
at
java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:4655)
at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:4506)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281) at
java.awt.Window.dispatchEventImpl(Window.java:2746) at
java.awt.Component.dispatchEvent(Component.java:4725) at
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at
java.awt.EventQueue.access0(EventQueue.java:98) at
java.awt.EventQueue.run(EventQueue.java:715) at
java.awt.EventQueue.run(EventQueue.java:709) at
java.security.AccessController.doPrivileged(Native Method) at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue.run(EventQueue.java:737) at
java.awt.EventQueue.run(EventQueue.java:735) at
java.security.AccessController.doPrivileged(Native Method) at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at
com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:822)
at
com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:759)
at
com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.NoClassDefFoundError:
com/sixrr/metrics/MetricsResultsHolder at
java.lang.Class.forName0(Native Method) at
java.lang.Class.forName(Class.java:348) at
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:144)
... 58 more Caused by: java.lang.ClassNotFoundException:
com.sixrr.metrics.MetricsResultsHolder
PluginClassLoader[MetricsReloaded, 1.8]
com.intellij.ide.plugins.cl.PluginClassLoader@76fcea6b at
com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:63)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 61 more
您也可以尝试安装 Jetbrains Statistics 插件,如本回答中所述:
Count lines of code in all java classes in Android Studio
我在 Android Studio 中计算代码指标时遇到一些问题。我发现 Metrics Reloaded,但我的 Android Studio 无法使用它们(加载此插件时它总是向我显示错误)。
在 Google 搜索中,我没有找到任何不同的插件或类似的东西。还有什么或者有人知道哪里可能有错误吗?
错误:
class with name 'com.sixrr.metrics.plugin.ProjectMetricsAction' cannot be loaded [Plugin: MetricsReloaded] com.intellij.diagnostic.PluginException: class with name 'com.sixrr.metrics.plugin.ProjectMetricsAction' cannot be loaded [Plugin: MetricsReloaded] at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.error(ActionManagerImpl.java:186) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:151) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:481) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:469) at com.intellij.openapi.actionSystem.DefaultActionGroup.unStub(DefaultActionGroup.java:347) at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:305) at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:188) at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:153) at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:228) at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:153) at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:228) at com.intellij.openapi.actionSystem.impl.Utils.fillMenu(Utils.java:365) at com.intellij.openapi.actionSystem.impl.ActionMenu.fillMenu(ActionMenu.java:315) at com.intellij.openapi.actionSystem.impl.ActionMenu.access0(ActionMenu.java:41) at com.intellij.openapi.actionSystem.impl.ActionMenu$MenuListenerImpl.menuSelected(ActionMenu.java:271) at javax.swing.JMenu.fireMenuSelected(JMenu.java:1038) at javax.swing.JMenu$MenuChangeListener.stateChanged(JMenu.java:1118) at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.java:349) at javax.swing.DefaultButtonModel.setSelected(DefaultButtonModel.java:232) at javax.swing.JMenu.setSelected(JMenu.java:305) at javax.swing.JMenu.menuSelectionChanged(JMenu.java:1187) at com.intellij.openapi.actionSystem.impl.ActionMenu.menuSelectionChanged(ActionMenu.java:235) at javax.swing.MenuSelectionManager.setSelectedPath(MenuSelectionManager.java:125) at javax.swing.plaf.basic.BasicMenuUI$Handler.mouseEntered(BasicMenuUI.java:526) at java.awt.Component.processMouseEvent(Component.java:6557) at javax.swing.JComponent.processMouseEvent(JComponent.java:3325) at java.awt.Component.processEvent(Component.java:6313) at java.awt.Container.processEvent(Container.java:2237) at java.awt.Component.dispatchEventImpl(Component.java:4903) at java.awt.Container.dispatchEventImpl(Container.java:2295) at java.awt.Component.dispatchEvent(Component.java:4725) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889) at java.awt.LightweightDispatcher.retargetMouseEnterExit(Container.java:4677) at java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:4655) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4506) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467) at java.awt.Container.dispatchEventImpl(Container.java:2281) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4725) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at java.awt.EventQueue.access0(EventQueue.java:98) at java.awt.EventQueue.run(EventQueue.java:715) at java.awt.EventQueue.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue.run(EventQueue.java:737) at java.awt.EventQueue.run(EventQueue.java:735) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:822) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:759) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.NoClassDefFoundError: com/sixrr/metrics/MetricsResultsHolder at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:144) ... 58 more Caused by: java.lang.ClassNotFoundException: com.sixrr.metrics.MetricsResultsHolder PluginClassLoader[MetricsReloaded, 1.8] com.intellij.ide.plugins.cl.PluginClassLoader@76fcea6b at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:63) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 61 more
您也可以尝试安装 Jetbrains Statistics 插件,如本回答中所述: Count lines of code in all java classes in Android Studio