Skip to content

Commit e0e4fcb

Browse files
committed
Make InvalidIdentifier exception subclass of ExpressionError
Fixes test which instead of reporting error shows this exception: [info] - expr_bad_id_inst_value *** FAILED *** [info] io.kaitai.struct.format.InvalidIdentifier: invalid ID: 'BAD', expected /^[a-z][a-z0-9_]*$/ [info] at io.kaitai.struct.format.Identifier$.checkIdentifier(Identifier.scala:52) [info] at io.kaitai.struct.format.InstanceIdentifier.<init>(Identifier.scala:113) [info] at io.kaitai.struct.ClassTypeProvider.resolveMember(ClassTypeProvider.scala:83) [info] at io.kaitai.struct.ClassTypeProvider.determineType(ClassTypeProvider.scala:46) [info] at io.kaitai.struct.ClassTypeProvider.determineType(ClassTypeProvider.scala:20) [info] at io.kaitai.struct.translators.TypeDetector.detectTypeRaw(TypeDetector.scala:61) [info] at io.kaitai.struct.translators.TypeDetector.detectType(TypeDetector.scala:25) [info] at io.kaitai.struct.precompile.ValueTypesDeriver.$anonfun$deriveValueType$2(ValueTypesDeriver.scala:28) [info] at io.kaitai.struct.precompile.ValueTypesDeriver.$anonfun$deriveValueType$2$adapted(ValueTypesDeriver.scala:21) [info] at scala.collection.immutable.RedBlackTree$.foreach(RedBlackTree.scala:291) [info] ...
1 parent 83dde4b commit e0e4fcb

6 files changed

Lines changed: 9 additions & 10 deletions

File tree

shared/src/main/scala/io/kaitai/struct/ClassTypeProvider.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class ClassTypeProvider(classSpecs: ClassSpecs, var topClass: ClassSpec) extends
9595
* @param inClass type specification to search member in
9696
* @param attrName name of a member to search for
9797
* @return member spec if found, or throws an exception
98-
* @throws format.InvalidIdentifier if attribute name is not a valid name for a member
98+
* @throws precompile.InvalidIdentifier if attribute name is not a valid name for a member
9999
* @throws precompile.FieldNotFoundError if attribute with such name is not found
100100
*/
101101
def resolveMember(inClass: ClassSpec, attrName: String): MemberSpec = {

shared/src/main/scala/io/kaitai/struct/format/AttrSpec.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import io.kaitai.struct.datatype.DataType
66
import io.kaitai.struct.datatype.DataType._
77
import io.kaitai.struct.exprlang.Ast.expr
88
import io.kaitai.struct.exprlang.{Ast, Expressions}
9+
import io.kaitai.struct.precompile.InvalidIdentifier
910
import io.kaitai.struct.problems.KSYParseError
1011

1112
import scala.collection.immutable.SortedMap

shared/src/main/scala/io/kaitai/struct/format/Identifier.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.kaitai.struct.format
22

33
import io.kaitai.struct.exprlang.Ast
4+
import io.kaitai.struct.precompile.InvalidIdentifier
45
import io.kaitai.struct.problems.KSYParseError
56

67
/**
@@ -37,10 +38,6 @@ case class NamedIdentifier(name: String) extends Identifier {
3738
override def humanReadable: String = name
3839
}
3940

40-
case class InvalidIdentifier(id: String) extends RuntimeException(
41-
s"invalid ID: '$id', expected /${Identifier.ReIdentifier.toString}/"
42-
)
43-
4441
object Identifier {
4542
val ReIdentifier = "^[a-z][a-z0-9_]*$".r
4643

shared/src/main/scala/io/kaitai/struct/format/ParseUtils.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.kaitai.struct.format
22

33
import io.kaitai.struct.Utils
44
import io.kaitai.struct.exprlang.{Ast, Expressions}
5+
import io.kaitai.struct.precompile.InvalidIdentifier
56
import io.kaitai.struct.problems.KSYParseError
67

78
object ParseUtils {

shared/src/main/scala/io/kaitai/struct/precompile/Exceptions.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package io.kaitai.struct.precompile
22

33
import io.kaitai.struct.datatype.DataType
4-
import io.kaitai.struct.format.ClassSpec
4+
import io.kaitai.struct.format.{ClassSpec, Identifier}
55
import io.kaitai.struct.translators.MethodArgType
66

77
/**
88
* Base class for all expression-related errors, not localized to a certain path
99
* in source file.
1010
*/
1111
sealed abstract class ExpressionError(msg: String) extends RuntimeException(msg)
12+
13+
class InvalidIdentifier(id: String)
14+
extends ExpressionError(s"invalid ID: '$id', expected /${Identifier.ReIdentifier.toString}/")
15+
1216
class TypeMismatchError(msg: String) extends ExpressionError(msg)
1317
class TypeUndecidedError(msg: String) extends ExpressionError(msg)
1418
class WrongMethodCall(val dataType: MethodArgType, val methodName: String, val expectedSigs: Iterable[String], val actualSig: String)

shared/src/main/scala/io/kaitai/struct/precompile/TypeValidator.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,6 @@ class TypeValidator(specs: ClassSpecs) extends PrecompileStep {
233233
detector.validate(expr)
234234
None
235235
} catch {
236-
case err: InvalidIdentifier =>
237-
Some(ErrorInInput(err, path ++ List(pathKey)))
238236
case err: ExpressionError =>
239237
Some(ErrorInInput(err, path ++ List(pathKey)))
240238
}
@@ -269,8 +267,6 @@ class TypeValidator(specs: ClassSpecs) extends PrecompileStep {
269267
detector.validate(expr)
270268
None
271269
} catch {
272-
case err: InvalidIdentifier =>
273-
Some(ErrorInInput(err, path ++ List(pathKey)))
274270
case err: ExpressionError =>
275271
Some(ErrorInInput(err, path ++ List(pathKey)))
276272
}

0 commit comments

Comments
 (0)