54
54
import org .eclipse .jdt .core .dom .SwitchExpression ;
55
55
import org .eclipse .jdt .core .dom .SwitchStatement ;
56
56
import org .eclipse .jdt .core .dom .TryStatement ;
57
+ import org .eclipse .jdt .core .dom .TypeDeclarationStatement ;
57
58
import org .eclipse .jdt .core .dom .WhileStatement ;
58
59
59
60
import org .eclipse .jdt .internal .corext .dom .IASTSharedValues ;
@@ -104,7 +105,7 @@ public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumb
104
105
unit = typeRoot .getWorkingCopy (workingCopyOwner , null );
105
106
if (unit != null ) {
106
107
CompilationUnit cu = convertICompilationUnitToCompilationUnit (unit );
107
- node = getASTNode (cu , textWidgetLineNumber +1 , line );
108
+ node = getASTNode (cu , mapWidgetToLineNumber ( sourceViewer , textWidgetLineNumber ) +1 , line );
108
109
while (node == null && textWidgetLineNumber > 0 ) {
109
110
line = textWidget .getLine (--textWidgetLineNumber );
110
111
startIndentation = getIndentation (line );
@@ -113,9 +114,9 @@ public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumb
113
114
startIndentation = getIndentation (line );
114
115
}
115
116
if (textWidgetLineNumber > 0 ) {
116
- int position = cu .getPosition (textWidgetLineNumber + 1 , startIndentation );
117
+ int position = cu .getPosition (mapWidgetToLineNumber ( sourceViewer , textWidgetLineNumber ) + 1 , startIndentation );
117
118
if (position >= 0 ) {
118
- node = getASTNode (cu , textWidgetLineNumber +1 , line );
119
+ node = getASTNode (cu , mapWidgetToLineNumber ( sourceViewer , textWidgetLineNumber ) +1 , line );
119
120
}
120
121
}
121
122
}
@@ -132,6 +133,11 @@ public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumb
132
133
ASTNode name = ((AbstractTypeDeclaration )node ).getName ();
133
134
nodeLineNumber = cu .getLineNumber (name .getStartPosition ());
134
135
break ;
136
+ case ASTNode .TYPE_DECLARATION_STATEMENT :
137
+ addStickyLine = true ;
138
+ ASTNode typeDeclStmtName = ((TypeDeclarationStatement )node ).getDeclaration ().getName ();
139
+ nodeLineNumber = cu .getLineNumber (typeDeclStmtName .getStartPosition ());
140
+ break ;
135
141
case ASTNode .METHOD_DECLARATION :
136
142
addStickyLine = true ;
137
143
ASTNode methodName = ((MethodDeclaration )node ).getName ();
@@ -160,14 +166,14 @@ public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumb
160
166
Statement elseStmt = ifStmt .getElseStatement ();
161
167
if (elseStmt != null ) {
162
168
int elseLine = cu .getLineNumber (elseStmt .getStartPosition ());
163
- if (elseLine <= textWidgetLineNumber + 1 ) {
169
+ if (elseLine <= mapWidgetToLineNumber ( sourceViewer , textWidgetLineNumber + 1 ) ) {
164
170
Pattern p = ELSE_PATTERN ;
165
171
nodeLineNumber = elseLine ;
166
- String stmtLine = textWidget .getLine (nodeLineNumber - 1 );
172
+ String stmtLine = textWidget .getLine (mapLineNumberToWidget ( sourceViewer , nodeLineNumber - 1 ) );
167
173
Matcher m = p .matcher (stmtLine );
168
174
while (!m .find () && nodeLineNumber > 1 ) {
169
175
nodeLineNumber --;
170
- stmtLine = textWidget .getLine (nodeLineNumber - 1 );
176
+ stmtLine = textWidget .getLine (mapLineNumberToWidget ( sourceViewer , nodeLineNumber - 1 ) );
171
177
m = p .matcher (stmtLine );
172
178
}
173
179
node = node .getParent ();
@@ -219,11 +225,11 @@ public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumb
219
225
}
220
226
if (bodyProperty != null && pattern != null ) {
221
227
nodeLineNumber = cu .getLineNumber (bodyProperty .getStartPosition ());
222
- String stmtLine = textWidget .getLine (nodeLineNumber - 1 );
228
+ String stmtLine = textWidget .getLine (mapLineNumberToWidget ( sourceViewer , nodeLineNumber - 1 ) );
223
229
Matcher m = pattern .matcher (stmtLine );
224
230
while (!m .find () && nodeLineNumber > 1 ) {
225
231
nodeLineNumber --;
226
- stmtLine = textWidget .getLine (nodeLineNumber - 1 );
232
+ stmtLine = textWidget .getLine (mapLineNumberToWidget ( sourceViewer , nodeLineNumber - 1 ) );
227
233
m = pattern .matcher (stmtLine );
228
234
}
229
235
}
@@ -237,20 +243,20 @@ public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumb
237
243
default :
238
244
break ;
239
245
}
240
- if (addStickyLine ) {
241
- stickyLines .addFirst (new StickyLine (mapWidgetToLineNumber ( sourceViewer , nodeLineNumber - 1 ) , sourceViewer ));
246
+ if (addStickyLine && nodeLineNumber <= lineNumber ) {
247
+ stickyLines .addFirst (new StickyLine (nodeLineNumber - 1 , sourceViewer ));
242
248
}
243
249
if (node .getNodeType () == ASTNode .MODIFIER ) {
244
250
Modifier modifier = (Modifier )node ;
245
251
startIndentation += modifier .getLength ();
246
- node = getASTNode (cu , textWidgetLineNumber +1 , line );
252
+ node = getASTNode (cu , mapWidgetToLineNumber ( sourceViewer , textWidgetLineNumber +1 ) , line );
247
253
} else {
248
254
node = node .getParent ();
249
255
}
250
256
}
251
257
}
252
258
}
253
- if (unit != null ) {
259
+ if (unit != null && ! typeRoot . isReadOnly () ) {
254
260
unit .discardWorkingCopy ();
255
261
}
256
262
} catch (JavaModelException e ) {
0 commit comments