Skip to content

Commit 9b4c5d6

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 542b241 commit 9b4c5d6

File tree

6 files changed

+9
-10
lines changed

6 files changed

+9
-10
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class ClassTypeProvider(classSpecs: ClassSpecs, var topClass: ClassSpec) extends
6868
* @param inClass type specification to search member in
6969
* @param attrName name of a member to search for
7070
* @return member spec if found, or throws an exception
71-
* @throws format.InvalidIdentifier if attribute name is not a valid name for a member
71+
* @throws precompile.InvalidIdentifier if attribute name is not a valid name for a member
7272
* @throws precompile.FieldNotFoundError if attribute with such name is not found
7373
*/
7474
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
@@ -239,8 +239,6 @@ class TypeValidator(specs: ClassSpecs) extends PrecompileStep {
239239
detector.validate(expr)
240240
None
241241
} catch {
242-
case err: InvalidIdentifier =>
243-
Some(ErrorInInput(err, path ++ List(pathKey)))
244242
case err: ExpressionError =>
245243
Some(ErrorInInput(err, path ++ List(pathKey)))
246244
}
@@ -285,8 +283,6 @@ class TypeValidator(specs: ClassSpecs) extends PrecompileStep {
285283
detector.validate(expr)
286284
None
287285
} catch {
288-
case err: InvalidIdentifier =>
289-
Some(ErrorInInput(err, path ++ List(pathKey)))
290286
case err: ExpressionError =>
291287
Some(ErrorInInput(err, path ++ List(pathKey)))
292288
}

0 commit comments

Comments
 (0)