Giter Site home page Giter Site logo

builder-generator-idea-plugin's People

Contributors

blindpirate avatar cstuht avatar mjedynak avatar mkickax avatar nexrx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

builder-generator-idea-plugin's Issues

Exception when trying to generate Builder in scratch file

java.lang.IllegalStateException: Cannot find module for class Input at pl.mjedynak.idea.plugins.builder.gui.CreateBuilderDialog.doOKAction(CreateBuilderDialog.java:269) at com.intellij.openapi.ui.DialogWrapper$OkAction.doAction(DialogWrapper.java:1861) at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1821) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6651) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) at java.desktop/java.awt.Component.processEvent(Component.java:6416) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:873) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:818) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:461) at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:693) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:460) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233) at java.desktop/java.awt.Dialog.show(Dialog.java:1063) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:707) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:432) at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1685) at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1644) at pl.mjedynak.idea.plugins.builder.gui.CreateBuilderDialog.show(CreateBuilderDialog.java:96) at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosers.showDialog(DisplayChoosers.java:78) at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosers.run(DisplayChoosers.java:47) at pl.mjedynak.idea.plugins.builder.action.handler.GenerateBuilderActionHandler.doActionWhenClassToGoIsNotFound(GenerateBuilderActionHandler.java:32) at pl.mjedynak.idea.plugins.builder.action.handler.AbstractBuilderActionHandler.forwardToSpecificAction(AbstractBuilderActionHandler.java:57) at pl.mjedynak.idea.plugins.builder.action.handler.AbstractBuilderActionHandler.execute(AbstractBuilderActionHandler.java:40) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doExecute(EditorActionHandler.java:178) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$4(EditorActionHandler.java:216) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:103) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:215) at com.intellij.openapi.editor.actionSystem.EditorAction.lambda$actionPerformed$0(EditorAction.java:102) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:178) at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:111) at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:86) at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:265) at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:282) at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:256) at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:200) at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:190) at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:184) at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:192) at com.intellij.ui.popup.AbstractPopup.lambda$dispose$13(AbstractPopup.java:1430) at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2425) at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:217) at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:169) at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:161) at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:58) at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1426) at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:162) at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:318) at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:278) at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:47) at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:43) at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:135) at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:104) at com.intellij.openapi.util.objectTree.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:194) at com.intellij.openapi.util.objectTree.ObjectNode.execute(ObjectNode.java:104) at com.intellij.openapi.util.objectTree.ObjectTree.executeAll(ObjectTree.java:142) at com.intellij.openapi.util.Disposer.dispose(Disposer.java:136) at com.intellij.openapi.util.Disposer.dispose(Disposer.java:132) at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:263) at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:453) at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:407) at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:348) at com.intellij.ui.popup.list.ListPopupImpl$1.actionPerformed(ListPopupImpl.java:261) at com.intellij.ui.popup.WizardPopup.proceedKeyEvent(WizardPopup.java:378) at com.intellij.ui.popup.WizardPopup.dispatch(WizardPopup.java:358) at com.intellij.ui.popup.PopupDispatcher.dispatchKeyEvent(PopupDispatcher.java:112) at com.intellij.ui.popup.PopupDispatcher.dispatch(PopupDispatcher.java:148) at com.intellij.ide.IdePopupManager.dispatch(IdePopupManager.java:93) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:763) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:461) at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:704) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:460) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Builder generation fails if fields are declared on one line

Consider a class Employee with two fields declared in one line. The builder generation fails in this scenario.

package com.company;

public class Employee
{
  private String firstName, lastName;

  public void setFirstName( String firstName )
  {
    this.firstName = firstName;
  }

  public void setLastName( String lastName )
  {
    this.lastName = lastName;
  }
}

The generated builder class is broken and looks like:

package com.company;

public final class EmployeeBuilder
{
  private String firstName
}

If the Employee class is changed as follows, the builder generation succeeds.

package com.company;

public class Employee
{
  private String firstName;
  private String lastName;

  public void setFirstName( String firstName )
  {
    this.firstName = firstName;
  }

  public void setLastName( String lastName )
  {
    this.lastName = lastName;
  }
}

Deadlock in plugin

Java-level deadlock has been detected

This means that some threads are blocked waiting to enter a synchronization block or
waiting to reenter a synchronization block after an Object.wait() call, where each thread
owns one monitor while trying to obtain another monitor already held by another thread.

Deadlock:

ApplicationImpl pooled thread 0 is waiting to lock java.awt.Component$AWTTreeLock@1caee107 which is held by AWT-EventQueue-0 11.1.3#IU-117.499, eap:true
AWT-EventQueue-0 11.1.3#IU-117.499, eap:true is waiting to lock java.lang.Object@1d37a147 which is held by ApplicationImpl pooled thread 0

Thread stacks

ApplicationImpl pooled thread 0 [BLOCKED; waiting to lock java.awt.Component$AWTTreeLock@1caee107]
java.awt.Component.setFont(Component.java:1874)
java.awt.Container.setFont(Container.java:1743)
javax.swing.JComponent.setFont(JComponent.java:2751)
javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:208)
javax.swing.plaf.basic.BasicLabelUI.installDefaults(BasicLabelUI.java:339)
javax.swing.plaf.basic.BasicLabelUI.installUI(BasicLabelUI.java:324)
javax.swing.JComponent.setUI(JComponent.java:664)
javax.swing.JLabel.setUI(JLabel.java:260)
javax.swing.JLabel.updateUI(JLabel.java:274)
javax.swing.JLabel.(JLabel.java:163)
javax.swing.JLabel.(JLabel.java:234)
javax.swing.DefaultListCellRenderer.(DefaultListCellRenderer.java:92)
pl.mjedynak.idea.plugins.builder.renderer.ActionCellRenderer.(ActionCellRenderer.java:9)
pl.mjedynak.idea.plugins.builder.factory.impl.PopupListFactoryImpl.(PopupListFactoryImpl.java:13)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(native method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:525)
org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220)
org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
org.picocontainer.defaults.DefaultPicoContainer.getComponentInstanceOfType(DefaultPicoContainer.java:383)
pl.mjedynak.idea.plugins.builder.action.GoToBuilderAction.(GoToBuilderAction.java:57)
java.lang.Class.forName0(native method)
java.lang.Class.forName(Class.java:264)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:242)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:220)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:213)
com.intellij.openapi.actionSystem.DefaultActionGroup.unstub(DefaultActionGroup.java:261)
com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:240)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1143)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1137)
com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:892)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1137)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1151)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1151)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1131)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.d(ActionManagerImpl.java:1120)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.access$200(ActionManagerImpl.java:66)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl$4.run(ActionManagerImpl.java:1106)
com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:434)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
java.util.concurrent.FutureTask.run(FutureTask.java:166)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:145)

AWT-EventQueue-0 11.1.3#IU-117.499, eap:true [BLOCKED; waiting to lock java.lang.Object@1d37a147]
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:218)
com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:213)
com.intellij.ide.navigationToolbar.NavBarRootPaneExtension.runToolbarExists(NavBarRootPaneExtension.java:79)
com.intellij.ide.navigationToolbar.NavBarBorder.getBorderInsets(NavBarBorder.java:50)
javax.swing.JComponent.getInsets(JComponent.java:1824)
javax.swing.JScrollPane.getViewportBorderBounds(JScrollPane.java:610)
javax.swing.plaf.basic.BasicScrollPaneUI.paint(BasicScrollPaneUI.java:105)
javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
javax.swing.JComponent.paintComponent(JComponent.java:778)
javax.swing.JComponent.paint(JComponent.java:1054)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JComponent.paintToOffscreen(JComponent.java:5228)
javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
javax.swing.RepaintManager.paint(RepaintManager.java:1206)
javax.swing.JComponent.paint(JComponent.java:1040)
java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
java.awt.Container.paint(Container.java:1967)
java.awt.Window.paint(Window.java:3877)
com.intellij.openapi.wm.impl.IdeFrameImpl.paint(IdeFrameImpl.java:427)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:781)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
javax.swing.RepaintManager.access$700(RepaintManager.java:59)
javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
java.awt.EventQueue.access$000(EventQueue.java:102)
java.awt.EventQueue$3.run(EventQueue.java:662)
java.awt.EventQueue$3.run(EventQueue.java:660)
java.security.AccessController.doPrivileged(native method)
java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:699)
com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:538)
com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:420)
com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:378)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

Requires constructor already present

A fairly minor niggle in an otherwise awesome project:

It seems as though the builder requires that a constructor already be present.

When trying to use the builder with a class without a constructor, the "wizard" doesn't list any fields to use.

This makes the workflow:

  • Create a class
  • Create a constructor with a set of fields
  • Create a builder.

It'd be great not have to perform step 2.

Feature Request: Add option to specify scope for Builder methods

In my projects I apply the package-by-feature strategy for grouping related classes.
By doing so the scope of a lot of public-methods can be reduced to package-private.

I would like to have an option to specify the scope for the new builder, where that scope will be applied to the Builder-class itself and it's methods.

