Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. import com.amazon.ion.IonReader
  2. import com.amazon.ion.TextSpan
  3. import com.amazon.ion.system.IonSystemBuilder
  4. import com.amazon.ion.util.Spans
  5. import org.junit.Test
  6.  
  7.  
  8. class ScratchPad {
  9.  
  10. @Test
  11. fun lineNumbers() {
  12. val someIon = """ // Line 1
  13. // Line 2
  14. { // Line 3
  15. foo: "I'm on line 4", // Line 4
  16. bat: "I'm on line 5", // Line 5
  17. boo: "I'm on line 6", // Line 6
  18. dee: "I'm on line 7", // Line 7
  19. baa: "I'm on line 8" // Line 8
  20. } // Line 9
  21. """
  22.  
  23. val ion = IonSystemBuilder.standard().build()
  24. val reader = ion.newReader(someIon)
  25. report(reader)
  26.  
  27. reader.next()
  28. report(reader)
  29.  
  30. reader.stepIn()
  31. report(reader)
  32.  
  33. while(reader.next() != null) {
  34. report(reader)
  35.  
  36. }
  37. }
  38. fun report(reader: IonReader) {
  39. try {
  40. println("---")
  41. println("reader.type: ${reader.type}")
  42. println("value: " + if(reader.type == null) "<not on a value>" else "\"${reader.stringValue()}\"")
  43.  
  44. val span = Spans.currentSpan(TextSpan::class.java, reader)
  45.  
  46. println("span.startLine: ${span.startLine}")
  47. println("span.finishLine: ${span.finishLine}")
  48.  
  49. val dirtyHack = dirtyHackToGetTheLineNum(reader)
  50. println("dirtyHackToGetTheLineNum(): $dirtyHack")
  51. if(dirtyHack != span.startLine) {
  52. println("span.startLine and dirtyHackToGetTheLineNum() are different!")
  53. }
  54. } catch(ex: Exception) {
  55. println("Can't get current TextSpan: $ex" )
  56. }
  57. }
  58.  
  59. fun dirtyHackToGetTheLineNum(reader: IonReader): Long {
  60. val scannerField = reader.javaClass.superclass.superclass.getDeclaredField("_scanner")
  61. scannerField.isAccessible = true
  62. val scanner = scannerField.get(reader)
  63. val lineCountField = scanner.javaClass.getDeclaredField("_line_count")
  64. lineCountField.isAccessible = true
  65. val lineNum = lineCountField.get(scanner) as Long
  66. return lineNum
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement