Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: pkg/analysis_services/lib/src/correction/source_buffer.dart

Issue 484733003: Import analysis_services.dart into analysis_server.dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library services.src.correction.source_buffer;
6
7 import 'package:analysis_services/correction/change.dart';
8 import 'package:analyzer/src/generated/source.dart';
9
10
11 /**
12 * Helper for building Dart source with linked positions.
13 */
14 class SourceBuilder {
15 final String file;
16 final int offset;
17 final StringBuffer _buffer = new StringBuffer();
18
19 final List<LinkedEditGroup> linkedPositionGroups = <LinkedEditGroup>[];
20 LinkedEditGroup _currentLinkedPositionGroup;
21 int _currentPositionStart;
22 int _exitOffset;
23
24 SourceBuilder(this.file, this.offset);
25
26 SourceBuilder.buffer()
27 : file = null,
28 offset = 0;
29
30 /**
31 * Returns the exit offset, maybe `null` if not set.
32 */
33 int get exitOffset {
34 if (_exitOffset == null) {
35 return null;
36 }
37 return offset + _exitOffset;
38 }
39
40 int get length => _buffer.length;
41
42 void addSuggestion(LinkedEditSuggestionKind kind, String value) {
43 var suggestion = new LinkedEditSuggestion(kind, value);
44 _currentLinkedPositionGroup.addSuggestion(suggestion);
45 }
46
47 void addSuggestions(LinkedEditSuggestionKind kind, List<String> values) {
48 values.forEach((value) => addSuggestion(kind, value));
49 }
50
51 /**
52 * Appends [s] to the buffer.
53 */
54 SourceBuilder append(String s) {
55 _buffer.write(s);
56 return this;
57 }
58
59 /**
60 * Ends position started using [startPosition].
61 */
62 void endPosition() {
63 assert(_currentLinkedPositionGroup != null);
64 _addPosition();
65 _currentLinkedPositionGroup = null;
66 }
67
68 /**
69 * Marks the current offset as an "exit" one.
70 */
71 void setExitOffset() {
72 _exitOffset = _buffer.length;
73 }
74
75 /**
76 * Marks start of a new linked position for the group with the given ID.
77 */
78 void startPosition(String groupId) {
79 assert(_currentLinkedPositionGroup == null);
80 for (LinkedEditGroup position in linkedPositionGroups) {
81 if (position.id == groupId) {
82 _currentLinkedPositionGroup = position;
83 break;
84 }
85 }
86 if (_currentLinkedPositionGroup == null) {
87 _currentLinkedPositionGroup = new LinkedEditGroup(groupId);
88 linkedPositionGroups.add(_currentLinkedPositionGroup);
89 }
90 _currentPositionStart = _buffer.length;
91 }
92
93 @override
94 String toString() => _buffer.toString();
95
96 /**
97 * Adds position location [SourceRange] using current fields.
98 */
99 void _addPosition() {
100 int start = offset + _currentPositionStart;
101 int end = offset + _buffer.length;
102 int length = end - start;
103 Position position = new Position(file, start);
104 _currentLinkedPositionGroup.addPosition(position, length);
105 }
106 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698