Once this option is included it would be great to have a Preference available to specify the default setting for the scope-selector

[IDEA 2020.1 EAP] java.lang.NoClassDefFoundError pl.mjedynak.idea.plugins.builder.action.AbstractBuilderAction

com.intellij.diagnostic.PluginException: Could not initialize class pl.mjedynak.idea.plugins.builder.action.AbstractBuilderAction [Plugin: Builder Generator]
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.instantiate(ActionManagerImpl.java:201)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:171)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:527)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:515)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActions(ActionManagerImpl.java:1497)
	at com.intellij.openapi.actionSystem.impl.ActionPreloader.preload(ActionPreloader.java:15)
	at com.intellij.openapi.application.Preloader.lambda$null$1(Preloader.java:79)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:625)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:570)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151)
	at com.intellij.openapi.application.Preloader.lambda$null$2(Preloader.java:75)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:222)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:29)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.execute(BoundedTaskExecutor.java:201)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:210)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:190)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class pl.mjedynak.idea.plugins.builder.action.AbstractBuilderAction
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:398)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.instantiate(ActionManagerImpl.java:190)
	... 20 more

What is but method?

It seems useless.

Second question: do you have prototype builder? EntityBuilder that sets filelds in its constructor from Entity?

Collections: The built object gets a reference to the live collection in the builder

The generated builder is initialised with default, empty collections. When the object gets built, a live reference to that collection is passed to the built object. When that target object gets used and the collections on it is changed, that changes the state of the builder. When the builder is called again, it will build an object with collections containing the items added to the first target object! This is clearly not right.

The solution is simple: pass new collections to the target object.

public class ItemBuilder {
    private Set<Long> longs = new HashSet<>(0);

    private ItemBuilder() {
    }

    public static ItemBuilder aPriceLstItem() {
        return new ItemBuilder();
    }

    public ItemBuilder withLongs(Set<Long> longs) {
        this.longs = longs;
        return this;
    }

    public Item build() {
        Item item = new Item();
        item.setLongs(new HashSet<>(longs));  // Initialise a new Set
        return item;
    }
}

Handle boolean field

Hi,

Given a class as below, when "Generate Builder" wizard is shown, then no field are shown so the builder creation cannot continue.

public class Foo {

    private boolean isNamed;

    public void setNamed(boolean isNamed) {
        this.isNamed = isNamed;
    }
}

The trick here is that the setter is not named exactly as the boolean.

NPE when trying to generate builder for class that is not in the project module

For classes added as dependency to the project (not in the project's sources), NPE is thrown during builder generation:

Error during dispatching of java.awt.event.MouseEvent[MOUSE_RELEASED,(220,124),absolute(648,446),button=1,modifiers=Button1,clickCount=1] on dialog0
java.lang.NullPointerException
at com.intellij.ide.util.PackageUtil.findPossiblePackageDirectoryInModule(PackageUtil.java:56)
at pl.mjedynak.idea.plugins.builder.psi.impl.PsiHelperImpl.getDirectoryFromModuleAndPackageName(PsiHelperImpl.java:51)
at pl.mjedynak.idea.plugins.builder.gui.OKActionRunnable.run(OKActionRunnable.java:36)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:112)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:88)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:76)
at pl.mjedynak.idea.plugins.builder.gui.CreateBuilderDialog.doOKAction(CreateBuilderDialog.java:142)
at com.intellij.openapi.ui.DialogWrapper$OkAction.doAction(DialogWrapper.java:1478)
at com.intellij.openapi.ui.DialogWrapper$DialogWrapperAction.actionPerformed(DialogWrapper.java:1449)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:694)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:530)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:416)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:374)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:709)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:416)
at com.intellij.openapi.ui.DialogWrapper.showAndGetOk(DialogWrapper.java:1323)
at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1308)
at pl.mjedynak.idea.plugins.builder.gui.CreateBuilderDialog.show(CreateBuilderDialog.java:66)
at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosersRunnable.showDialog(DisplayChoosersRunnable.java:86)
at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosersRunnable.run(DisplayChoosersRunnable.java:60)

Builder passes constructor arguments in the wrong order

The generated builder seems to pass constructor arguments in the order in which the fields appear as class members, rather than the order in which they appear as constructor parameters.

As a simple example, given

