diff --git a/editor.bracesmatching/nbproject/project.xml b/editor.bracesmatching/nbproject/project.xml --- a/editor.bracesmatching/nbproject/project.xml +++ b/editor.bracesmatching/nbproject/project.xml @@ -105,6 +105,10 @@ unit + org.netbeans.insane + + + org.netbeans.libs.junit4 diff --git a/editor.bracesmatching/src/org/netbeans/spi/editor/bracesmatching/support/BracesMatcherSupport.java b/editor.bracesmatching/src/org/netbeans/spi/editor/bracesmatching/support/BracesMatcherSupport.java --- a/editor.bracesmatching/src/org/netbeans/spi/editor/bracesmatching/support/BracesMatcherSupport.java +++ b/editor.bracesmatching/src/org/netbeans/spi/editor/bracesmatching/support/BracesMatcherSupport.java @@ -276,6 +276,9 @@ if (MatcherContext.isTaskCanceled()) { return -1; } + if (text.array[text.offset + i] == '"') { + return -1; + } if (origin == text.array[text.offset + i]) { count++; } else if (matching == text.array[text.offset + i]) { @@ -296,6 +299,9 @@ if (MatcherContext.isTaskCanceled()) { return -1; } + if (text.array[text.offset + i] == '"') { + return -1; + } if (origin == text.array[text.offset + i]) { count++; } else if (matching == text.array[text.offset + i]) { diff --git a/editor.bracesmatching/test/unit/src/org/netbeans/modules/editor/bracesmatching/MasterMatcherTest.java b/editor.bracesmatching/test/unit/src/org/netbeans/modules/editor/bracesmatching/MasterMatcherTest.java --- a/editor.bracesmatching/test/unit/src/org/netbeans/modules/editor/bracesmatching/MasterMatcherTest.java +++ b/editor.bracesmatching/test/unit/src/org/netbeans/modules/editor/bracesmatching/MasterMatcherTest.java @@ -44,6 +44,7 @@ import org.netbeans.spi.editor.highlighting.support.OffsetsBag; import org.netbeans.api.editor.mimelookup.test.MockMimeLookup; +import org.netbeans.spi.editor.bracesmatching.support.BracesMatcherSupport; import org.netbeans.spi.editor.highlighting.HighlightsSequence; /** @@ -107,6 +108,50 @@ } } + public void testIgnoreWithinText() throws Exception { + JEditorPane c = new JEditorPane(); + Document d = c.getDocument(); + MockServices.setServices(MockMimeLookup.class); + MockMimeLookup.setInstances(MimePath.EMPTY, new BracesMatcherFactory() { + + @Override + public BracesMatcher createMatcher(MatcherContext context) { + return BracesMatcherSupport.defaultMatcher(context, 0, Integer.MAX_VALUE); + } + }); + + AttributeSet EAS = SimpleAttributeSet.EMPTY; + c.putClientProperty(MasterMatcher.PROP_MAX_BACKWARD_LOOKAHEAD, 256); + c.putClientProperty(MasterMatcher.PROP_MAX_FORWARD_LOOKAHEAD, 256); + OffsetsBag bag = new OffsetsBag(d); + + d.insertString(0, "text text { text } text", null); + MasterMatcher.get(c).highlight(d, 0, bag, EAS, EAS, EAS, EAS); + Thread.sleep(300); + { + HighlightsSequence hs = bag.getHighlights(0, Integer.MAX_VALUE); + assertTrue("Wrong number of highlighted areas", hs.moveNext()); + } + + c.setText(null); + d.insertString(0, "text text text text", null); + MasterMatcher.get(c).highlight(d, 0, bag, EAS, EAS, EAS, EAS); + Thread.sleep(300); + { + HighlightsSequence hs = bag.getHighlights(0, Integer.MAX_VALUE); + assertFalse("Wrong number of highlighted areas", hs.moveNext()); + } + + c.setText(null); + d.insertString(0, "text text { \"text }\" }text", null); + MasterMatcher.get(c).highlight(d, 17, bag, EAS, EAS, EAS, EAS); + Thread.sleep(300); + { + HighlightsSequence hs = bag.getHighlights(17, Integer.MAX_VALUE); + assertFalse("Wrong number of highlighted areas", hs.moveNext()); + } + } + public void testAreas() throws Exception { MockServices.setServices(MockMimeLookup.class); MockMimeLookup.setInstances(MimePath.EMPTY, new TestMatcher());