diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java index 8b30b996bfe2..b8389a2f4fa9 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java @@ -187,18 +187,19 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper MemberOrderService service = ServiceManager.getService(MemberOrderService.class); PsiElement anchor = service.getAnchor(member, settings.getCommonSettings(JavaLanguage.INSTANCE), aClass); - if (anchor != null && PsiTreeUtil.skipSiblingsForward(anchor, PsiWhiteSpace.class) == aClass.getRBrace()) { - // Given member should be inserted as the last child. - return aClass.getRBrace(); + PsiElement newAnchor = skipWhitespaces(aClass, anchor); + if (newAnchor != null) { + return newAnchor; } - + if (anchor != null && anchor != aClass) { anchor = anchor.getNextSibling(); while (anchor instanceof PsiJavaToken && (anchor.getText().equals(",") || anchor.getText().equals(";"))) { anchor = anchor.getNextSibling(); } if (anchor != null) { - return anchor; + newAnchor = skipWhitespaces(aClass, anchor); + return newAnchor != null ? newAnchor : anchor; } } @@ -215,7 +216,15 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper return aClass.getRBrace(); } - + + private static PsiElement skipWhitespaces(PsiClass aClass, PsiElement anchor) { + if (anchor != null && PsiTreeUtil.skipSiblingsForward(anchor, PsiWhiteSpace.class) == aClass.getRBrace()) { + // Given member should be inserted as the last child. + return aClass.getRBrace(); + } + return null; + } + // TODO remove as soon as an arrangement sub-system is provided for groovy. public static int getMemberOrderWeight(PsiElement member, CodeStyleSettings settings) { if (member instanceof PsiField) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterIncompleteEnum1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterIncompleteEnum1.java new file mode 100644 index 000000000000..7abef7964c58 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/afterIncompleteEnum1.java @@ -0,0 +1,8 @@ +// "Create Constructor" "true" +public enum ReportType { + AGING("Aging"),; + + ReportType(String aging) { + //To change body of created methods use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeIncompleteEnum1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeIncompleteEnum1.java new file mode 100644 index 000000000000..6b67821d00ce --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorFromCall/beforeIncompleteEnum1.java @@ -0,0 +1,4 @@ +// "Create Constructor" "true" +public enum ReportType { + AGING("Aging"), +} \ No newline at end of file