1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-08 16:55:38 +02:00

Fix source hover for parameters and enumerators

This commit is contained in:
Anton Leherbauer 2007-04-04 14:25:08 +00:00
parent f7b80bf306
commit 8934213fa1

View file

@ -286,12 +286,18 @@ public class CSourceHover extends AbstractCEditorTextHover implements ITextHover
return null; return null;
} }
sourceStart= scanner.findNonWhitespaceForward(sourceStart + 1, nameOffset); sourceStart= scanner.findNonWhitespaceForward(sourceStart + 1, nameOffset);
if (sourceStart == CHeuristicScanner.NOT_FOUND) {
sourceStart = nameOffset;
}
} else if (binding instanceof IEnumerator) { } else if (binding instanceof IEnumerator) {
sourceStart= scanner.scanBackward(nameOffset, CHeuristicScanner.UNBOUND, new char[] { '{', ',' }); sourceStart= scanner.scanBackward(nameOffset, CHeuristicScanner.UNBOUND, new char[] { '{', ',' });
if (sourceStart == CHeuristicScanner.NOT_FOUND) { if (sourceStart == CHeuristicScanner.NOT_FOUND) {
return null; return null;
} }
sourceStart= scanner.findNonWhitespaceForward(sourceStart + 1, nameOffset); sourceStart= scanner.findNonWhitespaceForward(sourceStart + 1, nameOffset);
if (sourceStart == CHeuristicScanner.NOT_FOUND) {
sourceStart = nameOffset;
}
} else { } else {
final int nameLine= doc.getLineOfOffset(nameOffset); final int nameLine= doc.getLineOfOffset(nameOffset);
sourceStart= doc.getLineOffset(nameLine); sourceStart= doc.getLineOffset(nameLine);
@ -346,13 +352,23 @@ public class CSourceHover extends AbstractCEditorTextHover implements ITextHover
IRegion lineRegion= doc.getLineInformationOfOffset(sourceEnd); IRegion lineRegion= doc.getLineInformationOfOffset(sourceEnd);
sourceEnd= lineRegion.getOffset() + lineRegion.getLength(); sourceEnd= lineRegion.getOffset() + lineRegion.getLength();
} else if (searchComma) { } else if (searchComma) {
int bound= Math.min(doc.getLength(), nameOffset + 100); int bound;
if (binding instanceof IParameter) {
bound= scanner.findClosingPeer(nameOffset, '(', ')');
} else {
bound= scanner.findClosingPeer(nameOffset, '{', '}');
}
if (bound == CHeuristicScanner.NOT_FOUND) {
bound= Math.min(doc.getLength(), nameOffset + 100);
}
int comma= scanner.scanForward(nameOffset, bound, ','); int comma= scanner.scanForward(nameOffset, bound, ',');
if (comma != CHeuristicScanner.NOT_FOUND) { if (comma == CHeuristicScanner.NOT_FOUND) {
sourceEnd= bound;
} else {
sourceEnd= comma; sourceEnd= comma;
} }
// expand region to include whole line if rest is white space or comment // expand region to include whole line if rest is white space or comment
int nextNonWS= scanner.findNonWhitespaceForward(sourceEnd + 1, bound); int nextNonWS= scanner.findNonWhitespaceForward(sourceEnd + 1, CHeuristicScanner.UNBOUND);
if (doc.getLineOfOffset(nextNonWS) > doc.getLineOfOffset(sourceEnd)) { if (doc.getLineOfOffset(nextNonWS) > doc.getLineOfOffset(sourceEnd)) {
IRegion lineRegion= doc.getLineInformationOfOffset(sourceEnd); IRegion lineRegion= doc.getLineInformationOfOffset(sourceEnd);
sourceEnd= lineRegion.getOffset() + lineRegion.getLength(); sourceEnd= lineRegion.getOffset() + lineRegion.getLength();