ml-in-programming / ArchitectureReloaded

Design defects detection plugin for IntelliJ IDEA. Based on BasLeijdekkers/MetricsReloaded plugin.
Other
8 stars 3 forks source link

NPE during applying refactoring #135

Closed RamSaw closed 6 years ago

RamSaw commented 6 years ago

How to reproduce: press refactor button for method which can't be moved like instance and must be converted to static, make it static in first dialog and then press cancel before actual refactoring applying. After that press refactor for this method again and you'll get this error.

Reason: method's signature can be changed during this conversion to static, MetricsReloaded is based on method's signatures and stores old signature of method before it became static. So MetricsReloaded cannot find this calculated metrics.

Solutions:

  1. Make "Cancel" button disabled.
  2. Submit logs only after closing refactorings results window. (the best, I think)
  3. Set special value for non existing metric: -1.

Error: null java.lang.NullPointerException at org.jetbrains.research.groups.ml_methods.refactoring.logging.RefactoringFeatures.extractMetricsResultsFor(RefactoringFeatures.java:131) at org.jetbrains.research.groups.ml_methods.refactoring.logging.MoveMethodRefactoringFeatures.<init>(MoveMethodRefactoringFeatures.java:50) at org.jetbrains.research.groups.ml_methods.refactoring.logging.RefactoringFeatures$1.visit(RefactoringFeatures.java:98) at org.jetbrains.research.groups.ml_methods.refactoring.logging.RefactoringFeatures$1.visit(RefactoringFeatures.java:95) at org.jetbrains.research.groups.ml_methods.algorithm.refactoring.MoveMethodRefactoring.accept(MoveMethodRefactoring.java:73) at org.jetbrains.research.groups.ml_methods.refactoring.logging.RefactoringFeatures.extractFeatures(RefactoringFeatures.java:95) at org.jetbrains.research.groups.ml_methods.refactoring.logging.RefactoringSessionInfo.lambda$new$0(RefactoringSessionInfo.java:39) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) at org.jetbrains.research.groups.ml_methods.refactoring.logging.RefactoringSessionInfo.<init>(RefactoringSessionInfo.java:40) at org.jetbrains.research.groups.ml_methods.ui.ClassRefactoringPanel.refactorSelected(ClassRefactoringPanel.java:181) at org.jetbrains.research.groups.ml_methods.ui.ClassRefactoringPanel.lambda$createButtonsPanel$5(ClassRefactoringPanel.java:158) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) 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$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:827) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:651) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365) 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)

RamSaw commented 6 years ago

Please, take a look carefully at refactorSelected() method in ClassRefactoringPanel class, when we gather rejected refactorings.

ujohnny commented 6 years ago

fixed in #138