This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 219447
Collapse All | Expand All

(-)a/queries/src/org/netbeans/api/queries/FileEncodingQuery.java (-9 / +16 lines)
Lines 347-352 Link Here
347
                        if (!remainder.hasRemaining()) {
347
                        if (!remainder.hasRemaining()) {
348
                            remainder = null;
348
                            remainder = null;
349
                        }
349
                        }
350
                        if (!result.isUnderflow()) {
351
                            // perhaps did not fit into 'out'
352
                            return result;
353
                        }
350
                    }
354
                    }
351
                    CoderResult result = currentEncoder.encode(in, out, false);
355
                    CoderResult result = currentEncoder.encode(in, out, false);
352
                    return result;
356
                    return result;
Lines 368-374 Link Here
368
            }
372
            }
369
373
370
            private CoderResult encodeHead (CharBuffer in, ByteBuffer out, boolean flush) {
374
            private CoderResult encodeHead (CharBuffer in, ByteBuffer out, boolean flush) {
371
                buffer.flip();
375
                // if buffer is missing, get data from the remainder, case for repeated implFlush() call.
376
                CharBuffer b = buffer == null ? remainder : buffer;
377
                b.flip();
372
                CoderResult result = null;
378
                CoderResult result = null;
373
                for (int i=0; i<delegates.size(); i++) {
379
                for (int i=0; i<delegates.size(); i++) {
374
                    currentEncoder=delegates.get(i).newEncoder();
380
                    currentEncoder=delegates.get(i).newEncoder();
Lines 383-395 Link Here
383
                    }
389
                    }
384
                    int outPos = out.position();
390
                    int outPos = out.position();
385
                    try {
391
                    try {
386
                        CharBuffer view = buffer.asReadOnlyBuffer();
392
                        CharBuffer view = b.asReadOnlyBuffer();
387
                        result = currentEncoder.encode(view, out, in==null);
393
                        result = currentEncoder.encode(view, out, in==null);
388
                        if (result.isOverflow()) {
394
                        if (result.isOverflow()) {
389
                            //Should never happen
395
                            // the output is smaller, interrupt encoding the head.
390
                            if (flush) {
391
                                currentEncoder.flush(out);
392
                            }
393
                            LOG.log(Level.FINEST, ENCODER_SELECTED, currentEncoder);
396
                            LOG.log(Level.FINEST, ENCODER_SELECTED, currentEncoder);
394
                            remainder = view;
397
                            remainder = view;
395
                            buffer = null;
398
                            buffer = null;
Lines 402-409 Link Here
402
                            if (in != null) {
405
                            if (in != null) {
403
                                result = currentEncoder.encode(in, out, false);
406
                                result = currentEncoder.encode(in, out, false);
404
                            }
407
                            }
405
                            if (flush) {
408
                            if (result.isUnderflow()) {
406
                                result = currentEncoder.flush(out);
409
                                if (flush) {
410
                                    result = currentEncoder.flush(out);
411
                                }
407
                            }
412
                            }
408
                            LOG.log(Level.FINEST, ENCODER_SELECTED, currentEncoder);
413
                            LOG.log(Level.FINEST, ENCODER_SELECTED, currentEncoder);
409
                            buffer = null;
414
                            buffer = null;
Lines 425-431 Link Here
425
            @Override
430
            @Override
426
            protected CoderResult implFlush(ByteBuffer out) {
431
            protected CoderResult implFlush(ByteBuffer out) {
427
                lastByteBuffer = null;
432
                lastByteBuffer = null;
428
                if (buffer != null) {
433
                // if the previous encodeHead overflew, the caller should probably call encodeLoop, but is also
434
                // permitted to call flush -> implFlush again.
435
                if (buffer != null || remainder != null) {
429
                    return encodeHead(null, out, true);
436
                    return encodeHead(null, out, true);
430
                }
437
                }
431
                else {
438
                else {

Return to bug 219447