public class Person {
    private final int age;
    private final String name;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

The plugin generates

public final class PersonBuilder {
    // ...
    public Person build() {
        Person person = new Person(age, name);
        return person;
    }
}

Versions:
IntelliJ IDEA 2017.1.4
Build #IC-171.4694.23, built on June 6, 2017
JRE: 1.8.0_112-release-736-b21 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.5
Builder Generator 1.1.4

Add but() to builder class which returns a new builder with the current builder values

This is very useful when you have a common base builder. An example can be found in Nat Pryce blog (search for 'but()'): http://www.natpryce.com/articles/000769.html

Scenario:
Let's say I have User class with gender and country fields. If I would like to create a user from Italy BUT a male and a user from Italy BUT a female. This can be achieved by creating a builder withCountry(Italy) and in one time but().withGender(MALE) and another but().withGender(FEMALE).

Example for but() in UserBuilder with 2 fields (country and gender):

public class UserBuilder {
  private Country country;
  private Gender gender;

  private UserBuilder() {
  }

  public static UserBuilder aUser() {
    return new UserBuilder();
  }

  public UserBuilder withCounter(Country country) {
    this.country = country;
    return this;
  }

  public UserBuilder withGender(Gender gender) {
    this.gender = gender;
    return this;
  }

  public UserBuilder but() {
    return aUser().withCountry(country).withGender(gender);
  }

  public User build() {
    User user = new User(country, gender);
    return user;
  }
}

NoClassDefFoundError AbstractBuilderAction

Intellij Version: 2020.1 EAP
The plugin was working several versions ago.

com.intellij.diagnostic.PluginException: pl.mjedynak.idea.plugins.builder.action.AbstractBuilderAction [Plugin: Builder Generator] at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.instantiate(ActionManagerImpl.java:201) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:171) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:527) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:515) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActions(ActionManagerImpl.java:1481) at com.intellij.openapi.actionSystem.impl.ActionPreloader.preload(ActionPreloader.java:15) at com.intellij.openapi.application.Preloader.lambda$null$1(Preloader.java:79) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:625) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:570) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151) at com.intellij.openapi.application.Preloader.lambda$null$2(Preloader.java:75) at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:223) at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30) at com.intellij.util.concurrency.BoundedTaskExecutor$1.execute(BoundedTaskExecutor.java:202) at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:210) at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:191) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: pl.mjedynak.idea.plugins.builder.action.AbstractBuilderAction at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.instantiate(ActionManagerImpl.java:190) ... 20 more

An Exception in version 1.1.7

Version 1.1.7.

I've found this exception in "IDE fatal errors" dialog.

java.lang.Throwable: null topic; dialog=class pl.mjedynak.idea.plugins.builder.gui.CreateBuilderDialog; action=class com.intellij.openapi.ui.DialogWrapper$HelpAction
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
	at com.intellij.openapi.ui.DialogWrapper.doHelpAction(DialogWrapper.java:1535)
	at com.intellij.openapi.ui.DialogWrapper$HelpAction.actionPerformed(DialogWrapper.java:1936)
	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.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
	at java.awt.Component.processMouseEvent(Component.java:6550)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
	at java.awt.Component.processEvent(Component.java:6315)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4899)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4721)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
	at java.awt.Container.dispatchEventImpl(Container.java:2283)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4721)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
	at java.awt.EventQueue.access$500(EventQueue.java:98)
	at java.awt.EventQueue$3.run(EventQueue.java:715)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:739)
	at java.awt.EventQueue$4.run(EventQueue.java:737)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:741)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:686)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:385)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.awt.Dialog.show(Dialog.java:1077)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:688)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:427)
	at com.intellij.openapi.ui.DialogWrapper.invokeShow(DialogWrapper.java:1682)
	at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1631)
	at pl.mjedynak.idea.plugins.builder.gui.CreateBuilderDialog.show(CreateBuilderDialog.java:96)
	at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosers.showDialog(DisplayChoosers.java:78)
	at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosers.run(DisplayChoosers.java:47)
	at pl.mjedynak.idea.plugins.builder.action.handler.GenerateBuilderActionHandler.doActionWhenClassToGoIsNotFound(GenerateBuilderActionHandler.java:32)
	at pl.mjedynak.idea.plugins.builder.action.handler.AbstractBuilderActionHandler.forwardToSpecificAction(AbstractBuilderActionHandler.java:57)
	at pl.mjedynak.idea.plugins.builder.action.handler.AbstractBuilderActionHandler.execute(AbstractBuilderActionHandler.java:40)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doExecute(EditorActionHandler.java:178)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$4(EditorActionHandler.java:216)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:103)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:215)
	at com.intellij.openapi.editor.actionSystem.EditorAction.lambda$actionPerformed$0(EditorAction.java:102)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:178)
	at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:111)
	at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:86)
	at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:261)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:278)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:252)
	at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:200)
	at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:190)
	at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:184)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:195)
	at com.intellij.ui.popup.AbstractPopup.lambda$dispose$13(AbstractPopup.java:1416)
	at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:3080)
	at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:159)
	at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:111)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:179)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.doWhenFocusSettlesDown(IdeFocusManagerImpl.java:58)
	at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1412)
	at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:160)
	at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:306)
	at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:279)
	at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:48)
	at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:44)
	at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:136)
	at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:105)
	at com.intellij.openapi.util.objectTree.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:214)
	at com.intellij.openapi.util.objectTree.ObjectNode.execute(ObjectNode.java:105)
	at com.intellij.openapi.util.objectTree.ObjectTree.executeAll(ObjectTree.java:162)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:129)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:125)
	at com.intellij.ui.popup.WizardPopup.disposeAllParents(WizardPopup.java:263)
	at com.intellij.ui.popup.list.ListPopupImpl.handleNextStep(ListPopupImpl.java:442)
	at com.intellij.ui.popup.list.ListPopupImpl._handleSelect(ListPopupImpl.java:395)
	at com.intellij.ui.popup.list.ListPopupImpl.handleSelect(ListPopupImpl.java:336)
	at com.intellij.ui.popup.list.ListPopupImpl$1.actionPerformed(ListPopupImpl.java:249)
	at com.intellij.ui.popup.WizardPopup.proceedKeyEvent(WizardPopup.java:378)
	at com.intellij.ui.popup.WizardPopup.dispatch(WizardPopup.java:358)
	at com.intellij.ui.popup.PopupDispatcher.dispatchKeyEvent(PopupDispatcher.java:114)
	at com.intellij.ui.popup.PopupDispatcher.dispatch(PopupDispatcher.java:150)
	at com.intellij.ide.IdePopupManager.dispatch(IdePopupManager.java:86)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:641)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:385)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	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)

