mbien commented on code in PR #8304:
URL: https://github.com/apache/netbeans/pull/8304#discussion_r1985743240
##########
ide/parsing.api/src/org/netbeans/modules/parsing/api/Source.java:
##########
@@ -334,81 +332,72 @@ public Snapshot createSnapshot () {
// The code below is a copy of
CharacterConversions.lineSeparatorToLineFeed() method
// and it handles line-end conversion. In general EditorKits
can do more conversions,
// but they usually don't and this should be good enough for
Snapshots.
- try {
- if (fileObject.isValid ()) {
- if (fileObject.getSize() <=
Utilities.getMaxFileSize()) {
- final InputStream is = fileObject.getInputStream
();
- assert is != null : "FileObject.getInputStream()
returned null for FileObject: " + FileUtil.getFileDisplayName(fileObject);
//NOI18N
- try {
- InputStreamReader reader = new
InputStreamReader (
- is,
- FileEncodingQuery.getEncoding
(fileObject)
- );
- try {
- StringBuilder output = new
StringBuilder(Math.max(16, (int) fileObject.getSize()));
- List<Integer> lso = new
LinkedList<Integer>();
- boolean lastCharCR = false;
- char [] buffer = new char [65536];
- int size = -1;
-
- final char LF = '\n'; //NOI18N, Unicode
line feed (0x000A)
- final char CR = '\r'; //NOI18N, Unicode
carriage return (0x000D)
- final char LS = 0x2028; // Unicode line
separator (0x2028)
- final char PS = 0x2029; // Unicode
paragraph separator (0x2029)
-
- lso.add(0);
- while(-1 != (size = reader.read(buffer, 0,
buffer.length))) {
- for(int i = 0; i < size; i++) {
- char ch = buffer[i];
- if (lastCharCR && ch == LF) {
- // CR-LF pair changed to
single LF
- continue;
- }
- if (ch == CR) {
- // convert to LF; subsequent
LF will be skipped
- output.append(LF);
- lso.add(output.length());
- lastCharCR = true;
- } else if (ch == LS || ch == PS) {
// Unicode LS, PS
- output.append(LF);
- lso.add(output.length());
- lastCharCR = false;
- } else { // current char not CR
- lastCharCR = false;
- output.append(ch);
- }
- }
+ if (fileObject.isValid()) {
+ if (fileObject.getSize() <= Utilities.getMaxFileSize()) {
+ try (InputStreamReader reader = new
InputStreamReader(fileObject.getInputStream(),
FileEncodingQuery.getEncoding(fileObject))) {
+ StringBuilder output = new
StringBuilder(Math.max(16, (int) fileObject.getSize()));
+ List<Integer> lso = new ArrayList<>();
+ boolean lastCharCR = false;
+ char[] buffer = new char [65536];
+ int size = -1;
+
+ final char LF = '\n'; //NOI18N, Unicode line feed
(0x000A)
+ final char CR = '\r'; //NOI18N, Unicode carriage
return (0x000D)
+ final char LS = 0x2028; // Unicode line separator
(0x2028)
+ final char PS = 0x2029; // Unicode paragraph
separator (0x2029)
+
+ lso.add(0);
+ while(-1 != (size = reader.read(buffer, 0,
buffer.length))) {
+ for(int i = 0; i < size; i++) {
+ char ch = buffer[i];
+ if (lastCharCR && ch == LF) {
+ // CR-LF pair changed to single LF
+ continue;
}
-
- int [] lsoArr = new int [lso.size()];
- int idx = 0;
- for(Integer offset : lso) {
- lsoArr[idx++] = offset;
+ if (ch == CR) {
+ // convert to LF; subsequent LF will
be skipped
+ output.append(LF);
+ lso.add(output.length());
+ lastCharCR = true;
+ } else if (ch == LS || ch == PS) { //
Unicode LS, PS
+ output.append(LF);
+ lso.add(output.length());
+ lastCharCR = false;
+ } else { // current char not CR
+ lastCharCR = false;
+ output.append(ch);
}
-
- text[0] = output;
- lineStartOffsets[0] = lsoArr;
- } finally {
- reader.close ();
}
- } finally {
- is.close ();
}
- } else {
- LOG.log(
- Level.WARNING,
- "Source {0} of size: {1} has been ignored due
to large size. Files large then {2} bytes are ignored, you can increase the
size by parse.max.file.size property.", //NOI18N
- new Object[]{
- FileUtil.getFileDisplayName(fileObject),
- fileObject.getSize(),
- Utilities.getMaxFileSize()
- });
+
+ int[] lsoArr = new int[lso.size()];
+ int idx = 0;
+ for(Integer offset : lso) {
+ lsoArr[idx++] = offset;
+ }
+
+ text[0] = output;
+ lineStartOffsets[0] = lsoArr;
+ } catch (FileNotFoundException fnfe) {
+ // working with a stale FileObject, just ignore
this (eg see #158119)
+ } catch (CoderMalfunctionError cme) {
+ text[0] = ""; //NOI18N
+ lineStartOffsets[0] = new int[] { 0 };
Review Comment:
done, used multicatch - FileNotFound is also implicitly handled via
IOException.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists