From 0846f4aea626ffa31faab6a0a45d14cb3f864092 Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Fri, 29 May 2015 13:30:40 +0300 Subject: [PATCH] IDEA-119927 UI Designer - Create Listener - overridden method is placed on wrong place --- .../actions/CreateListenerAction.java | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateListenerAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateListenerAction.java index e5bff196ae72..6e112efeaea3 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateListenerAction.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateListenerAction.java @@ -21,7 +21,10 @@ import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.generation.OverrideImplementExploreUtil; import com.intellij.codeInsight.generation.OverrideImplementUtil; import com.intellij.ide.DataManager; -import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; @@ -40,7 +43,6 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.PsiUtilCore; import com.intellij.uiDesigner.FormEditingUtil; import com.intellij.uiDesigner.UIDesignerBundle; @@ -211,7 +213,7 @@ public class CreateListenerAction extends AbstractGuiEditorAction { PsiStatement stmt = factory.createStatementFromText(builder.toString(), constructor); stmt = (PsiStatement)body.addAfter(stmt, body.getLastBodyElement()); - JavaCodeStyleManager.getInstance(body.getProject()).shortenClassReferences(stmt); + stmt = (PsiStatement)JavaCodeStyleManager.getInstance(body.getProject()).shortenClassReferences(stmt); if (boundFields.length > 1) { PsiElement anchor = stmt; @@ -224,23 +226,32 @@ public class CreateListenerAction extends AbstractGuiEditorAction { } } - final Ref newClassRef = new Ref(); - stmt.accept(new JavaRecursiveElementWalkingVisitor() { - @Override - public void visitClass(PsiClass aClass) { - newClassRef.set(aClass); - } - }); - final PsiClass newClass = newClassRef.get(); - final SmartPsiElementPointer ptr = SmartPointerManager.getInstance(myClass.getProject()).createSmartPsiElementPointer(newClass); - final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(newClass); + final SmartPsiElementPointer ptr = SmartPointerManager.getInstance(myClass.getProject()).createSmartPsiElementPointer(stmt); + final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(myClass); final FileEditor[] fileEditors = - virtualFile != null ? FileEditorManager.getInstance(newClass.getProject()).openFile(virtualFile, true, true) : null; + virtualFile != null ? FileEditorManager.getInstance(myClass.getProject()).openFile(virtualFile, true, true) : null; IdeFocusManager.findInstance().doWhenFocusSettlesDown(new Runnable() { public void run() { - final PsiClass newClass = (PsiClass)ptr.getElement(); + final PsiElement anonymousClassStatement = ptr.getElement(); + if (anonymousClassStatement == null) { + return; + } + + final Ref newClassRef = new Ref(); + anonymousClassStatement.accept(new JavaRecursiveElementWalkingVisitor() { + @Override + public void visitClass(PsiClass aClass) { + newClassRef.set(aClass); + } + }); + final PsiClass newClass = newClassRef.get(); + final Editor editor = getEditor(); if (editor != null && newClass != null) { + PsiElement brace = newClass.getLBrace(); + if (brace != null) { + editor.getCaretModel().moveToOffset(brace.getTextOffset()); + } CommandProcessor.getInstance().executeCommand(myClass.getProject(), new Runnable() { public void run() { if (!OverrideImplementExploreUtil.getMethodSignaturesToImplement(newClass).isEmpty()) {