Generate not lowercase Method names when Method Prefix is empty

When I generate new Builder Class, and set Method Prefix to '' (empty text) in dialog box, then all my method names are lowercase. Example:

public class User {
     private String userName;
     // ...
     public void setUserName(String userName) { ... }

generate me:

public class UserBuilder {
     private String userName;
     // ...
     public UserBuilder username(String userName) {
          // ...
     }

where method name should be: userName

Fields not found if a prefix is used in Code Style configuration

We use a prefix for our class members (m_). Unfortunatly, the plugin is unable to found class member.

I found the problem in pl.mjedynak.idea.plugins.builder.verifier.PsiFieldVerifier#methodIsSetterWithProperName() : method.getName().equals(SET_PREFIX + WordUtils.capitalize(psiField.getName()))
In our case, method.getName() returns setFoo, and the builded name is setm_Foo.

I've found that we could get the prefix used in Code Style configuration with CodeStyleSettingsManager.getInstance().getCurrentSettings().FIELD_NAME_PREFIX;

Maybe you could patch the plugin in a future release.
Thanks

The plugin cannot be run with Java 6

Hi, I'm running Intellij 12.1.4 and the plugin throws following exception at startup. It seems like it was compiled with Java 7 and since Intellij 12 runs on java 6, the plugin cannot be loaded.

cannot create class "pl.mjedynak.idea.plugins.builder.action.GoToBuilderAction" [Plugin: Builder Generator]: cannot create class "pl.mjedynak.idea.plugins.builder.action.GoToBuilderAction" [Plugin: Builder Generator]
com.intellij.diagnostic.PluginException: cannot create class "pl.mjedynak.idea.plugins.builder.action.GoToBuilderAction" [Plugin: Builder Generator]
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:265)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:218)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:211)
    at com.intellij.openapi.actionSystem.DefaultActionGroup.unstub(DefaultActionGroup.java:279)
    at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:247)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1135)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1129)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:961)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1129)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1143)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1143)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1123)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.c(ActionManagerImpl.java:1112)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.access$200(ActionManagerImpl.java:67)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$4.run(ActionManagerImpl.java:1096)
    at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:454)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)
    at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:152)
Caused by: com.intellij.diagnostic.PluginException: pl/mjedynak/idea/plugins/builder/action/GoToBuilderAction : Unsupported major.minor version 51.0 [Plugin: Builder Generator]
    at com.intellij.ide.plugins.cl.PluginClassLoader.d(PluginClassLoader.java:108)
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:63)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:249)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:240)
    ... 22 more
Caused by: java.lang.UnsupportedClassVersionError: pl/mjedynak/idea/plugins/builder/action/GoToBuilderAction : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
    at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:153)
    at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:149)
    at com.intellij.util.lang.UrlClassLoader._findClass(UrlClassLoader.java:125)
    at com.intellij.ide.plugins.cl.PluginClassLoader.d(PluginClassLoader.java:102)
    ... 27 more

