diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java index 2e1bad933cc9..43bfa7c30a56 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java @@ -68,8 +68,10 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor { init(child); mySettings = settings; - if (myChild1.getPsi().getLanguage() != StdLanguages.JAVA || - myChild2.getPsi().getLanguage() != StdLanguages.JAVA) { + final PsiElement myChild1Psi1 = myChild1.getPsi(); + final PsiElement myChild1Psi2 = myChild2.getPsi(); + if (myChild1Psi1 == null || myChild1Psi1.getLanguage() != StdLanguages.JAVA || + myChild1Psi2 == null || myChild1Psi2.getLanguage() != StdLanguages.JAVA) { return; } @@ -492,8 +494,8 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor { ElementType.IMPORT_STATEMENT_BASE_BIT_SET.contains(myChild2.getElementType())) { if (myImportHelper == null) myImportHelper = new ImportHelper(mySettings); int emptyLines = myImportHelper.getEmptyLinesBetween( - (PsiImportStatementBase)SourceTreeToPsiMap.treeElementToPsi(myChild1), - (PsiImportStatementBase)SourceTreeToPsiMap.treeElementToPsi(myChild2) + SourceTreeToPsiMap.treeToPsiNotNull(myChild1), + SourceTreeToPsiMap.treeToPsiNotNull(myChild2) ) + 1; myResult = Spacing.createSpacing(0, 0, emptyLines, mySettings.KEEP_LINE_BREAKS, @@ -1339,6 +1341,9 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor { else if (myChild2.getElementType() == JavaTokenType.LBRACKET || myChild2.getElementType() == JavaTokenType.RBRACKET) { createSpaceInCode(false); } + else if (type.getType() instanceof PsiDisjunctionType) { + createSpaceInCode(mySettings.SPACE_AROUND_BITWISE_OPERATORS); + } else { createSpaceInCode(true); } diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterSpaceTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterSpaceTest.java index 32cd1d0338f3..b09a1e229359 100644 --- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterSpaceTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterSpaceTest.java @@ -15,6 +15,9 @@ */ package com.intellij.psi.formatter.java; +import com.intellij.openapi.roots.LanguageLevelProjectExtension; +import com.intellij.pom.java.LanguageLevel; + /** * Is intended to hold specific java formatting tests for 'spacing' settings. * @@ -285,4 +288,18 @@ public class JavaFormatterSpaceTest extends AbstractJavaFormatterTest { "for (; ; )" ); } + + public void testSpacesInDisjunctiveType() throws Exception { + LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7); + getSettings().KEEP_SIMPLE_BLOCKS_IN_ONE_LINE = true; + getSettings().CATCH_ON_NEW_LINE = false; + + getSettings().SPACE_AROUND_BITWISE_OPERATORS = true; + doMethodTest("try { } catch (E1|E2 e) { }", + "try { } catch (E1 | E2 e) { }"); + + getSettings().SPACE_AROUND_BITWISE_OPERATORS = false; + doMethodTest("try { } catch (E1 | E2 e) { }", + "try { } catch (E1|E2 e) { }"); + } }