diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/JavaLineWrapPositionStrategy.java b/java/java-impl/src/com/intellij/psi/formatter/java/JavaLineWrapPositionStrategy.java index 16c6c4a38f8b..5f0023a7d7ed 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/JavaLineWrapPositionStrategy.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/JavaLineWrapPositionStrategy.java @@ -63,7 +63,14 @@ public class JavaLineWrapPositionStrategy extends DefaultLineWrapPositionStrateg searchEndOffset = Math.min(offset + 100, lineEndOffset); } - return CharArrayUtil.indexOf(sequence, tagStart, searchStartOffset, offset) > 0 - && CharArrayUtil.indexOf(sequence, tagEnd, offset, searchEndOffset) > 0; + CharSequence textChunkAroundOffset = sequence.subSequence(searchStartOffset, searchEndOffset); + int offsetInChunk = offset - searchStartOffset; + + int tagStartIndex = CharArrayUtil.lastIndexOf(textChunkAroundOffset, tagStart, offsetInChunk); + if (tagStartIndex > 0) { + int nearestTagEndIndex = CharArrayUtil.indexOf(textChunkAroundOffset, tagEnd, tagStartIndex); + return nearestTagEndIndex > offsetInChunk; + } + return false; } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaWrapOnTypingTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaWrapOnTypingTest.java new file mode 100644 index 000000000000..2472dfa5a97b --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaWrapOnTypingTest.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.psi.formatter.java; + +import com.intellij.ide.highlighter.JavaFileType; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; + +public class JavaWrapOnTypingTest extends LightCodeInsightFixtureTestCase { + + + public void testWrapInsideTags() { + myFixture.configureByText(JavaFileType.INSTANCE, + "public class Hw {\n" + + "\n" + + " /**\n" + + " * @return index for the given relative path. Never {@code null}, but returned index may not exist (in which case,\n" + + " *\n" + + " * {@link Index#exists()} returns {@code false}). If the index do not exist, it may or may not be read-only (see )\n" + + " */\n" + + " public static void test() {\n" + + " }\n" + + "}\n"); + + myFixture.getEditor().getSettings().setWrapWhenTypingReachesRightMargin(true); + + myFixture.type('{'); + myFixture.type('@'); + + myFixture.checkResult("public class Hw {\n" + + "\n" + + " /**\n" + + " * @return index for the given relative path. Never {@code null}, but returned index may not exist (in which case,\n" + + " *\n" + + " * {@link Index#exists()} returns {@code false}). If the index do not exist, it may or may not be read-only (see \n" + + " * {@})\n" + + " */\n" + + " public static void test() {\n" + + " }\n" + + "}\n"); + } +}