[Feature] Add support for Kotlin

Kotlin data classes are great but default parameters quickly diminish the ability for the object to be consumed by Java in an idiomatic fashion.

data class MyObject(val name: String, val age: Int = 0)

class MyObjectBuilder() {
    private lateinit var name: String
    private var age: Int = 0

    fun withName(val name: String) = this.name = name
    fun withAge(val age: Int) = this.age = age
    fun build() = MyObject(name, age)
 }

For non-nullable fields could store them as null in the builder with added validation or just rely on lateinit validation to throw when the property is read during build.

Plugin does not always recognize boolean fields

I have some boolean fields whose getters are generated by IDEA's default template and whose names start with is instead of get. When generating a builder with the options Inner builder, 'but' method, and Use single field all enabled, the plugin does not show those fields in the field-selection dialog.

The plugin shows those fields in the field-selection dialog if I disable the option 'but' method, while still having the other two options enabled. My plugin version is 1.1.7.

Question about license of this project

I wish to use some of code from this project in my idea plugin, however I can't found any information about your project license.

Could you give me information about project license, please?

Thank you very much.

Deadlock on startup

Version 1.0.10.
IJ 14 EAP

"ApplicationImpl pooled thread 6" prio=0 tid=0x0 nid=0x0 blocked
     java.lang.Thread.State: BLOCKED
 on java.awt.Component$AWTTreeLock@3b16ec7c owned by "AWT-EventQueue-0 14.0#IU-138.1503.3, eap:true" Id=24
    at java.awt.Component.setFont(Component.java:1874)
    at java.awt.Container.setFont(Container.java:1743)
    at javax.swing.JComponent.setFont(JComponent.java:2750)
    at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:208)
    at javax.swing.plaf.basic.BasicLabelUI.installDefaults(BasicLabelUI.java:339)
    at javax.swing.plaf.basic.BasicLabelUI.installUI(BasicLabelUI.java:324)
    at javax.swing.JComponent.setUI(JComponent.java:664)
    at javax.swing.JLabel.setUI(JLabel.java:260)
    at javax.swing.JLabel.updateUI(JLabel.java:274)
    at javax.swing.JLabel.<init>(JLabel.java:163)
    at javax.swing.JLabel.<init>(JLabel.java:234)
    at javax.swing.DefaultListCellRenderer.<init>(DefaultListCellRenderer.java:92)
    at pl.mjedynak.idea.plugins.builder.renderer.ActionCellRenderer.<init>(ActionCellRenderer.java:9)
    at pl.mjedynak.idea.plugins.builder.factory.PopupListFactory.<init>(PopupListFactory.java:12)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220)
    at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
    at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
    at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
    at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
    at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
    at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
    at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
    at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
    at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
    at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
    at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
    at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstanceOfType(DefaultPicoContainer.java:383)
    at pl.mjedynak.idea.plugins.builder.action.GoToBuilderAction.<clinit>(GoToBuilderAction.java:57)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:262)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:239)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:232)
    at com.intellij.openapi.actionSystem.DefaultActionGroup.unStub(DefaultActionGroup.java:354)
    at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:312)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1261)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1254)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:964)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1254)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1269)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:1269)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1248)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.c(ActionManagerImpl.java:1236)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.access$200(ActionManagerImpl.java:73)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$4.run(ActionManagerImpl.java:1220)
    at com.intellij.openapi.application.impl.ApplicationImpl$9.run(ApplicationImpl.java:446)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
    at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:149)

Plugin does not work anymore with IntelliJ 2018.2 Update

Since the IntelliJ Update 2018.2 the Builder Generator Plugin does throw Exceptions during startup...

com.intellij.diagnostic.PluginException:  [Plugin: Builder Generator]
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:144)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:458)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:446)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActions(ActionManagerImpl.java:1260)
	at com.intellij.openapi.actionSystem.impl.ActionPreloader.preload(ActionPreloader.java:32)
	at com.intellij.openapi.application.Preloader.lambda$null$0(Preloader.java:74)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:85)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
	at com.intellij.openapi.application.Preloader.lambda$initComponent$1(Preloader.java:72)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:226)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$100(BoundedTaskExecutor.java:26)
	at com.intellij.util.concurrency.BoundedTaskExecutor$2$1.run(BoundedTaskExecutor.java:199)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:229)
	at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:193)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ExceptionInInitializerError
	at org.codehaus.groovy.reflection.ClassInfo.isValidWeakMetaClass(ClassInfo.java:271)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClassForClass(ClassInfo.java:241)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:297)
	at pl.mjedynak.idea.plugins.builder.settings.CodeStyleSettings.$getStaticMetaClass(CodeStyleSettings.groovy)
	at pl.mjedynak.idea.plugins.builder.settings.CodeStyleSettings.<init>(CodeStyleSettings.groovy)
	at pl.mjedynak.idea.plugins.builder.verifier.PsiFieldVerifier.<init>(PsiFieldVerifier.java:20)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
	at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
	at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
	at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
	at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
	at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
	at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstanceOfType(DefaultPicoContainer.java:383)
	at pl.mjedynak.idea.plugins.builder.action.GoToBuilderAction.<clinit>(GoToBuilderAction.java:14)
	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:140)
	... 19 more
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.4.12 and you are trying to load version 2.4.15
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl$DefaultModuleListener.onModule(MetaClassRegistryImpl.java:513)
	at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanExtensionModuleFromProperties(ExtensionModuleScanner.java:80)
	at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanExtensionModuleFromMetaInf(ExtensionModuleScanner.java:74)
	at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanClasspathModules(ExtensionModuleScanner.java:56)
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:113)
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:74)
	at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
	... 71 more

Following exceptions happened soon after this one, most probably they are induced.


2018-08-08T09:45:48.087
com.intellij.diagnostic.PluginException: Could not initialize class groovy.lang.GroovySystem [Plugin: Builder Generator]
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:144)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:458)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:446)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActions(ActionManagerImpl.java:1260)
	at com.intellij.openapi.actionSystem.impl.ActionPreloader.preload(ActionPreloader.java:32)
	at com.intellij.openapi.application.Preloader.lambda$null$0(Preloader.java:74)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:85)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
	at com.intellij.openapi.application.Preloader.lambda$initComponent$1(Preloader.java:72)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:226)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$100(BoundedTaskExecutor.java:26)
	at com.intellij.util.concurrency.BoundedTaskExecutor$2$1.run(BoundedTaskExecutor.java:199)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:229)
	at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:193)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class groovy.lang.GroovySystem
	at org.codehaus.groovy.reflection.ClassInfo.isValidWeakMetaClass(ClassInfo.java:271)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClassForClass(ClassInfo.java:241)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:297)
	at pl.mjedynak.idea.plugins.builder.settings.CodeStyleSettings.$getStaticMetaClass(CodeStyleSettings.groovy)
	at pl.mjedynak.idea.plugins.builder.settings.CodeStyleSettings.<init>(CodeStyleSettings.groovy)
	at pl.mjedynak.idea.plugins.builder.verifier.PsiFieldVerifier.<init>(PsiFieldVerifier.java:20)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
	at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
	at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
	at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
	at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:375)
	at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
	at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
	at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
	at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
	at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
	at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
	at org.picocontainer.defaults.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:395)
	at org.picocontainer.defaults.DefaultPicoContainer.getComponentInstanceOfType(DefaultPicoContainer.java:383)
	at pl.mjedynak.idea.plugins.builder.action.GenerateBuilderAction.<clinit>(GenerateBuilderAction.java:14)
	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:140)
	... 19 more

Do not ignore field prefix

My code style is every private fields' name start with the letter "m". But the plugin cannot ignore it.

Supporting Constructor Parameters

Very nice plugin. I really like it.
Usually I prefer to have my fields final. Therefore I use a constructor to initialize the fields. I'd love to create builders for those objects, too.

Problems with inner classes

Problem
I have an interface, there is inner class in the interface. If I try to generate builder for inner class, plugin tries to generate Builder for interface, not inner class, what is wrong.

Is it possible to choose target class for builder?

Optional comments

I love this plugin, but please add option for disabling comments generation :)

Missing source root on Maven project

Trying to generate a builder for a class within a module that has been imported from a Maven pom.

Your plugin tells me, that there are no source roots configured for the parent module (which is correct).
I think the plugin tries to generate the java classes within the wrong module...

After canceling several dialogs I get this exception:

I got this exception:

