| Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/text/folding/DartFoldingStructureProvider.java
|
| ===================================================================
|
| --- editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/text/folding/DartFoldingStructureProvider.java (revision 24333)
|
| +++ editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/text/folding/DartFoldingStructureProvider.java (working copy)
|
| @@ -244,11 +244,7 @@
|
| return model;
|
| }
|
|
|
| - private TokenStream getScanner() {
|
| - return getScanner(0);
|
| - }
|
| -
|
| - private TokenStream getScanner(int start) {
|
| + private TokenStream getScanner(int start) throws InvalidSourceException {
|
| tokenStream.begin(start);
|
| return tokenStream;
|
| }
|
| @@ -565,7 +561,7 @@
|
| }
|
| }
|
|
|
| - void begin(int start) {
|
| + void begin(int start) throws InvalidSourceException {
|
| if (start == begin) {
|
| return;
|
| }
|
| @@ -573,8 +569,13 @@
|
| begin = 0;
|
| currentToken = firstToken;
|
| }
|
| + Token prev = currentToken;
|
| while (begin < start) {
|
| currentToken = currentToken.getNext();
|
| + if (currentToken == prev) {
|
| + throw new InvalidSourceException();
|
| + }
|
| + prev = currentToken;
|
| begin = currentToken.getOffset();
|
| }
|
| }
|
| @@ -819,7 +820,12 @@
|
| }
|
| }
|
| int shift = range.getOffset();
|
| - TokenStream scanner = ctx.getScanner(shift);
|
| + TokenStream scanner;
|
| + try {
|
| + scanner = ctx.getScanner(shift);
|
| + } catch (InvalidSourceException ex) {
|
| + return new IRegion[0];
|
| + }
|
| int start = shift;
|
| Token token = scanner.next();
|
| start = token.getOffset();
|
| @@ -974,7 +980,12 @@
|
|
|
| private IRegion computeHeaderComment(FoldingStructureComputationContext ctx) {
|
| // search at most up to the first element
|
| - TokenStream scanner = ctx.getScanner();
|
| + TokenStream scanner;
|
| + try {
|
| + scanner = ctx.getScanner(0);
|
| + } catch (InvalidSourceException ex) {
|
| + return null;
|
| + }
|
| int headerStart = -1;
|
| int headerEnd = -1;
|
| boolean foundComment = false;
|
|
|