61337 -- try to convert assertions to exceptions. I left in the assertions for the binary search components.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1803092 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
21cbf101bc
commit
16f331054f
53
src/java/org/apache/poi/util/DocumentFormatException.java
Normal file
53
src/java/org/apache/poi/util/DocumentFormatException.java
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is similar to {@link RecordFormatException}, except this is thrown
|
||||||
|
* when there's a higher order problem with parsing a document beyond individual records.
|
||||||
|
*/
|
||||||
|
public class DocumentFormatException extends RuntimeException {
|
||||||
|
|
||||||
|
public DocumentFormatException(String exception) {
|
||||||
|
super(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentFormatException(String exception, Throwable thr) {
|
||||||
|
super(exception, thr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DocumentFormatException(Throwable thr) {
|
||||||
|
super(thr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Syntactic sugar to check whether a DocumentFormatException should
|
||||||
|
* be thrown. If assertTrue is <code>false</code>, this will throw this
|
||||||
|
* exception with the message.
|
||||||
|
*
|
||||||
|
* @param assertTrue
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
public static void check(boolean assertTrue, String message) {
|
||||||
|
if (!assertTrue) {
|
||||||
|
throw new DocumentFormatException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -39,4 +39,18 @@ public class RecordFormatException
|
|||||||
public RecordFormatException(Throwable thr) {
|
public RecordFormatException(Throwable thr) {
|
||||||
super(thr);
|
super(thr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Syntactic sugar to check whether a RecordFormatException should
|
||||||
|
* be thrown. If assertTrue is <code>false</code>, this will throw this
|
||||||
|
* exception with the message.
|
||||||
|
*
|
||||||
|
* @param assertTrue
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
public static void check(boolean assertTrue, String message) {
|
||||||
|
if (! assertTrue) {
|
||||||
|
throw new RecordFormatException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import org.apache.poi.hwpf.model.SubdocumentType;
|
|||||||
import org.apache.poi.hwpf.sprm.CharacterSprmCompressor;
|
import org.apache.poi.hwpf.sprm.CharacterSprmCompressor;
|
||||||
import org.apache.poi.hwpf.sprm.ParagraphSprmCompressor;
|
import org.apache.poi.hwpf.sprm.ParagraphSprmCompressor;
|
||||||
import org.apache.poi.hwpf.sprm.SprmBuffer;
|
import org.apache.poi.hwpf.sprm.SprmBuffer;
|
||||||
|
import org.apache.poi.util.DocumentFormatException;
|
||||||
import org.apache.poi.util.Internal;
|
import org.apache.poi.util.Internal;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.POILogFactory;
|
import org.apache.poi.util.POILogFactory;
|
||||||
@ -192,7 +193,7 @@ public class Range { // TODO -instantiable superclass
|
|||||||
_parent = new WeakReference<Range>(parent);
|
_parent = new WeakReference<Range>(parent);
|
||||||
|
|
||||||
sanityCheckStartEnd();
|
sanityCheckStartEnd();
|
||||||
assert sanityCheck();
|
sanityCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -328,7 +329,7 @@ public class Range { // TODO -instantiable superclass
|
|||||||
// update the FIB.CCPText + friends fields
|
// update the FIB.CCPText + friends fields
|
||||||
adjustFIB( text.length() );
|
adjustFIB( text.length() );
|
||||||
|
|
||||||
assert sanityCheck();
|
sanityCheck();
|
||||||
|
|
||||||
return getCharacterRun( 0 );
|
return getCharacterRun( 0 );
|
||||||
}
|
}
|
||||||
@ -356,7 +357,7 @@ public class Range { // TODO -instantiable superclass
|
|||||||
}
|
}
|
||||||
adjustForInsert( text.length() );
|
adjustForInsert( text.length() );
|
||||||
|
|
||||||
assert sanityCheck();
|
sanityCheck();
|
||||||
return getCharacterRun( numCharacterRuns() - 1 );
|
return getCharacterRun( numCharacterRuns() - 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -965,8 +966,9 @@ public class Range { // TODO -instantiable superclass
|
|||||||
|
|
||||||
if ( startIndex < 0 || startIndex >= rpl.size()
|
if ( startIndex < 0 || startIndex >= rpl.size()
|
||||||
|| startIndex > endIndex || endIndex < 0
|
|| startIndex > endIndex || endIndex < 0
|
||||||
|| endIndex >= rpl.size() )
|
|| endIndex >= rpl.size() ) {
|
||||||
throw new AssertionError();
|
throw new DocumentFormatException("problem finding range");
|
||||||
|
}
|
||||||
|
|
||||||
return new int[] { startIndex, endIndex + 1 };
|
return new int[] { startIndex, endIndex + 1 };
|
||||||
}
|
}
|
||||||
@ -1050,7 +1052,9 @@ public class Range { // TODO -instantiable superclass
|
|||||||
*/
|
*/
|
||||||
protected void adjustFIB( int adjustment )
|
protected void adjustFIB( int adjustment )
|
||||||
{
|
{
|
||||||
assert ( _doc instanceof HWPFDocument );
|
if (!( _doc instanceof HWPFDocument)) {
|
||||||
|
throw new IllegalArgumentException("doc must be instance of HWPFDocument");
|
||||||
|
}
|
||||||
|
|
||||||
// update the FIB.CCPText field (this should happen once per adjustment,
|
// update the FIB.CCPText field (this should happen once per adjustment,
|
||||||
// so we don't want it in
|
// so we don't want it in
|
||||||
@ -1148,20 +1152,19 @@ public class Range { // TODO -instantiable superclass
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Method for debug purposes. Checks that all resolved elements are inside
|
* Method for debug purposes. Checks that all resolved elements are inside
|
||||||
* of current range.
|
* of current range. Throws {@link IllegalArgumentException} if checks fail.
|
||||||
*/
|
*/
|
||||||
public boolean sanityCheck()
|
public boolean sanityCheck()
|
||||||
{
|
{
|
||||||
if ( _start < 0 )
|
DocumentFormatException.check(_start >= 0,
|
||||||
throw new AssertionError();
|
"start can't be < 0");
|
||||||
if ( _start > _text.length() )
|
DocumentFormatException.check( _start <= _text.length(),
|
||||||
throw new AssertionError();
|
"start can't be > text length");
|
||||||
if ( _end < 0 )
|
DocumentFormatException.check( _end >= 0,
|
||||||
throw new AssertionError();
|
"end can't be < 0");
|
||||||
if ( _end > _text.length() )
|
DocumentFormatException.check( _end <= _text.length(),
|
||||||
throw new AssertionError();
|
"end can't be > text length");
|
||||||
if ( _start > _end )
|
DocumentFormatException.check( _start <= _end,"start can't be > end");
|
||||||
throw new AssertionError();
|
|
||||||
|
|
||||||
if ( _charRangeFound )
|
if ( _charRangeFound )
|
||||||
{
|
{
|
||||||
@ -1171,9 +1174,7 @@ public class Range { // TODO -instantiable superclass
|
|||||||
|
|
||||||
int left = Math.max( this._start, chpx.getStart() );
|
int left = Math.max( this._start, chpx.getStart() );
|
||||||
int right = Math.min( this._end, chpx.getEnd() );
|
int right = Math.min( this._end, chpx.getEnd() );
|
||||||
|
DocumentFormatException.check(left < right, "left must be < right");
|
||||||
if ( left >= right )
|
|
||||||
throw new AssertionError();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( _parRangeFound )
|
if ( _parRangeFound )
|
||||||
@ -1185,11 +1186,10 @@ public class Range { // TODO -instantiable superclass
|
|||||||
int left = Math.max( this._start, papx.getStart() );
|
int left = Math.max( this._start, papx.getStart() );
|
||||||
int right = Math.min( this._end, papx.getEnd() );
|
int right = Math.min( this._end, papx.getEnd() );
|
||||||
|
|
||||||
if ( left >= right )
|
DocumentFormatException.check( left < right,
|
||||||
throw new AssertionError();
|
"left must be < right");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user