Original exception: Argument 0 for @NotNull parameter of com/intellij/psi/impl/file/JavaDirectoryServiceImpl.createClass must not be null
java.lang.IllegalArgumentException: Argument 0 for @NotNull parameter of com/intellij/psi/impl/file/JavaDirectoryServiceImpl.createClass must not be null
at com.intellij.psi.impl.file.JavaDirectoryServiceImpl.createClass(JavaDirectoryServiceImpl.java)
at pl.mjedynak.idea.plugins.builder.psi.impl.BuilderPsiClassBuilderImpl.aBuilder(BuilderPsiClassBuilderImpl.java:59)
at pl.mjedynak.idea.plugins.builder.writer.BuilderWriterComputable.getBuilderPsiClass(BuilderWriterComputable.java:57)
at pl.mjedynak.idea.plugins.builder.writer.BuilderWriterComputable.createBuilder(BuilderWriterComputable.java:46)
at pl.mjedynak.idea.plugins.builder.writer.BuilderWriterComputable.compute(BuilderWriterComputable.java:40)
at pl.mjedynak.idea.plugins.builder.writer.BuilderWriterComputable.compute(BuilderWriterComputable.java:15)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:896)
at pl.mjedynak.idea.plugins.builder.writer.BuilderWriterRunnable.run(BuilderWriterRunnable.java:38)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:112)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:88)
at com.intellij.openapi.command.impl.CommandProcessorImpl.executeCommand(CommandProcessorImpl.java:76)
at pl.mjedynak.idea.plugins.builder.writer.impl.BuilderWriterImpl.writeBuilder(BuilderWriterImpl.java:30)
at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosersRunnable.writeBuilderIfNecessary(DisplayChoosersRunnable.java:79)
at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosersRunnable.run(DisplayChoosersRunnable.java:71)
at com.intellij.ui.popup.AbstractPopup$16.run(AbstractPopup.java:1134)
at com.intellij.openapi.wm.impl.FocusManagerImpl.flushRequest(FocusManagerImpl.java:611)
at com.intellij.openapi.wm.impl.FocusManagerImpl.flushNow(FocusManagerImpl.java:592)
at com.intellij.openapi.wm.impl.FocusManagerImpl.flushIdleRequests(FocusManagerImpl.java:562)
at com.intellij.openapi.wm.impl.FocusManagerImpl.access$200(FocusManagerImpl.java:52)
at com.intellij.openapi.wm.impl.FocusManagerImpl$7.run(FocusManagerImpl.java:461)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:1699)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:439)
at com.intellij.ide.impl.DataManagerImpl.getDataContextFromFocus(DataManagerImpl.java:212)
at com.intellij.ide.navigationToolbar.NavBarUpdateQueue$3.run(NavBarUpdateQueue.java:78)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:308)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:298)
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:243)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:1699)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:255)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:217)
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:207)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:694)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:534)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:416)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:374)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Generation throws exception in IntelliJ 2017

Assertion failed: Member Chooser should be shown in a transaction, see AnAction#startInTransaction
java.lang.Throwable
	at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:168)
	at com.intellij.ide.util.MemberChooser.show(MemberChooser.java:690)
	at pl.mjedynak.idea.plugins.builder.action.handler.DisplayChoosersRunnable.run(DisplayChoosersRunnable.java:55)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:193)
	at com.intellij.ui.popup.AbstractPopup.lambda$null$7(AbstractPopup.java:1396)

Plugin not working

With intellij ultimate 2020.1.3 built on july 7 the plugin is not working with no logs generated (using inner class option, didn't try the others)

custom builder create method name

now it seems to me that the create method name of the builder is 'a'+ orginal class name.
if we can customize it such as create, it would be better

Builder fails to compile if object has a property with the same name as the class name

If you have a class that has a field which is the same name as the class name the generated builder class fails to compile.
For example:

public class Test {
    private String test;

    public String getTest() {
        return test;
    }

    public void setTest(final String test) {
        this.test = test;
    }
}

Generates

public final class TestBuilder {
    private String test;

    private TestBuilder() {
    }

    public static TestBuilder aTest() {
        return new TestBuilder();
    }

    public Test build() {
        Test test = new Test();
        test.setTest(test);
        return test;
    }

    public TestBuilder withTest(String test) {
        this.test = test;
        return this;
    }
}

The issue is in the build() method, the local variable created for the object has the same name as the private property above.
Perhaps that local variable could be given a different name if there's going to be a clash?

Regenerate a builder

It would be nice to have a 'Regenerate builder' action, to avoid deleting the builder and recreate it.

Create a new Builder from one existing class

I found this useful to me.

A static builder method, which can be created from an existing class. Here is an example builder class for Token with field "lemma", and "id".


   public static TokenBuilder aToken(Token t) {
        return aToken().withLemma(t.getLemma()).withId(t.getId())
    }

This might require the original class have standard getter methods.

Usage instructions requires unmodified keymap

From the plugin page at plugins.jetbrains.com I read that the plugin is invoked by pressing ALT+SHIFT+B inside a class.

However, that key combination is mapped to something else on my system, a Mac ("open task").

Is there another way to invoke the plugin?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.