calabash-android 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (532) hide show
  1. data/CHANGES.txt +1 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +8 -0
  4. data/Rakefile +2 -0
  5. data/bin/calabash-android +42 -0
  6. data/bin/calabash-android-build.rb +37 -0
  7. data/bin/calabash-android-generate.rb +26 -0
  8. data/bin/calabash-android-helpers.rb +71 -0
  9. data/bin/calabash-android-run.rb +18 -0
  10. data/bin/calabash-android-setup.rb +392 -0
  11. data/calabash-android.gemspec +23 -0
  12. data/doc/calabash-android-help.txt +21 -0
  13. data/epl-v10.html +261 -0
  14. data/features-skeleton/.irbrc +16 -0
  15. data/features-skeleton/irb_android.sh +2 -0
  16. data/features-skeleton/my_first.feature +5 -0
  17. data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
  18. data/features-skeleton/support/app_installation_hooks.rb +26 -0
  19. data/features-skeleton/support/app_life_cycle_hooks.rb +28 -0
  20. data/features-skeleton/support/env.rb +1 -0
  21. data/features-skeleton/support/hooks.rb +18 -0
  22. data/lib/calabash-android.rb +2 -0
  23. data/lib/calabash-android/calabash_steps.rb +18 -0
  24. data/lib/calabash-android/canned_steps.md +239 -0
  25. data/lib/calabash-android/color_helper.rb +13 -0
  26. data/lib/calabash-android/cucumber.rb +9 -0
  27. data/lib/calabash-android/lib/screenShotTaker.jar +0 -0
  28. data/lib/calabash-android/management/adb.rb +11 -0
  29. data/lib/calabash-android/management/app_installation.rb +21 -0
  30. data/lib/calabash-android/operations.rb +283 -0
  31. data/lib/calabash-android/steps/additions_manual_steps.rb +11 -0
  32. data/lib/calabash-android/steps/app_steps.rb +10 -0
  33. data/lib/calabash-android/steps/assert_steps.rb +32 -0
  34. data/lib/calabash-android/steps/check_box_steps.rb +3 -0
  35. data/lib/calabash-android/steps/context_menu_steps.rb +12 -0
  36. data/lib/calabash-android/steps/date_picker_steps.rb +8 -0
  37. data/lib/calabash-android/steps/enter_text_steps.rb +21 -0
  38. data/lib/calabash-android/steps/location_steps.rb +19 -0
  39. data/lib/calabash-android/steps/navigation_steps.rb +27 -0
  40. data/lib/calabash-android/steps/press_button_steps.rb +35 -0
  41. data/lib/calabash-android/steps/progress_steps.rb +49 -0
  42. data/lib/calabash-android/steps/rotation_steps.rb +8 -0
  43. data/lib/calabash-android/steps/screenshot_steps.rb +11 -0
  44. data/lib/calabash-android/steps/spinner_steps.rb +3 -0
  45. data/lib/calabash-android/steps/time_picker_steps.rb +8 -0
  46. data/lib/calabash-android/version.rb +6 -0
  47. data/test-server/AndroidManifest.xml +13 -0
  48. data/test-server/build.xml +192 -0
  49. data/test-server/calabash-js/src/calabash.js +125 -0
  50. data/test-server/calabash-js/src/set_text.js +132 -0
  51. data/test-server/instrumentation-backend/.classpath +10 -0
  52. data/test-server/instrumentation-backend/.project +33 -0
  53. data/test-server/instrumentation-backend/.settings/org.eclipse.jdt.core.prefs +12 -0
  54. data/test-server/instrumentation-backend/AndroidManifest.xml +15 -0
  55. data/test-server/instrumentation-backend/assets/foo.bar +0 -0
  56. data/test-server/instrumentation-backend/gen/com/lesspainful/simpleui/test/R.java +23 -0
  57. data/test-server/instrumentation-backend/libs/robotium-solo-2.5.jar +0 -0
  58. data/test-server/instrumentation-backend/project.properties +11 -0
  59. data/test-server/instrumentation-backend/res/drawable-hdpi/ic_launcher.png +0 -0
  60. data/test-server/instrumentation-backend/res/drawable-ldpi/ic_launcher.png +0 -0
  61. data/test-server/instrumentation-backend/res/drawable-mdpi/ic_launcher.png +0 -0
  62. data/test-server/instrumentation-backend/res/layout/main.xml +12 -0
  63. data/test-server/instrumentation-backend/res/values/strings.xml +7 -0
  64. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +48 -0
  65. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +196 -0
  66. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +64 -0
  67. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/TestHelpers.java +136 -0
  68. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Action.java +11 -0
  69. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Actions.java +113 -0
  70. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NullAction.java +23 -0
  71. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +22 -0
  72. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +27 -0
  73. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +22 -0
  74. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +47 -0
  75. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +22 -0
  76. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +22 -0
  77. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +26 -0
  78. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +22 -0
  79. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +26 -0
  80. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/ClickOnScreen.java +31 -0
  81. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Swipe.java +28 -0
  82. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/ListActions.java +26 -0
  83. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +22 -0
  84. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +22 -0
  85. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +79 -0
  86. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +28 -0
  87. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +28 -0
  88. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/DownKey.java +24 -0
  89. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/GoBack.java +22 -0
  90. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/PressMenu.java +26 -0
  91. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +24 -0
  92. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +43 -0
  93. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +31 -0
  94. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +32 -0
  95. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +22 -0
  96. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +33 -0
  97. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +22 -0
  98. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +32 -0
  99. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +22 -0
  100. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByContentDescription.java +33 -0
  101. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByIndex.java +24 -0
  102. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByContentDescription.java +34 -0
  103. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByIndex.java +26 -0
  104. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +63 -0
  105. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +34 -0
  106. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +89 -0
  107. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/WaitForViewById.java +41 -0
  108. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +24 -0
  109. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +21 -0
  110. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +47 -0
  111. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +49 -0
  112. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +26 -0
  113. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +109 -0
  114. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +33 -0
  115. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +33 -0
  116. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +99 -0
  117. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +43 -0
  118. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Query.java +24 -0
  119. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +99 -0
  120. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +74 -0
  121. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +43 -0
  122. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +50 -0
  123. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Touch.java +44 -0
  124. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variant.java +413 -0
  125. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variants.java +90 -0
  126. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/FormatSchema.java +29 -0
  127. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonEncoding.java +47 -0
  128. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonFactory.java +937 -0
  129. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerationException.java +28 -0
  130. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerator.java +1197 -0
  131. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonLocation.java +141 -0
  132. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonNode.java +879 -0
  133. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParseException.java +23 -0
  134. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParser.java +1434 -0
  135. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonProcessingException.java +80 -0
  136. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonStreamContext.java +122 -0
  137. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonToken.java +161 -0
  138. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/ObjectCodec.java +157 -0
  139. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/PrettyPrinter.java +166 -0
  140. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/SerializableString.java +54 -0
  141. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Version.java +90 -0
  142. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Versioned.java +20 -0
  143. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JacksonAnnotation.java +20 -0
  144. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnyGetter.java +25 -0
  145. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnySetter.java +24 -0
  146. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAutoDetect.java +148 -0
  147. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonBackReference.java +41 -0
  148. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonCreator.java +19 -0
  149. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonGetter.java +35 -0
  150. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnore.java +57 -0
  151. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreProperties.java +48 -0
  152. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreType.java +33 -0
  153. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonManagedReference.java +41 -0
  154. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonMethod.java +90 -0
  155. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonProperty.java +38 -0
  156. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonPropertyOrder.java +46 -0
  157. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonRawValue.java +33 -0
  158. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSetter.java +33 -0
  159. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSubTypes.java +44 -0
  160. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeInfo.java +236 -0
  161. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeName.java +28 -0
  162. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonUnwrapped.java +76 -0
  163. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonValue.java +46 -0
  164. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonWriteNullProperties.java +34 -0
  165. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/package-info.java +16 -0
  166. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatDetector.java +176 -0
  167. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatMatcher.java +117 -0
  168. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/InputAccessor.java +130 -0
  169. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/MatchStrength.java +64 -0
  170. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/package-info.java +8 -0
  171. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ByteSourceBootstrapper.java +518 -0
  172. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/DefaultPrettyPrinter.java +13 -0
  173. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Indenter.java +23 -0
  174. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonGeneratorBase.java +570 -0
  175. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonNumericParserBase.java +20 -0
  176. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserBase.java +1067 -0
  177. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserMinimalBase.java +539 -0
  178. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonReadContext.java +188 -0
  179. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonWriteContext.java +178 -0
  180. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParser.java +1815 -0
  181. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParserBase.java +228 -0
  182. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/StreamBasedParserBase.java +197 -0
  183. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8Generator.java +1757 -0
  184. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8StreamParser.java +2966 -0
  185. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/WriterBasedGenerator.java +1815 -0
  186. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/package-info.java +6 -0
  187. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/BaseReader.java +117 -0
  188. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/CharacterEscapes.java +73 -0
  189. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/IOContext.java +239 -0
  190. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/InputDecorator.java +67 -0
  191. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/JsonStringEncoder.java +408 -0
  192. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/MergedStream.java +145 -0
  193. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberInput.java +303 -0
  194. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberOutput.java +398 -0
  195. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/OutputDecorator.java +40 -0
  196. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SegmentedStringWriter.java +104 -0
  197. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SerializedString.java +114 -0
  198. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF32Reader.java +214 -0
  199. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF8Writer.java +387 -0
  200. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/package.html +4 -0
  201. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AbstractTypeResolver.java +63 -0
  202. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AnnotationIntrospector.java +1485 -0
  203. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanDescription.java +171 -0
  204. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanProperty.java +123 -0
  205. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanPropertyDefinition.java +66 -0
  206. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ClassIntrospector.java +117 -0
  207. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualDeserializer.java +38 -0
  208. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualKeyDeserializer.java +33 -0
  209. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualSerializer.java +38 -0
  210. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationConfig.java +926 -0
  211. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationContext.java +262 -0
  212. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationProblemHandler.java +56 -0
  213. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerFactory.java +356 -0
  214. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerProvider.java +185 -0
  215. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Deserializers.java +339 -0
  216. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/HandlerInstantiator.java +115 -0
  217. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/InjectableValues.java +85 -0
  218. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonDeserializer.java +166 -0
  219. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonMappingException.java +335 -0
  220. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializable.java +34 -0
  221. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializableWithType.java +22 -0
  222. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializer.java +138 -0
  223. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializer.java +31 -0
  224. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializers.java +21 -0
  225. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MapperConfig.java +1154 -0
  226. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingIterator.java +190 -0
  227. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingJsonFactory.java +81 -0
  228. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Module.java +255 -0
  229. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectMapper.java +2885 -0
  230. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectReader.java +958 -0
  231. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectWriter.java +554 -0
  232. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/PropertyNamingStrategy.java +258 -0
  233. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableDeserializer.java +23 -0
  234. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableSerializer.java +23 -0
  235. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/RuntimeJsonMappingException.java +21 -0
  236. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializationConfig.java +1041 -0
  237. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerFactory.java +198 -0
  238. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerProvider.java +552 -0
  239. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Serializers.java +137 -0
  240. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeDeserializer.java +118 -0
  241. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeSerializer.java +164 -0
  242. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonInject.java +30 -0
  243. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonStdImpl.java +25 -0
  244. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonCachable.java +32 -0
  245. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonDeserialize.java +109 -0
  246. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonFilter.java +31 -0
  247. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonRootName.java +29 -0
  248. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonSerialize.java +216 -0
  249. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeIdResolver.java +35 -0
  250. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeResolver.java +28 -0
  251. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonValueInstantiator.java +26 -0
  252. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonView.java +37 -0
  253. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/NoClass.java +19 -0
  254. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/package-info.java +5 -0
  255. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/AbstractDeserializer.java +102 -0
  256. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializer.java +28 -0
  257. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializers.java +11 -0
  258. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BasicDeserializerFactory.java +894 -0
  259. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializer.java +1537 -0
  260. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerBuilder.java +277 -0
  261. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerFactory.java +1474 -0
  262. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerModifier.java +58 -0
  263. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CollectionDeserializer.java +47 -0
  264. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ContainerDeserializer.java +14 -0
  265. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CustomDeserializerFactory.java +227 -0
  266. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/DateDeserializer.java +9 -0
  267. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumDeserializer.java +15 -0
  268. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumResolver.java +17 -0
  269. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/FromStringDeserializer.java +13 -0
  270. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/JsonNodeDeserializer.java +54 -0
  271. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/MapDeserializer.java +44 -0
  272. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableAnyProperty.java +177 -0
  273. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableBeanProperty.java +827 -0
  274. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializationContext.java +326 -0
  275. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializer.java +94 -0
  276. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializerProvider.java +494 -0
  277. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializers.java +119 -0
  278. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializer.java +12 -0
  279. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializers.java +11 -0
  280. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdScalarDeserializer.java +13 -0
  281. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ThrowableDeserializer.java +13 -0
  282. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/UntypedObjectDeserializer.java +9 -0
  283. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiator.java +280 -0
  284. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiators.java +52 -0
  285. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/BeanPropertyMap.java +257 -0
  286. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorCollector.java +141 -0
  287. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorProperty.java +152 -0
  288. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java +173 -0
  289. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java +117 -0
  290. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValue.java +117 -0
  291. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValueBuffer.java +102 -0
  292. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/UnwrappedPropertyHandler.java +41 -0
  293. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ValueInjector.java +45 -0
  294. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/package-info.java +9 -0
  295. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/package-info.java +5 -0
  296. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicBooleanDeserializer.java +22 -0
  297. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicReferenceDeserializer.java +47 -0
  298. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CalendarDeserializer.java +47 -0
  299. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ClassDeserializer.java +49 -0
  300. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CollectionDeserializer.java +265 -0
  301. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ContainerDeserializerBase.java +37 -0
  302. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/DateDeserializer.java +30 -0
  303. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumDeserializer.java +139 -0
  304. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumMapDeserializer.java +90 -0
  305. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumSetDeserializer.java +89 -0
  306. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/FromStringDeserializer.java +265 -0
  307. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JavaTypeDeserializer.java +38 -0
  308. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JsonNodeDeserializer.java +314 -0
  309. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/MapDeserializer.java +412 -0
  310. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ObjectArrayDeserializer.java +201 -0
  311. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/PrimitiveArrayDeserializers.java +583 -0
  312. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdDeserializer.java +1136 -0
  313. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializer.java +340 -0
  314. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializers.java +108 -0
  315. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdScalarDeserializer.java +34 -0
  316. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdValueInstantiator.java +392 -0
  317. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringCollectionDeserializer.java +227 -0
  318. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringDeserializer.java +55 -0
  319. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ThrowableDeserializer.java +164 -0
  320. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TimestampDeserializer.java +30 -0
  321. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TokenBufferDeserializer.java +36 -0
  322. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/UntypedObjectDeserializer.java +248 -0
  323. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/package-info.java +15 -0
  324. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/exc/UnrecognizedPropertyException.java +75 -0
  325. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/CoreXMLDeserializers.java +114 -0
  326. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/CoreXMLSerializers.java +72 -0
  327. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/DOMDeserializer.java +65 -0
  328. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/OptionalHandlerFactory.java +217 -0
  329. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/package-info.java +23 -0
  330. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/Annotated.java +85 -0
  331. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedClass.java +980 -0
  332. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedConstructor.java +143 -0
  333. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedField.java +119 -0
  334. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMember.java +56 -0
  335. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethod.java +188 -0
  336. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethodMap.java +85 -0
  337. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedParameter.java +191 -0
  338. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedWithParams.java +195 -0
  339. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotationMap.java +101 -0
  340. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicBeanDescription.java +615 -0
  341. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicClassIntrospector.java +364 -0
  342. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/JacksonAnnotationIntrospector.java +813 -0
  343. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MemberKey.java +83 -0
  344. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MethodFilter.java +12 -0
  345. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/NopAnnotationIntrospector.java +209 -0
  346. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertiesCollector.java +713 -0
  347. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertyBuilder.java +648 -0
  348. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/VisibilityChecker.java +424 -0
  349. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/package-info.java +12 -0
  350. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/NamedType.java +53 -0
  351. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/SubtypeResolver.java +39 -0
  352. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeIdResolver.java +74 -0
  353. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeResolverBuilder.java +151 -0
  354. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeDeserializer.java +126 -0
  355. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeSerializer.java +110 -0
  356. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeDeserializer.java +37 -0
  357. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeSerializer.java +129 -0
  358. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeDeserializer.java +191 -0
  359. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeSerializer.java +69 -0
  360. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeDeserializer.java +103 -0
  361. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeSerializer.java +121 -0
  362. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/ClassNameIdResolver.java +138 -0
  363. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/MinimalClassNameIdResolver.java +66 -0
  364. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdSubtypeResolver.java +151 -0
  365. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdTypeResolverBuilder.java +202 -0
  366. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeDeserializerBase.java +154 -0
  367. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeIdResolverBase.java +37 -0
  368. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeNameIdResolver.java +154 -0
  369. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeSerializerBase.java +31 -0
  370. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/package-info.java +9 -0
  371. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/package-info.java +10 -0
  372. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleAbstractTypeResolver.java +86 -0
  373. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleDeserializers.java +130 -0
  374. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleKeyDeserializers.java +59 -0
  375. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleModule.java +265 -0
  376. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleSerializers.java +206 -0
  377. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleValueInstantiators.java +45 -0
  378. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/package-info.java +16 -0
  379. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/package-info.java +34 -0
  380. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/AnyGetterWriter.java +48 -0
  381. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ArraySerializers.java +7 -0
  382. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BasicSerializerFactory.java +806 -0
  383. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyFilter.java +30 -0
  384. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyWriter.java +512 -0
  385. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializer.java +126 -0
  386. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerBuilder.java +140 -0
  387. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerFactory.java +780 -0
  388. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerModifier.java +95 -0
  389. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ContainerSerializers.java +8 -0
  390. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/CustomSerializerFactory.java +293 -0
  391. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/EnumSerializer.java +17 -0
  392. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilterProvider.java +23 -0
  393. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilteredBeanPropertyWriter.java +96 -0
  394. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/JdkSerializers.java +11 -0
  395. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/MapSerializer.java +58 -0
  396. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/PropertyBuilder.java +372 -0
  397. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ScalarSerializerBase.java +18 -0
  398. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/SerializerBase.java +23 -0
  399. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdKeySerializer.java +10 -0
  400. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializerProvider.java +852 -0
  401. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializers.java +372 -0
  402. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ToStringSerializer.java +14 -0
  403. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/FailingSerializer.java +43 -0
  404. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/JsonSerializerMap.java +93 -0
  405. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/PropertySerializerMap.java +231 -0
  406. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/ReadOnlyClassToSerializerMap.java +73 -0
  407. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SerializerCache.java +304 -0
  408. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleBeanPropertyFilter.java +109 -0
  409. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleFilterProvider.java +114 -0
  410. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnknownSerializer.java +54 -0
  411. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanPropertyWriter.java +99 -0
  412. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanSerializer.java +76 -0
  413. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/package-info.java +5 -0
  414. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/package-info.java +5 -0
  415. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/AsArraySerializerBase.java +185 -0
  416. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/BeanSerializerBase.java +340 -0
  417. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CalendarSerializer.java +43 -0
  418. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CollectionSerializer.java +113 -0
  419. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ContainerSerializerBase.java +51 -0
  420. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/DateSerializer.java +42 -0
  421. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumMapSerializer.java +218 -0
  422. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSerializer.java +84 -0
  423. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSetSerializer.java +47 -0
  424. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IndexedStringListSerializer.java +116 -0
  425. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/InetAddressSerializer.java +51 -0
  426. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IterableSerializer.java +63 -0
  427. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/JsonValueSerializer.java +233 -0
  428. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/MapSerializer.java +422 -0
  429. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NonTypedScalarSerializerBase.java +34 -0
  430. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NullSerializer.java +38 -0
  431. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ObjectArraySerializer.java +281 -0
  432. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/RawSerializer.java +52 -0
  433. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ScalarSerializerBase.java +52 -0
  434. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableSerializer.java +99 -0
  435. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableWithTypeSerializer.java +90 -0
  436. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializerBase.java +184 -0
  437. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StaticListSerializerBase.java +46 -0
  438. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdArraySerializers.java +476 -0
  439. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdContainerSerializers.java +249 -0
  440. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdJdkSerializers.java +195 -0
  441. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializer.java +43 -0
  442. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializers.java +95 -0
  443. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringCollectionSerializer.java +119 -0
  444. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringSerializer.java +36 -0
  445. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TimeZoneSerializer.java +38 -0
  446. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ToStringSerializer.java +73 -0
  447. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TokenBufferSerializer.java +66 -0
  448. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ArrayType.java +260 -0
  449. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ClassKey.java +94 -0
  450. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionLikeType.java +204 -0
  451. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionType.java +94 -0
  452. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/HierarchicType.java +88 -0
  453. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapLikeType.java +265 -0
  454. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapType.java +146 -0
  455. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/SimpleType.java +250 -0
  456. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBase.java +148 -0
  457. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBindings.java +351 -0
  458. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeFactory.java +1165 -0
  459. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeModifier.java +38 -0
  460. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeParser.java +134 -0
  461. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/package-info.java +10 -0
  462. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Annotations.java +23 -0
  463. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ArrayBuilders.java +293 -0
  464. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/BeanUtil.java +260 -0
  465. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ClassUtil.java +645 -0
  466. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Comparators.java +48 -0
  467. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumResolver.java +108 -0
  468. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumValues.java +82 -0
  469. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601DateFormat.java +52 -0
  470. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601Utils.java +230 -0
  471. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONPObject.java +105 -0
  472. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONWrappedObject.java +117 -0
  473. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LRUMap.java +28 -0
  474. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LinkedNode.java +45 -0
  475. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Named.java +10 -0
  476. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ObjectBuffer.java +257 -0
  477. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/PrimitiveArrayBuilder.java +180 -0
  478. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Provider.java +21 -0
  479. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/RootNameLookup.java +54 -0
  480. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/StdDateFormat.java +348 -0
  481. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/package-info.java +4 -0
  482. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ArrayNode.java +758 -0
  483. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BaseJsonNode.java +122 -0
  484. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BigIntegerNode.java +104 -0
  485. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BinaryNode.java +136 -0
  486. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BooleanNode.java +84 -0
  487. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ContainerNode.java +185 -0
  488. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DecimalNode.java +96 -0
  489. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DoubleNode.java +106 -0
  490. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/IntNode.java +122 -0
  491. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/JsonNodeFactory.java +222 -0
  492. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/LongNode.java +99 -0
  493. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/MissingNode.java +97 -0
  494. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NodeCursor.java +222 -0
  495. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NullNode.java +58 -0
  496. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NumericNode.java +72 -0
  497. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ObjectNode.java +696 -0
  498. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/POJONode.java +145 -0
  499. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TextNode.java +299 -0
  500. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TreeTraversingParser.java +383 -0
  501. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ValueNode.java +58 -0
  502. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/package-info.java +8 -0
  503. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/package-info.java +30 -0
  504. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSchema.java +82 -0
  505. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSerializableSchema.java +46 -0
  506. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/SchemaAware.java +25 -0
  507. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/package-info.java +5 -0
  508. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/BytesToNameCanonicalizer.java +969 -0
  509. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/CharsToNameCanonicalizer.java +578 -0
  510. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name.java +50 -0
  511. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name1.java +44 -0
  512. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name2.java +40 -0
  513. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name3.java +39 -0
  514. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/NameN.java +68 -0
  515. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/package-info.java +5 -0
  516. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/JavaType.java +503 -0
  517. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/TypeReference.java +60 -0
  518. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/package-info.java +8 -0
  519. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/BufferRecycler.java +109 -0
  520. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/ByteArrayBuilder.java +294 -0
  521. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/CharTypes.java +237 -0
  522. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/DefaultPrettyPrinter.java +282 -0
  523. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/InternCache.java +49 -0
  524. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonGeneratorDelegate.java +273 -0
  525. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserDelegate.java +251 -0
  526. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserSequence.java +150 -0
  527. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/MinimalPrettyPrinter.java +152 -0
  528. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TextBuffer.java +707 -0
  529. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TokenBuffer.java +1233 -0
  530. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/VersionUtil.java +79 -0
  531. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/package-info.java +4 -0
  532. metadata +619 -0
@@ -0,0 +1,188 @@
1
+ package sh.calaba.org.codehaus.jackson.impl;
2
+
3
+ import sh.calaba.org.codehaus.jackson.*;
4
+ import sh.calaba.org.codehaus.jackson.util.CharTypes;
5
+
6
+ /**
7
+ * Extension of {@link JsonStreamContext}, which implements
8
+ * core methods needed, and also exposes
9
+ * more complete API to parser implementation classes.
10
+ */
11
+ public final class JsonReadContext
12
+ extends JsonStreamContext
13
+ {
14
+ // // // Configuration
15
+
16
+ protected final JsonReadContext _parent;
17
+
18
+ // // // Location information (minus source reference)
19
+
20
+ protected int _lineNr;
21
+ protected int _columnNr;
22
+
23
+ protected String _currentName;
24
+
25
+ /*
26
+ /**********************************************************
27
+ /* Simple instance reuse slots; speeds up things
28
+ /* a bit (10-15%) for docs with lots of small
29
+ /* arrays/objects (for which allocation was
30
+ /* visible in profile stack frames)
31
+ /**********************************************************
32
+ */
33
+
34
+ protected JsonReadContext _child = null;
35
+
36
+ /*
37
+ /**********************************************************
38
+ /* Instance construction, reuse
39
+ /**********************************************************
40
+ */
41
+
42
+ public JsonReadContext(JsonReadContext parent, int type, int lineNr, int colNr)
43
+ {
44
+ super();
45
+ _type = type;
46
+ _parent = parent;
47
+ _lineNr = lineNr;
48
+ _columnNr = colNr;
49
+ _index = -1;
50
+ }
51
+
52
+ protected final void reset(int type, int lineNr, int colNr)
53
+ {
54
+ _type = type;
55
+ _index = -1;
56
+ _lineNr = lineNr;
57
+ _columnNr = colNr;
58
+ _currentName = null;
59
+ }
60
+
61
+ // // // Factory methods
62
+
63
+ public static JsonReadContext createRootContext(int lineNr, int colNr)
64
+ {
65
+ return new JsonReadContext(null, TYPE_ROOT, lineNr, colNr);
66
+ }
67
+
68
+ /**
69
+ * @since 1.9
70
+ */
71
+ public static JsonReadContext createRootContext()
72
+ {
73
+ return new JsonReadContext(null, TYPE_ROOT, 1, 0);
74
+ }
75
+
76
+ public final JsonReadContext createChildArrayContext(int lineNr, int colNr)
77
+ {
78
+ JsonReadContext ctxt = _child;
79
+ if (ctxt == null) {
80
+ _child = ctxt = new JsonReadContext(this, TYPE_ARRAY, lineNr, colNr);
81
+ return ctxt;
82
+ }
83
+ ctxt.reset(TYPE_ARRAY, lineNr, colNr);
84
+ return ctxt;
85
+ }
86
+
87
+ public final JsonReadContext createChildObjectContext(int lineNr, int colNr)
88
+ {
89
+ JsonReadContext ctxt = _child;
90
+ if (ctxt == null) {
91
+ _child = ctxt = new JsonReadContext(this, TYPE_OBJECT, lineNr, colNr);
92
+ return ctxt;
93
+ }
94
+ ctxt.reset(TYPE_OBJECT, lineNr, colNr);
95
+ return ctxt;
96
+ }
97
+
98
+ /*
99
+ /**********************************************************
100
+ /* Abstract method implementation
101
+ /**********************************************************
102
+ */
103
+
104
+ @Override
105
+ public final String getCurrentName() { return _currentName; }
106
+
107
+ @Override
108
+ public final JsonReadContext getParent() { return _parent; }
109
+
110
+ /*
111
+ /**********************************************************
112
+ /* Extended API
113
+ /**********************************************************
114
+ */
115
+
116
+ /**
117
+ * @return Location pointing to the point where the context
118
+ * start marker was found
119
+ */
120
+ public final JsonLocation getStartLocation(Object srcRef)
121
+ {
122
+ /* We don't keep track of offsets at this level (only
123
+ * reader does)
124
+ */
125
+ long totalChars = -1L;
126
+
127
+ return new JsonLocation(srcRef, totalChars, _lineNr, _columnNr);
128
+ }
129
+
130
+ /*
131
+ /**********************************************************
132
+ /* State changes
133
+ /**********************************************************
134
+ */
135
+
136
+ public final boolean expectComma()
137
+ {
138
+ /* Assumption here is that we will be getting a value (at least
139
+ * before calling this method again), and
140
+ * so will auto-increment index to avoid having to do another call
141
+ */
142
+ int ix = ++_index; // starts from -1
143
+ return (_type != TYPE_ROOT && ix > 0);
144
+ }
145
+
146
+ public void setCurrentName(String name)
147
+ {
148
+ _currentName = name;
149
+ }
150
+
151
+ /*
152
+ /**********************************************************
153
+ /* Overridden standard methods
154
+ /**********************************************************
155
+ */
156
+
157
+ /**
158
+ * Overridden to provide developer readable "JsonPath" representation
159
+ * of the context.
160
+ */
161
+ @Override
162
+ public final String toString()
163
+ {
164
+ StringBuilder sb = new StringBuilder(64);
165
+ switch (_type) {
166
+ case TYPE_ROOT:
167
+ sb.append("/");
168
+ break;
169
+ case TYPE_ARRAY:
170
+ sb.append('[');
171
+ sb.append(getCurrentIndex());
172
+ sb.append(']');
173
+ break;
174
+ case TYPE_OBJECT:
175
+ sb.append('{');
176
+ if (_currentName != null) {
177
+ sb.append('"');
178
+ CharTypes.appendQuoted(sb, _currentName);
179
+ sb.append('"');
180
+ } else {
181
+ sb.append('?');
182
+ }
183
+ sb.append('}');
184
+ break;
185
+ }
186
+ return sb.toString();
187
+ }
188
+ }
@@ -0,0 +1,178 @@
1
+ package sh.calaba.org.codehaus.jackson.impl;
2
+
3
+ import sh.calaba.org.codehaus.jackson.*;
4
+
5
+ /**
6
+ * Extension of {@link JsonStreamContext}, which implements
7
+ * core methods needed, and also exposes
8
+ * more complete API to generator implementation classes.
9
+ */
10
+ public class JsonWriteContext
11
+ extends JsonStreamContext
12
+ {
13
+ // // // Return values for writeValue()
14
+
15
+ public final static int STATUS_OK_AS_IS = 0;
16
+ public final static int STATUS_OK_AFTER_COMMA = 1;
17
+ public final static int STATUS_OK_AFTER_COLON = 2;
18
+ public final static int STATUS_OK_AFTER_SPACE = 3; // in root context
19
+ public final static int STATUS_EXPECT_VALUE = 4;
20
+ public final static int STATUS_EXPECT_NAME = 5;
21
+
22
+ protected final JsonWriteContext _parent;
23
+
24
+ /**
25
+ * Name of the field of which value is to be parsed; only
26
+ * used for OBJECT contexts
27
+ */
28
+ protected String _currentName;
29
+
30
+ /*
31
+ /**********************************************************
32
+ /* Simple instance reuse slots; speed up things
33
+ /* a bit (10-15%) for docs with lots of small
34
+ /* arrays/objects
35
+ /**********************************************************
36
+ */
37
+
38
+ protected JsonWriteContext _child = null;
39
+
40
+ /*
41
+ /**********************************************************
42
+ /* Life-cycle
43
+ /**********************************************************
44
+ */
45
+
46
+ protected JsonWriteContext(int type, JsonWriteContext parent)
47
+ {
48
+ super();
49
+ _type = type;
50
+ _parent = parent;
51
+ _index = -1;
52
+ }
53
+
54
+ // // // Factory methods
55
+
56
+ public static JsonWriteContext createRootContext()
57
+ {
58
+ return new JsonWriteContext(TYPE_ROOT, null);
59
+ }
60
+
61
+ private final JsonWriteContext reset(int type) {
62
+ _type = type;
63
+ _index = -1;
64
+ _currentName = null;
65
+ return this;
66
+ }
67
+
68
+ public final JsonWriteContext createChildArrayContext()
69
+ {
70
+ JsonWriteContext ctxt = _child;
71
+ if (ctxt == null) {
72
+ _child = ctxt = new JsonWriteContext(TYPE_ARRAY, this);
73
+ return ctxt;
74
+ }
75
+ return ctxt.reset(TYPE_ARRAY);
76
+ }
77
+
78
+ public final JsonWriteContext createChildObjectContext()
79
+ {
80
+ JsonWriteContext ctxt = _child;
81
+ if (ctxt == null) {
82
+ _child = ctxt = new JsonWriteContext(TYPE_OBJECT, this);
83
+ return ctxt;
84
+ }
85
+ return ctxt.reset(TYPE_OBJECT);
86
+ }
87
+
88
+ // // // Shared API
89
+
90
+ @Override
91
+ public final JsonWriteContext getParent() { return _parent; }
92
+
93
+ @Override
94
+ public final String getCurrentName() { return _currentName; }
95
+
96
+ // // // API sub-classes are to implement
97
+
98
+ /**
99
+ * Method that writer is to call before it writes a field name.
100
+ *
101
+ * @return Index of the field entry (0-based)
102
+ */
103
+ public final int writeFieldName(String name)
104
+ {
105
+ if (_type == TYPE_OBJECT) {
106
+ if (_currentName != null) { // just wrote a name...
107
+ return STATUS_EXPECT_VALUE;
108
+ }
109
+ _currentName = name;
110
+ return (_index < 0) ? STATUS_OK_AS_IS : STATUS_OK_AFTER_COMMA;
111
+ }
112
+ return STATUS_EXPECT_VALUE;
113
+ }
114
+
115
+ public final int writeValue()
116
+ {
117
+ // Most likely, object:
118
+ if (_type == TYPE_OBJECT) {
119
+ if (_currentName == null) {
120
+ return STATUS_EXPECT_NAME;
121
+ }
122
+ _currentName = null;
123
+ ++_index;
124
+ return STATUS_OK_AFTER_COLON;
125
+ }
126
+
127
+ // Ok, array?
128
+ if (_type == TYPE_ARRAY) {
129
+ int ix = _index;
130
+ ++_index;
131
+ return (ix < 0) ? STATUS_OK_AS_IS : STATUS_OK_AFTER_COMMA;
132
+ }
133
+
134
+ // Nope, root context
135
+ // No commas within root context, but need space
136
+ ++_index;
137
+ return (_index == 0) ? STATUS_OK_AS_IS : STATUS_OK_AFTER_SPACE;
138
+ }
139
+
140
+ // // // Internally used abstract methods
141
+
142
+ protected final void appendDesc(StringBuilder sb)
143
+ {
144
+ if (_type == TYPE_OBJECT) {
145
+ sb.append('{');
146
+ if (_currentName != null) {
147
+ sb.append('"');
148
+ // !!! TODO: Name chars should be escaped?
149
+ sb.append(_currentName);
150
+ sb.append('"');
151
+ } else {
152
+ sb.append('?');
153
+ }
154
+ sb.append('}');
155
+ } else if (_type == TYPE_ARRAY) {
156
+ sb.append('[');
157
+ sb.append(getCurrentIndex());
158
+ sb.append(']');
159
+ } else {
160
+ // nah, ROOT:
161
+ sb.append("/");
162
+ }
163
+ }
164
+
165
+ // // // Overridden standard methods
166
+
167
+ /**
168
+ * Overridden to provide developer writeable "JsonPath" representation
169
+ * of the context.
170
+ */
171
+ @Override
172
+ public final String toString()
173
+ {
174
+ StringBuilder sb = new StringBuilder(64);
175
+ appendDesc(sb);
176
+ return sb.toString();
177
+ }
178
+ }
@@ -0,0 +1,1815 @@
1
+ package sh.calaba.org.codehaus.jackson.impl;
2
+
3
+ import java.io.*;
4
+
5
+ import sh.calaba.org.codehaus.jackson.*;
6
+ import sh.calaba.org.codehaus.jackson.io.IOContext;
7
+ import sh.calaba.org.codehaus.jackson.sym.CharsToNameCanonicalizer;
8
+ import sh.calaba.org.codehaus.jackson.util.*;
9
+
10
+ /**
11
+ * This is a concrete implementation of {@link JsonParser}, which is
12
+ * based on a {@link java.io.Reader} to handle low-level character
13
+ * conversion tasks.
14
+ */
15
+ public final class ReaderBasedParser
16
+ extends JsonParserBase
17
+ {
18
+ /*
19
+ /**********************************************************
20
+ /* Input configuration
21
+ /**********************************************************
22
+ */
23
+
24
+ /**
25
+ * Reader that can be used for reading more content, if one
26
+ * buffer from input source, but in some cases pre-loaded buffer
27
+ * is handed to the parser.
28
+ */
29
+ protected Reader _reader;
30
+
31
+ /**
32
+ * Current buffer from which data is read; generally data is read into
33
+ * buffer from input source.
34
+ */
35
+ protected char[] _inputBuffer;
36
+
37
+ /*
38
+ /**********************************************************
39
+ /* Configuration
40
+ /**********************************************************
41
+ */
42
+
43
+ protected ObjectCodec _objectCodec;
44
+
45
+ final protected CharsToNameCanonicalizer _symbols;
46
+
47
+ /*
48
+ /**********************************************************
49
+ /* Parsing state
50
+ /**********************************************************
51
+ */
52
+
53
+ /**
54
+ * Flag that indicates that the current token has not yet
55
+ * been fully processed, and needs to be finished for
56
+ * some access (or skipped to obtain the next token)
57
+ */
58
+ protected boolean _tokenIncomplete = false;
59
+
60
+ /*
61
+ /**********************************************************
62
+ /* Life-cycle
63
+ /**********************************************************
64
+ */
65
+
66
+ public ReaderBasedParser(IOContext ctxt, int features, Reader r,
67
+ ObjectCodec codec, CharsToNameCanonicalizer st)
68
+ {
69
+ super(ctxt, features);
70
+ _reader = r;
71
+ _inputBuffer = ctxt.allocTokenBuffer();
72
+ _objectCodec = codec;
73
+ _symbols = st;
74
+ }
75
+
76
+ /*
77
+ /**********************************************************
78
+ /* Base method defs, overrides
79
+ /**********************************************************
80
+ */
81
+
82
+ @Override
83
+ public ObjectCodec getCodec() {
84
+ return _objectCodec;
85
+ }
86
+
87
+ @Override
88
+ public void setCodec(ObjectCodec c) {
89
+ _objectCodec = c;
90
+ }
91
+
92
+ @Override
93
+ public int releaseBuffered(Writer w) throws IOException
94
+ {
95
+ int count = _inputEnd - _inputPtr;
96
+ if (count < 1) {
97
+ return 0;
98
+ }
99
+ // let's just advance ptr to end
100
+ int origPtr = _inputPtr;
101
+ w.write(_inputBuffer, origPtr, count);
102
+ return count;
103
+ }
104
+
105
+ @Override
106
+ public Object getInputSource() {
107
+ return _reader;
108
+ }
109
+
110
+ @Override
111
+ protected final boolean loadMore() throws IOException
112
+ {
113
+ _currInputProcessed += _inputEnd;
114
+ _currInputRowStart -= _inputEnd;
115
+
116
+ if (_reader != null) {
117
+ int count = _reader.read(_inputBuffer, 0, _inputBuffer.length);
118
+ if (count > 0) {
119
+ _inputPtr = 0;
120
+ _inputEnd = count;
121
+ return true;
122
+ }
123
+ // End of input
124
+ _closeInput();
125
+ // Should never return 0, so let's fail
126
+ if (count == 0) {
127
+ throw new IOException("Reader returned 0 characters when trying to read "+_inputEnd);
128
+ }
129
+ }
130
+ return false;
131
+ }
132
+
133
+ protected char getNextChar(String eofMsg)
134
+ throws IOException, JsonParseException
135
+ {
136
+ if (_inputPtr >= _inputEnd) {
137
+ if (!loadMore()) {
138
+ _reportInvalidEOF(eofMsg);
139
+ }
140
+ }
141
+ return _inputBuffer[_inputPtr++];
142
+ }
143
+
144
+ @Override
145
+ protected void _closeInput() throws IOException
146
+ {
147
+ /* 25-Nov-2008, tatus: As per [JACKSON-16] we are not to call close()
148
+ * on the underlying Reader, unless we "own" it, or auto-closing
149
+ * feature is enabled.
150
+ * One downside is that when using our optimized
151
+ * Reader (granted, we only do that for UTF-32...) this
152
+ * means that buffer recycling won't work correctly.
153
+ */
154
+ if (_reader != null) {
155
+ if (_ioContext.isResourceManaged() || isEnabled(Feature.AUTO_CLOSE_SOURCE)) {
156
+ _reader.close();
157
+ }
158
+ _reader = null;
159
+ }
160
+ }
161
+
162
+ /**
163
+ * Method called to release internal buffers owned by the base
164
+ * reader. This may be called along with {@link #_closeInput} (for
165
+ * example, when explicitly closing this reader instance), or
166
+ * separately (if need be).
167
+ */
168
+ @Override
169
+ protected void _releaseBuffers()
170
+ throws IOException
171
+ {
172
+ super._releaseBuffers();
173
+ char[] buf = _inputBuffer;
174
+ if (buf != null) {
175
+ _inputBuffer = null;
176
+ _ioContext.releaseTokenBuffer(buf);
177
+ }
178
+ }
179
+
180
+ /*
181
+ /**********************************************************
182
+ /* Public API, data access
183
+ /**********************************************************
184
+ */
185
+
186
+ /**
187
+ * Method for accessing textual representation of the current event;
188
+ * if no current event (before first call to {@link #nextToken}, or
189
+ * after encountering end-of-input), returns null.
190
+ * Method can be called for any event.
191
+ */
192
+ @Override
193
+ public final String getText()
194
+ throws IOException, JsonParseException
195
+ {
196
+ JsonToken t = _currToken;
197
+ if (t == JsonToken.VALUE_STRING) {
198
+ if (_tokenIncomplete) {
199
+ _tokenIncomplete = false;
200
+ _finishString(); // only strings can be incomplete
201
+ }
202
+ return _textBuffer.contentsAsString();
203
+ }
204
+ return _getText2(t);
205
+ }
206
+
207
+ protected final String _getText2(JsonToken t)
208
+ {
209
+ if (t == null) {
210
+ return null;
211
+ }
212
+ switch (t) {
213
+ case FIELD_NAME:
214
+ return _parsingContext.getCurrentName();
215
+
216
+ case VALUE_STRING:
217
+ // fall through
218
+ case VALUE_NUMBER_INT:
219
+ case VALUE_NUMBER_FLOAT:
220
+ return _textBuffer.contentsAsString();
221
+ }
222
+ return t.asString();
223
+ }
224
+
225
+ @Override
226
+ public char[] getTextCharacters()
227
+ throws IOException, JsonParseException
228
+ {
229
+ if (_currToken != null) { // null only before/after document
230
+ switch (_currToken) {
231
+
232
+ case FIELD_NAME:
233
+ if (!_nameCopied) {
234
+ String name = _parsingContext.getCurrentName();
235
+ int nameLen = name.length();
236
+ if (_nameCopyBuffer == null) {
237
+ _nameCopyBuffer = _ioContext.allocNameCopyBuffer(nameLen);
238
+ } else if (_nameCopyBuffer.length < nameLen) {
239
+ _nameCopyBuffer = new char[nameLen];
240
+ }
241
+ name.getChars(0, nameLen, _nameCopyBuffer, 0);
242
+ _nameCopied = true;
243
+ }
244
+ return _nameCopyBuffer;
245
+
246
+ case VALUE_STRING:
247
+ if (_tokenIncomplete) {
248
+ _tokenIncomplete = false;
249
+ _finishString(); // only strings can be incomplete
250
+ }
251
+ // fall through
252
+ case VALUE_NUMBER_INT:
253
+ case VALUE_NUMBER_FLOAT:
254
+ return _textBuffer.getTextBuffer();
255
+
256
+ default:
257
+ return _currToken.asCharArray();
258
+ }
259
+ }
260
+ return null;
261
+ }
262
+
263
+ @Override
264
+ public int getTextLength()
265
+ throws IOException, JsonParseException
266
+ {
267
+ if (_currToken != null) { // null only before/after document
268
+ switch (_currToken) {
269
+
270
+ case FIELD_NAME:
271
+ return _parsingContext.getCurrentName().length();
272
+ case VALUE_STRING:
273
+ if (_tokenIncomplete) {
274
+ _tokenIncomplete = false;
275
+ _finishString(); // only strings can be incomplete
276
+ }
277
+ // fall through
278
+ case VALUE_NUMBER_INT:
279
+ case VALUE_NUMBER_FLOAT:
280
+ return _textBuffer.size();
281
+
282
+ default:
283
+ return _currToken.asCharArray().length;
284
+ }
285
+ }
286
+ return 0;
287
+ }
288
+
289
+ @Override
290
+ public int getTextOffset() throws IOException, JsonParseException
291
+ {
292
+ // Most have offset of 0, only some may have other values:
293
+ if (_currToken != null) {
294
+ switch (_currToken) {
295
+ case FIELD_NAME:
296
+ return 0;
297
+ case VALUE_STRING:
298
+ if (_tokenIncomplete) {
299
+ _tokenIncomplete = false;
300
+ _finishString(); // only strings can be incomplete
301
+ }
302
+ // fall through
303
+ case VALUE_NUMBER_INT:
304
+ case VALUE_NUMBER_FLOAT:
305
+ return _textBuffer.getTextOffset();
306
+ }
307
+ }
308
+ return 0;
309
+ }
310
+
311
+ @Override
312
+ public byte[] getBinaryValue(Base64Variant b64variant)
313
+ throws IOException, JsonParseException
314
+ {
315
+ if (_currToken != JsonToken.VALUE_STRING &&
316
+ (_currToken != JsonToken.VALUE_EMBEDDED_OBJECT || _binaryValue == null)) {
317
+ _reportError("Current token ("+_currToken+") not VALUE_STRING or VALUE_EMBEDDED_OBJECT, can not access as binary");
318
+ }
319
+ /* To ensure that we won't see inconsistent data, better clear up
320
+ * state...
321
+ */
322
+ if (_tokenIncomplete) {
323
+ try {
324
+ _binaryValue = _decodeBase64(b64variant);
325
+ } catch (IllegalArgumentException iae) {
326
+ throw _constructError("Failed to decode VALUE_STRING as base64 ("+b64variant+"): "+iae.getMessage());
327
+ }
328
+ /* let's clear incomplete only now; allows for accessing other
329
+ * textual content in error cases
330
+ */
331
+ _tokenIncomplete = false;
332
+ } else { // may actually require conversion...
333
+ if (_binaryValue == null) {
334
+ ByteArrayBuilder builder = _getByteArrayBuilder();
335
+ _decodeBase64(getText(), builder, b64variant);
336
+ _binaryValue = builder.toByteArray();
337
+ }
338
+ }
339
+ return _binaryValue;
340
+ }
341
+
342
+ /*
343
+ /**********************************************************
344
+ /* Public API, traversal
345
+ /**********************************************************
346
+ */
347
+
348
+ /**
349
+ * @return Next token from the stream, if any found, or null
350
+ * to indicate end-of-input
351
+ */
352
+ @Override
353
+ public JsonToken nextToken()
354
+ throws IOException, JsonParseException
355
+ {
356
+ _numTypesValid = NR_UNKNOWN;
357
+
358
+ /* First: field names are special -- we will always tokenize
359
+ * (part of) value along with field name to simplify
360
+ * state handling. If so, can and need to use secondary token:
361
+ */
362
+ if (_currToken == JsonToken.FIELD_NAME) {
363
+ return _nextAfterName();
364
+ }
365
+ if (_tokenIncomplete) {
366
+ _skipString(); // only strings can be partial
367
+ }
368
+ int i = _skipWSOrEnd();
369
+ if (i < 0) { // end-of-input
370
+ /* 19-Feb-2009, tatu: Should actually close/release things
371
+ * like input source, symbol table and recyclable buffers now.
372
+ */
373
+ close();
374
+ return (_currToken = null);
375
+ }
376
+
377
+ /* First, need to ensure we know the starting location of token
378
+ * after skipping leading white space
379
+ */
380
+ _tokenInputTotal = _currInputProcessed + _inputPtr - 1;
381
+ _tokenInputRow = _currInputRow;
382
+ _tokenInputCol = _inputPtr - _currInputRowStart - 1;
383
+
384
+ // finally: clear any data retained so far
385
+ _binaryValue = null;
386
+
387
+ // Closing scope?
388
+ if (i == INT_RBRACKET) {
389
+ if (!_parsingContext.inArray()) {
390
+ _reportMismatchedEndMarker(i, '}');
391
+ }
392
+ _parsingContext = _parsingContext.getParent();
393
+ return (_currToken = JsonToken.END_ARRAY);
394
+ }
395
+ if (i == INT_RCURLY) {
396
+ if (!_parsingContext.inObject()) {
397
+ _reportMismatchedEndMarker(i, ']');
398
+ }
399
+ _parsingContext = _parsingContext.getParent();
400
+ return (_currToken = JsonToken.END_OBJECT);
401
+ }
402
+
403
+ // Nope: do we then expect a comma?
404
+ if (_parsingContext.expectComma()) {
405
+ if (i != INT_COMMA) {
406
+ _reportUnexpectedChar(i, "was expecting comma to separate "+_parsingContext.getTypeDesc()+" entries");
407
+ }
408
+ i = _skipWS();
409
+ }
410
+
411
+ /* And should we now have a name? Always true for
412
+ * Object contexts, since the intermediate 'expect-value'
413
+ * state is never retained.
414
+ */
415
+ boolean inObject = _parsingContext.inObject();
416
+ if (inObject) {
417
+ // First, field name itself:
418
+ String name = _parseFieldName(i);
419
+ _parsingContext.setCurrentName(name);
420
+ _currToken = JsonToken.FIELD_NAME;
421
+ i = _skipWS();
422
+ if (i != INT_COLON) {
423
+ _reportUnexpectedChar(i, "was expecting a colon to separate field name and value");
424
+ }
425
+ i = _skipWS();
426
+ }
427
+
428
+ // Ok: we must have a value... what is it?
429
+
430
+ JsonToken t;
431
+
432
+ switch (i) {
433
+ case INT_QUOTE:
434
+ _tokenIncomplete = true;
435
+ t = JsonToken.VALUE_STRING;
436
+ break;
437
+ case INT_LBRACKET:
438
+ if (!inObject) {
439
+ _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
440
+ }
441
+ t = JsonToken.START_ARRAY;
442
+ break;
443
+ case INT_LCURLY:
444
+ if (!inObject) {
445
+ _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
446
+ }
447
+ t = JsonToken.START_OBJECT;
448
+ break;
449
+ case INT_RBRACKET:
450
+ case INT_RCURLY:
451
+ // Error: neither is valid at this point; valid closers have
452
+ // been handled earlier
453
+ _reportUnexpectedChar(i, "expected a value");
454
+ case INT_t:
455
+ _matchToken("true", 1);
456
+ t = JsonToken.VALUE_TRUE;
457
+ break;
458
+ case INT_f:
459
+ _matchToken("false", 1);
460
+ t = JsonToken.VALUE_FALSE;
461
+ break;
462
+ case INT_n:
463
+ _matchToken("null", 1);
464
+ t = JsonToken.VALUE_NULL;
465
+ break;
466
+
467
+ case INT_MINUS:
468
+ /* Should we have separate handling for plus? Although
469
+ * it is not allowed per se, it may be erroneously used,
470
+ * and could be indicate by a more specific error message.
471
+ */
472
+ case INT_0:
473
+ case INT_1:
474
+ case INT_2:
475
+ case INT_3:
476
+ case INT_4:
477
+ case INT_5:
478
+ case INT_6:
479
+ case INT_7:
480
+ case INT_8:
481
+ case INT_9:
482
+ t = parseNumberText(i);
483
+ break;
484
+ default:
485
+ t = _handleUnexpectedValue(i);
486
+ break;
487
+ }
488
+
489
+ if (inObject) {
490
+ _nextToken = t;
491
+ return _currToken;
492
+ }
493
+ _currToken = t;
494
+ return t;
495
+ }
496
+
497
+ private final JsonToken _nextAfterName()
498
+ {
499
+ _nameCopied = false; // need to invalidate if it was copied
500
+ JsonToken t = _nextToken;
501
+ _nextToken = null;
502
+ // Also: may need to start new context?
503
+ if (t == JsonToken.START_ARRAY) {
504
+ _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
505
+ } else if (t == JsonToken.START_OBJECT) {
506
+ _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
507
+ }
508
+ return (_currToken = t);
509
+ }
510
+
511
+ /*
512
+ @Override
513
+ public boolean nextFieldName(SerializableString str)
514
+ throws IOException, JsonParseException
515
+ */
516
+
517
+ // note: identical to one in Utf8StreamParser
518
+ @Override
519
+ public String nextTextValue()
520
+ throws IOException, JsonParseException
521
+ {
522
+ if (_currToken == JsonToken.FIELD_NAME) { // mostly copied from '_nextAfterName'
523
+ _nameCopied = false;
524
+ JsonToken t = _nextToken;
525
+ _nextToken = null;
526
+ _currToken = t;
527
+ if (t == JsonToken.VALUE_STRING) {
528
+ if (_tokenIncomplete) {
529
+ _tokenIncomplete = false;
530
+ _finishString();
531
+ }
532
+ return _textBuffer.contentsAsString();
533
+ }
534
+ if (t == JsonToken.START_ARRAY) {
535
+ _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
536
+ } else if (t == JsonToken.START_OBJECT) {
537
+ _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
538
+ }
539
+ return null;
540
+ }
541
+ // !!! TODO: optimize this case as well
542
+ return (nextToken() == JsonToken.VALUE_STRING) ? getText() : null;
543
+ }
544
+
545
+ // note: identical to one in Utf8StreamParser
546
+ @Override
547
+ public int nextIntValue(int defaultValue)
548
+ throws IOException, JsonParseException
549
+ {
550
+ if (_currToken == JsonToken.FIELD_NAME) {
551
+ _nameCopied = false;
552
+ JsonToken t = _nextToken;
553
+ _nextToken = null;
554
+ _currToken = t;
555
+ if (t == JsonToken.VALUE_NUMBER_INT) {
556
+ return getIntValue();
557
+ }
558
+ if (t == JsonToken.START_ARRAY) {
559
+ _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
560
+ } else if (t == JsonToken.START_OBJECT) {
561
+ _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
562
+ }
563
+ return defaultValue;
564
+ }
565
+ // !!! TODO: optimize this case as well
566
+ return (nextToken() == JsonToken.VALUE_NUMBER_INT) ? getIntValue() : defaultValue;
567
+ }
568
+
569
+ // note: identical to one in Utf8StreamParser
570
+ @Override
571
+ public long nextLongValue(long defaultValue)
572
+ throws IOException, JsonParseException
573
+ {
574
+ if (_currToken == JsonToken.FIELD_NAME) { // mostly copied from '_nextAfterName'
575
+ _nameCopied = false;
576
+ JsonToken t = _nextToken;
577
+ _nextToken = null;
578
+ _currToken = t;
579
+ if (t == JsonToken.VALUE_NUMBER_INT) {
580
+ return getLongValue();
581
+ }
582
+ if (t == JsonToken.START_ARRAY) {
583
+ _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
584
+ } else if (t == JsonToken.START_OBJECT) {
585
+ _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
586
+ }
587
+ return defaultValue;
588
+ }
589
+ // !!! TODO: optimize this case as well
590
+ return (nextToken() == JsonToken.VALUE_NUMBER_INT) ? getLongValue() : defaultValue;
591
+ }
592
+
593
+ // note: identical to one in Utf8StreamParser
594
+ @Override
595
+ public Boolean nextBooleanValue()
596
+ throws IOException, JsonParseException
597
+ {
598
+ if (_currToken == JsonToken.FIELD_NAME) { // mostly copied from '_nextAfterName'
599
+ _nameCopied = false;
600
+ JsonToken t = _nextToken;
601
+ _nextToken = null;
602
+ _currToken = t;
603
+ if (t == JsonToken.VALUE_TRUE) {
604
+ return Boolean.TRUE;
605
+ }
606
+ if (t == JsonToken.VALUE_FALSE) {
607
+ return Boolean.FALSE;
608
+ }
609
+ if (t == JsonToken.START_ARRAY) {
610
+ _parsingContext = _parsingContext.createChildArrayContext(_tokenInputRow, _tokenInputCol);
611
+ } else if (t == JsonToken.START_OBJECT) {
612
+ _parsingContext = _parsingContext.createChildObjectContext(_tokenInputRow, _tokenInputCol);
613
+ }
614
+ return null;
615
+ }
616
+ switch (nextToken()) {
617
+ case VALUE_TRUE:
618
+ return Boolean.TRUE;
619
+ case VALUE_FALSE:
620
+ return Boolean.FALSE;
621
+ }
622
+ return null;
623
+ }
624
+
625
+ @Override
626
+ public void close() throws IOException
627
+ {
628
+ super.close();
629
+ _symbols.release();
630
+ }
631
+
632
+ /*
633
+ /**********************************************************
634
+ /* Internal methods, number parsing
635
+ /* (note: in 1.8 and prior, part of "ReaderBasedNumericParser"
636
+ /**********************************************************
637
+ */
638
+
639
+ /**
640
+ * Initial parsing method for number values. It needs to be able
641
+ * to parse enough input to be able to determine whether the
642
+ * value is to be considered a simple integer value, or a more
643
+ * generic decimal value: latter of which needs to be expressed
644
+ * as a floating point number. The basic rule is that if the number
645
+ * has no fractional or exponential part, it is an integer; otherwise
646
+ * a floating point number.
647
+ *<p>
648
+ * Because much of input has to be processed in any case, no partial
649
+ * parsing is done: all input text will be stored for further
650
+ * processing. However, actual numeric value conversion will be
651
+ * deferred, since it is usually the most complicated and costliest
652
+ * part of processing.
653
+ */
654
+ protected final JsonToken parseNumberText(int ch)
655
+ throws IOException, JsonParseException
656
+ {
657
+ /* Although we will always be complete with respect to textual
658
+ * representation (that is, all characters will be parsed),
659
+ * actual conversion to a number is deferred. Thus, need to
660
+ * note that no representations are valid yet
661
+ */
662
+ boolean negative = (ch == INT_MINUS);
663
+ int ptr = _inputPtr;
664
+ int startPtr = ptr-1; // to include sign/digit already read
665
+ final int inputLen = _inputEnd;
666
+
667
+ dummy_loop:
668
+ do { // dummy loop, to be able to break out
669
+ if (negative) { // need to read the next digit
670
+ if (ptr >= _inputEnd) {
671
+ break dummy_loop;
672
+ }
673
+ ch = _inputBuffer[ptr++];
674
+ // First check: must have a digit to follow minus sign
675
+ if (ch > INT_9 || ch < INT_0) {
676
+ _inputPtr = ptr;
677
+ return _handleInvalidNumberStart(ch, true);
678
+ }
679
+ /* (note: has been checked for non-negative already, in
680
+ * the dispatching code that determined it should be
681
+ * a numeric value)
682
+ */
683
+ }
684
+ // One special case, leading zero(es):
685
+ if (ch == INT_0) {
686
+ break dummy_loop;
687
+ }
688
+
689
+ /* First, let's see if the whole number is contained within
690
+ * the input buffer unsplit. This should be the common case;
691
+ * and to simplify processing, we will just reparse contents
692
+ * in the alternative case (number split on buffer boundary)
693
+ */
694
+
695
+ int intLen = 1; // already got one
696
+
697
+ // First let's get the obligatory integer part:
698
+
699
+ int_loop:
700
+ while (true) {
701
+ if (ptr >= _inputEnd) {
702
+ break dummy_loop;
703
+ }
704
+ ch = (int) _inputBuffer[ptr++];
705
+ if (ch < INT_0 || ch > INT_9) {
706
+ break int_loop;
707
+ }
708
+ ++intLen;
709
+ }
710
+
711
+ int fractLen = 0;
712
+
713
+ // And then see if we get other parts
714
+ if (ch == INT_DECIMAL_POINT) { // yes, fraction
715
+ fract_loop:
716
+ while (true) {
717
+ if (ptr >= inputLen) {
718
+ break dummy_loop;
719
+ }
720
+ ch = (int) _inputBuffer[ptr++];
721
+ if (ch < INT_0 || ch > INT_9) {
722
+ break fract_loop;
723
+ }
724
+ ++fractLen;
725
+ }
726
+ // must be followed by sequence of ints, one minimum
727
+ if (fractLen == 0) {
728
+ reportUnexpectedNumberChar(ch, "Decimal point not followed by a digit");
729
+ }
730
+ }
731
+
732
+ int expLen = 0;
733
+ if (ch == INT_e || ch == INT_E) { // and/or exponent
734
+ if (ptr >= inputLen) {
735
+ break dummy_loop;
736
+ }
737
+ // Sign indicator?
738
+ ch = (int) _inputBuffer[ptr++];
739
+ if (ch == INT_MINUS || ch == INT_PLUS) { // yup, skip for now
740
+ if (ptr >= inputLen) {
741
+ break dummy_loop;
742
+ }
743
+ ch = (int) _inputBuffer[ptr++];
744
+ }
745
+ while (ch <= INT_9 && ch >= INT_0) {
746
+ ++expLen;
747
+ if (ptr >= inputLen) {
748
+ break dummy_loop;
749
+ }
750
+ ch = (int) _inputBuffer[ptr++];
751
+ }
752
+ // must be followed by sequence of ints, one minimum
753
+ if (expLen == 0) {
754
+ reportUnexpectedNumberChar(ch, "Exponent indicator not followed by a digit");
755
+ }
756
+ }
757
+
758
+ // Got it all: let's add to text buffer for parsing, access
759
+ --ptr; // need to push back following separator
760
+ _inputPtr = ptr;
761
+ int len = ptr-startPtr;
762
+ _textBuffer.resetWithShared(_inputBuffer, startPtr, len);
763
+ return reset(negative, intLen, fractLen, expLen);
764
+ } while (false);
765
+
766
+ _inputPtr = negative ? (startPtr+1) : startPtr;
767
+ return parseNumberText2(negative);
768
+ }
769
+
770
+ /**
771
+ * Method called to parse a number, when the primary parse
772
+ * method has failed to parse it, due to it being split on
773
+ * buffer boundary. As a result code is very similar, except
774
+ * that it has to explicitly copy contents to the text buffer
775
+ * instead of just sharing the main input buffer.
776
+ */
777
+ private final JsonToken parseNumberText2(boolean negative)
778
+ throws IOException, JsonParseException
779
+ {
780
+ char[] outBuf = _textBuffer.emptyAndGetCurrentSegment();
781
+ int outPtr = 0;
782
+
783
+ // Need to prepend sign?
784
+ if (negative) {
785
+ outBuf[outPtr++] = '-';
786
+ }
787
+
788
+ // This is the place to do leading-zero check(s) too:
789
+ int intLen = 0;
790
+ char c = (_inputPtr < _inputEnd) ? _inputBuffer[_inputPtr++] : getNextChar("No digit following minus sign");
791
+ if (c == '0') {
792
+ c = _verifyNoLeadingZeroes();
793
+ }
794
+ boolean eof = false;
795
+
796
+ // Ok, first the obligatory integer part:
797
+ int_loop:
798
+ while (c >= '0' && c <= '9') {
799
+ ++intLen;
800
+ if (outPtr >= outBuf.length) {
801
+ outBuf = _textBuffer.finishCurrentSegment();
802
+ outPtr = 0;
803
+ }
804
+ outBuf[outPtr++] = c;
805
+ if (_inputPtr >= _inputEnd && !loadMore()) {
806
+ // EOF is legal for main level int values
807
+ c = CHAR_NULL;
808
+ eof = true;
809
+ break int_loop;
810
+ }
811
+ c = _inputBuffer[_inputPtr++];
812
+ }
813
+ // Also, integer part is not optional
814
+ if (intLen == 0) {
815
+ reportInvalidNumber("Missing integer part (next char "+_getCharDesc(c)+")");
816
+ }
817
+
818
+ int fractLen = 0;
819
+ // And then see if we get other parts
820
+ if (c == '.') { // yes, fraction
821
+ outBuf[outPtr++] = c;
822
+
823
+ fract_loop:
824
+ while (true) {
825
+ if (_inputPtr >= _inputEnd && !loadMore()) {
826
+ eof = true;
827
+ break fract_loop;
828
+ }
829
+ c = _inputBuffer[_inputPtr++];
830
+ if (c < INT_0 || c > INT_9) {
831
+ break fract_loop;
832
+ }
833
+ ++fractLen;
834
+ if (outPtr >= outBuf.length) {
835
+ outBuf = _textBuffer.finishCurrentSegment();
836
+ outPtr = 0;
837
+ }
838
+ outBuf[outPtr++] = c;
839
+ }
840
+ // must be followed by sequence of ints, one minimum
841
+ if (fractLen == 0) {
842
+ reportUnexpectedNumberChar(c, "Decimal point not followed by a digit");
843
+ }
844
+ }
845
+
846
+ int expLen = 0;
847
+ if (c == 'e' || c == 'E') { // exponent?
848
+ if (outPtr >= outBuf.length) {
849
+ outBuf = _textBuffer.finishCurrentSegment();
850
+ outPtr = 0;
851
+ }
852
+ outBuf[outPtr++] = c;
853
+ // Not optional, can require that we get one more char
854
+ c = (_inputPtr < _inputEnd) ? _inputBuffer[_inputPtr++]
855
+ : getNextChar("expected a digit for number exponent");
856
+ // Sign indicator?
857
+ if (c == '-' || c == '+') {
858
+ if (outPtr >= outBuf.length) {
859
+ outBuf = _textBuffer.finishCurrentSegment();
860
+ outPtr = 0;
861
+ }
862
+ outBuf[outPtr++] = c;
863
+ // Likewise, non optional:
864
+ c = (_inputPtr < _inputEnd) ? _inputBuffer[_inputPtr++]
865
+ : getNextChar("expected a digit for number exponent");
866
+ }
867
+
868
+ exp_loop:
869
+ while (c <= INT_9 && c >= INT_0) {
870
+ ++expLen;
871
+ if (outPtr >= outBuf.length) {
872
+ outBuf = _textBuffer.finishCurrentSegment();
873
+ outPtr = 0;
874
+ }
875
+ outBuf[outPtr++] = c;
876
+ if (_inputPtr >= _inputEnd && !loadMore()) {
877
+ eof = true;
878
+ break exp_loop;
879
+ }
880
+ c = _inputBuffer[_inputPtr++];
881
+ }
882
+ // must be followed by sequence of ints, one minimum
883
+ if (expLen == 0) {
884
+ reportUnexpectedNumberChar(c, "Exponent indicator not followed by a digit");
885
+ }
886
+ }
887
+
888
+ // Ok; unless we hit end-of-input, need to push last char read back
889
+ if (!eof) {
890
+ --_inputPtr;
891
+ }
892
+ _textBuffer.setCurrentLength(outPtr);
893
+ // And there we have it!
894
+ return reset(negative, intLen, fractLen, expLen);
895
+ }
896
+
897
+ /**
898
+ * Method called when we have seen one zero, and want to ensure
899
+ * it is not followed by another
900
+ */
901
+ private final char _verifyNoLeadingZeroes()
902
+ throws IOException, JsonParseException
903
+ {
904
+ // Ok to have plain "0"
905
+ if (_inputPtr >= _inputEnd && !loadMore()) {
906
+ return '0';
907
+ }
908
+ char ch = _inputBuffer[_inputPtr];
909
+ // if not followed by a number (probably '.'); return zero as is, to be included
910
+ if (ch < '0' || ch > '9') {
911
+ return '0';
912
+ }
913
+ if (!isEnabled(Feature.ALLOW_NUMERIC_LEADING_ZEROS)) {
914
+ reportInvalidNumber("Leading zeroes not allowed");
915
+ }
916
+ // if so, just need to skip either all zeroes (if followed by number); or all but one (if non-number)
917
+ ++_inputPtr; // Leading zero to be skipped
918
+ if (ch == INT_0) {
919
+ while (_inputPtr < _inputEnd || loadMore()) {
920
+ ch = _inputBuffer[_inputPtr];
921
+ if (ch < '0' || ch > '9') { // followed by non-number; retain one zero
922
+ return '0';
923
+ }
924
+ ++_inputPtr; // skip previous zero
925
+ if (ch != '0') { // followed by other number; return
926
+ break;
927
+ }
928
+ }
929
+ }
930
+ return ch;
931
+ }
932
+
933
+ /**
934
+ * Method called if expected numeric value (due to leading sign) does not
935
+ * look like a number
936
+ */
937
+ protected JsonToken _handleInvalidNumberStart(int ch, boolean negative)
938
+ throws IOException, JsonParseException
939
+ {
940
+ if (ch == 'I') {
941
+ if (_inputPtr >= _inputEnd) {
942
+ if (!loadMore()) {
943
+ _reportInvalidEOFInValue();
944
+ }
945
+ }
946
+ ch = _inputBuffer[_inputPtr++];
947
+ if (ch == 'N') {
948
+ String match = negative ? "-INF" :"+INF";
949
+ _matchToken(match, 3);
950
+ if (isEnabled(Feature.ALLOW_NON_NUMERIC_NUMBERS)) {
951
+ return resetAsNaN(match, negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY);
952
+ }
953
+ _reportError("Non-standard token '"+match+"': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS to allow");
954
+ } else if (ch == 'n') {
955
+ String match = negative ? "-Infinity" :"+Infinity";
956
+ _matchToken(match, 3);
957
+ if (isEnabled(Feature.ALLOW_NON_NUMERIC_NUMBERS)) {
958
+ return resetAsNaN(match, negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY);
959
+ }
960
+ _reportError("Non-standard token '"+match+"': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS to allow");
961
+ }
962
+ }
963
+ reportUnexpectedNumberChar(ch, "expected digit (0-9) to follow minus sign, for valid numeric value");
964
+ return null;
965
+ }
966
+
967
+ /*
968
+ /**********************************************************
969
+ /* Internal methods, secondary parsing
970
+ /**********************************************************
971
+ */
972
+
973
+ protected final String _parseFieldName(int i)
974
+ throws IOException, JsonParseException
975
+ {
976
+ if (i != INT_QUOTE) {
977
+ return _handleUnusualFieldName(i);
978
+ }
979
+ /* First: let's try to see if we have a simple name: one that does
980
+ * not cross input buffer boundary, and does not contain escape
981
+ * sequences.
982
+ */
983
+ int ptr = _inputPtr;
984
+ int hash = 0;
985
+ final int inputLen = _inputEnd;
986
+
987
+ if (ptr < inputLen) {
988
+ final int[] codes = CharTypes.getInputCodeLatin1();
989
+ final int maxCode = codes.length;
990
+
991
+ do {
992
+ int ch = _inputBuffer[ptr];
993
+ if (ch < maxCode && codes[ch] != 0) {
994
+ if (ch == '"') {
995
+ int start = _inputPtr;
996
+ _inputPtr = ptr+1; // to skip the quote
997
+ return _symbols.findSymbol(_inputBuffer, start, ptr - start, hash);
998
+ }
999
+ break;
1000
+ }
1001
+ hash = (hash * 31) + ch;
1002
+ ++ptr;
1003
+ } while (ptr < inputLen);
1004
+ }
1005
+
1006
+ int start = _inputPtr;
1007
+ _inputPtr = ptr;
1008
+ return _parseFieldName2(start, hash, INT_QUOTE);
1009
+ }
1010
+
1011
+ private String _parseFieldName2(int startPtr, int hash, int endChar)
1012
+ throws IOException, JsonParseException
1013
+ {
1014
+ _textBuffer.resetWithShared(_inputBuffer, startPtr, (_inputPtr - startPtr));
1015
+
1016
+ /* Output pointers; calls will also ensure that the buffer is
1017
+ * not shared and has room for at least one more char.
1018
+ */
1019
+ char[] outBuf = _textBuffer.getCurrentSegment();
1020
+ int outPtr = _textBuffer.getCurrentSegmentSize();
1021
+
1022
+ while (true) {
1023
+ if (_inputPtr >= _inputEnd) {
1024
+ if (!loadMore()) {
1025
+ _reportInvalidEOF(": was expecting closing '"+((char) endChar)+"' for name");
1026
+ }
1027
+ }
1028
+ char c = _inputBuffer[_inputPtr++];
1029
+ int i = (int) c;
1030
+ if (i <= INT_BACKSLASH) {
1031
+ if (i == INT_BACKSLASH) {
1032
+ /* Although chars outside of BMP are to be escaped as
1033
+ * an UTF-16 surrogate pair, does that affect decoding?
1034
+ * For now let's assume it does not.
1035
+ */
1036
+ c = _decodeEscaped();
1037
+ } else if (i <= endChar) {
1038
+ if (i == endChar) {
1039
+ break;
1040
+ }
1041
+ if (i < INT_SPACE) {
1042
+ _throwUnquotedSpace(i, "name");
1043
+ }
1044
+ }
1045
+ }
1046
+ hash = (hash * 31) + i;
1047
+ // Ok, let's add char to output:
1048
+ outBuf[outPtr++] = c;
1049
+
1050
+ // Need more room?
1051
+ if (outPtr >= outBuf.length) {
1052
+ outBuf = _textBuffer.finishCurrentSegment();
1053
+ outPtr = 0;
1054
+ }
1055
+ }
1056
+ _textBuffer.setCurrentLength(outPtr);
1057
+ {
1058
+ TextBuffer tb = _textBuffer;
1059
+ char[] buf = tb.getTextBuffer();
1060
+ int start = tb.getTextOffset();
1061
+ int len = tb.size();
1062
+
1063
+ return _symbols.findSymbol(buf, start, len, hash);
1064
+ }
1065
+ }
1066
+
1067
+ /**
1068
+ * Method called when we see non-white space character other
1069
+ * than double quote, when expecting a field name.
1070
+ * In standard mode will just throw an expection; but
1071
+ * in non-standard modes may be able to parse name.
1072
+ *
1073
+ * @since 1.2
1074
+ */
1075
+ protected final String _handleUnusualFieldName(int i)
1076
+ throws IOException, JsonParseException
1077
+ {
1078
+ // [JACKSON-173]: allow single quotes
1079
+ if (i == INT_APOSTROPHE && isEnabled(Feature.ALLOW_SINGLE_QUOTES)) {
1080
+ return _parseApostropheFieldName();
1081
+ }
1082
+ // [JACKSON-69]: allow unquoted names if feature enabled:
1083
+ if (!isEnabled(Feature.ALLOW_UNQUOTED_FIELD_NAMES)) {
1084
+ _reportUnexpectedChar(i, "was expecting double-quote to start field name");
1085
+ }
1086
+ final int[] codes = CharTypes.getInputCodeLatin1JsNames();
1087
+ final int maxCode = codes.length;
1088
+
1089
+ // Also: first char must be a valid name char, but NOT be number
1090
+ boolean firstOk;
1091
+
1092
+ if (i < maxCode) { // identifier, and not a number
1093
+ firstOk = (codes[i] == 0) && (i < INT_0 || i > INT_9);
1094
+ } else {
1095
+ firstOk = Character.isJavaIdentifierPart((char) i);
1096
+ }
1097
+ if (!firstOk) {
1098
+ _reportUnexpectedChar(i, "was expecting either valid name character (for unquoted name) or double-quote (for quoted) to start field name");
1099
+ }
1100
+ int ptr = _inputPtr;
1101
+ int hash = 0;
1102
+ final int inputLen = _inputEnd;
1103
+
1104
+ if (ptr < inputLen) {
1105
+ do {
1106
+ int ch = _inputBuffer[ptr];
1107
+ if (ch < maxCode) {
1108
+ if (codes[ch] != 0) {
1109
+ int start = _inputPtr-1; // -1 to bring back first char
1110
+ _inputPtr = ptr;
1111
+ return _symbols.findSymbol(_inputBuffer, start, ptr - start, hash);
1112
+ }
1113
+ } else if (!Character.isJavaIdentifierPart((char) ch)) {
1114
+ int start = _inputPtr-1; // -1 to bring back first char
1115
+ _inputPtr = ptr;
1116
+ return _symbols.findSymbol(_inputBuffer, start, ptr - start, hash);
1117
+ }
1118
+ hash = (hash * 31) + ch;
1119
+ ++ptr;
1120
+ } while (ptr < inputLen);
1121
+ }
1122
+ int start = _inputPtr-1;
1123
+ _inputPtr = ptr;
1124
+ return _parseUnusualFieldName2(start, hash, codes);
1125
+ }
1126
+
1127
+ protected final String _parseApostropheFieldName()
1128
+ throws IOException, JsonParseException
1129
+ {
1130
+ // Note: mostly copy of_parseFieldName
1131
+ int ptr = _inputPtr;
1132
+ int hash = 0;
1133
+ final int inputLen = _inputEnd;
1134
+
1135
+ if (ptr < inputLen) {
1136
+ final int[] codes = CharTypes.getInputCodeLatin1();
1137
+ final int maxCode = codes.length;
1138
+
1139
+ do {
1140
+ int ch = _inputBuffer[ptr];
1141
+ if (ch == '\'') {
1142
+ int start = _inputPtr;
1143
+ _inputPtr = ptr+1; // to skip the quote
1144
+ return _symbols.findSymbol(_inputBuffer, start, ptr - start, hash);
1145
+ }
1146
+ if (ch < maxCode && codes[ch] != 0) {
1147
+ break;
1148
+ }
1149
+ hash = (hash * 31) + ch;
1150
+ ++ptr;
1151
+ } while (ptr < inputLen);
1152
+ }
1153
+
1154
+ int start = _inputPtr;
1155
+ _inputPtr = ptr;
1156
+
1157
+ return _parseFieldName2(start, hash, INT_APOSTROPHE);
1158
+ }
1159
+
1160
+ /**
1161
+ * Method for handling cases where first non-space character
1162
+ * of an expected value token is not legal for standard JSON content.
1163
+ *
1164
+ * @since 1.3
1165
+ */
1166
+ protected final JsonToken _handleUnexpectedValue(int i)
1167
+ throws IOException, JsonParseException
1168
+ {
1169
+ // Most likely an error, unless we are to allow single-quote-strings
1170
+ switch (i) {
1171
+ case '\'':
1172
+ /* [JACKSON-173]: allow single quotes. Unlike with regular
1173
+ * Strings, we'll eagerly parse contents; this so that there's
1174
+ * no need to store information on quote char used.
1175
+ *
1176
+ * Also, no separation to fast/slow parsing; we'll just do
1177
+ * one regular (~= slowish) parsing, to keep code simple
1178
+ */
1179
+ if (isEnabled(Feature.ALLOW_SINGLE_QUOTES)) {
1180
+ return _handleApostropheValue();
1181
+ }
1182
+ break;
1183
+ case 'N':
1184
+ _matchToken("NaN", 1);
1185
+ if (isEnabled(Feature.ALLOW_NON_NUMERIC_NUMBERS)) {
1186
+ return resetAsNaN("NaN", Double.NaN);
1187
+ }
1188
+ _reportError("Non-standard token 'NaN': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS to allow");
1189
+ break;
1190
+ case '+': // note: '-' is taken as number
1191
+ if (_inputPtr >= _inputEnd) {
1192
+ if (!loadMore()) {
1193
+ _reportInvalidEOFInValue();
1194
+ }
1195
+ }
1196
+ return _handleInvalidNumberStart(_inputBuffer[_inputPtr++], false);
1197
+ }
1198
+ _reportUnexpectedChar(i, "expected a valid value (number, String, array, object, 'true', 'false' or 'null')");
1199
+ return null;
1200
+ }
1201
+
1202
+ /**
1203
+ * @since 1.8
1204
+ */
1205
+ protected final JsonToken _handleApostropheValue()
1206
+ throws IOException, JsonParseException
1207
+ {
1208
+ char[] outBuf = _textBuffer.emptyAndGetCurrentSegment();
1209
+ int outPtr = _textBuffer.getCurrentSegmentSize();
1210
+
1211
+ while (true) {
1212
+ if (_inputPtr >= _inputEnd) {
1213
+ if (!loadMore()) {
1214
+ _reportInvalidEOF(": was expecting closing quote for a string value");
1215
+ }
1216
+ }
1217
+ char c = _inputBuffer[_inputPtr++];
1218
+ int i = (int) c;
1219
+ if (i <= INT_BACKSLASH) {
1220
+ if (i == INT_BACKSLASH) {
1221
+ /* Although chars outside of BMP are to be escaped as
1222
+ * an UTF-16 surrogate pair, does that affect decoding?
1223
+ * For now let's assume it does not.
1224
+ */
1225
+ c = _decodeEscaped();
1226
+ } else if (i <= INT_APOSTROPHE) {
1227
+ if (i == INT_APOSTROPHE) {
1228
+ break;
1229
+ }
1230
+ if (i < INT_SPACE) {
1231
+ _throwUnquotedSpace(i, "string value");
1232
+ }
1233
+ }
1234
+ }
1235
+ // Need more room?
1236
+ if (outPtr >= outBuf.length) {
1237
+ outBuf = _textBuffer.finishCurrentSegment();
1238
+ outPtr = 0;
1239
+ }
1240
+ // Ok, let's add char to output:
1241
+ outBuf[outPtr++] = c;
1242
+ }
1243
+ _textBuffer.setCurrentLength(outPtr);
1244
+ return JsonToken.VALUE_STRING;
1245
+ }
1246
+
1247
+ /**
1248
+ * @since 1.2
1249
+ */
1250
+ private String _parseUnusualFieldName2(int startPtr, int hash, int[] codes)
1251
+ throws IOException, JsonParseException
1252
+ {
1253
+ _textBuffer.resetWithShared(_inputBuffer, startPtr, (_inputPtr - startPtr));
1254
+ char[] outBuf = _textBuffer.getCurrentSegment();
1255
+ int outPtr = _textBuffer.getCurrentSegmentSize();
1256
+ final int maxCode = codes.length;
1257
+
1258
+ while (true) {
1259
+ if (_inputPtr >= _inputEnd) {
1260
+ if (!loadMore()) { // acceptable for now (will error out later)
1261
+ break;
1262
+ }
1263
+ }
1264
+ char c = _inputBuffer[_inputPtr];
1265
+ int i = (int) c;
1266
+ if (i <= maxCode) {
1267
+ if (codes[i] != 0) {
1268
+ break;
1269
+ }
1270
+ } else if (!Character.isJavaIdentifierPart(c)) {
1271
+ break;
1272
+ }
1273
+ ++_inputPtr;
1274
+ hash = (hash * 31) + i;
1275
+ // Ok, let's add char to output:
1276
+ outBuf[outPtr++] = c;
1277
+
1278
+ // Need more room?
1279
+ if (outPtr >= outBuf.length) {
1280
+ outBuf = _textBuffer.finishCurrentSegment();
1281
+ outPtr = 0;
1282
+ }
1283
+ }
1284
+ _textBuffer.setCurrentLength(outPtr);
1285
+ {
1286
+ TextBuffer tb = _textBuffer;
1287
+ char[] buf = tb.getTextBuffer();
1288
+ int start = tb.getTextOffset();
1289
+ int len = tb.size();
1290
+
1291
+ return _symbols.findSymbol(buf, start, len, hash);
1292
+ }
1293
+ }
1294
+
1295
+ @Override
1296
+ protected void _finishString()
1297
+ throws IOException, JsonParseException
1298
+ {
1299
+ /* First: let's try to see if we have simple String value: one
1300
+ * that does not cross input buffer boundary, and does not
1301
+ * contain escape sequences.
1302
+ */
1303
+ int ptr = _inputPtr;
1304
+ final int inputLen = _inputEnd;
1305
+
1306
+ if (ptr < inputLen) {
1307
+ final int[] codes = CharTypes.getInputCodeLatin1();
1308
+ final int maxCode = codes.length;
1309
+
1310
+ do {
1311
+ int ch = _inputBuffer[ptr];
1312
+ if (ch < maxCode && codes[ch] != 0) {
1313
+ if (ch == '"') {
1314
+ _textBuffer.resetWithShared(_inputBuffer, _inputPtr, (ptr-_inputPtr));
1315
+ _inputPtr = ptr+1;
1316
+ // Yes, we got it all
1317
+ return;
1318
+ }
1319
+ break;
1320
+ }
1321
+ ++ptr;
1322
+ } while (ptr < inputLen);
1323
+ }
1324
+
1325
+ /* Either ran out of input, or bumped into an escape
1326
+ * sequence...
1327
+ */
1328
+ _textBuffer.resetWithCopy(_inputBuffer, _inputPtr, (ptr-_inputPtr));
1329
+ _inputPtr = ptr;
1330
+ _finishString2();
1331
+ }
1332
+
1333
+ protected void _finishString2()
1334
+ throws IOException, JsonParseException
1335
+ {
1336
+ char[] outBuf = _textBuffer.getCurrentSegment();
1337
+ int outPtr = _textBuffer.getCurrentSegmentSize();
1338
+
1339
+ while (true) {
1340
+ if (_inputPtr >= _inputEnd) {
1341
+ if (!loadMore()) {
1342
+ _reportInvalidEOF(": was expecting closing quote for a string value");
1343
+ }
1344
+ }
1345
+ char c = _inputBuffer[_inputPtr++];
1346
+ int i = (int) c;
1347
+ if (i <= INT_BACKSLASH) {
1348
+ if (i == INT_BACKSLASH) {
1349
+ /* Although chars outside of BMP are to be escaped as
1350
+ * an UTF-16 surrogate pair, does that affect decoding?
1351
+ * For now let's assume it does not.
1352
+ */
1353
+ c = _decodeEscaped();
1354
+ } else if (i <= INT_QUOTE) {
1355
+ if (i == INT_QUOTE) {
1356
+ break;
1357
+ }
1358
+ if (i < INT_SPACE) {
1359
+ _throwUnquotedSpace(i, "string value");
1360
+ }
1361
+ }
1362
+ }
1363
+ // Need more room?
1364
+ if (outPtr >= outBuf.length) {
1365
+ outBuf = _textBuffer.finishCurrentSegment();
1366
+ outPtr = 0;
1367
+ }
1368
+ // Ok, let's add char to output:
1369
+ outBuf[outPtr++] = c;
1370
+ }
1371
+ _textBuffer.setCurrentLength(outPtr);
1372
+ }
1373
+
1374
+ /**
1375
+ * Method called to skim through rest of unparsed String value,
1376
+ * if it is not needed. This can be done bit faster if contents
1377
+ * need not be stored for future access.
1378
+ */
1379
+ protected void _skipString()
1380
+ throws IOException, JsonParseException
1381
+ {
1382
+ _tokenIncomplete = false;
1383
+
1384
+ int inputPtr = _inputPtr;
1385
+ int inputLen = _inputEnd;
1386
+ char[] inputBuffer = _inputBuffer;
1387
+
1388
+ while (true) {
1389
+ if (inputPtr >= inputLen) {
1390
+ _inputPtr = inputPtr;
1391
+ if (!loadMore()) {
1392
+ _reportInvalidEOF(": was expecting closing quote for a string value");
1393
+ }
1394
+ inputPtr = _inputPtr;
1395
+ inputLen = _inputEnd;
1396
+ }
1397
+ char c = inputBuffer[inputPtr++];
1398
+ int i = (int) c;
1399
+ if (i <= INT_BACKSLASH) {
1400
+ if (i == INT_BACKSLASH) {
1401
+ /* Although chars outside of BMP are to be escaped as
1402
+ * an UTF-16 surrogate pair, does that affect decoding?
1403
+ * For now let's assume it does not.
1404
+ */
1405
+ _inputPtr = inputPtr;
1406
+ c = _decodeEscaped();
1407
+ inputPtr = _inputPtr;
1408
+ inputLen = _inputEnd;
1409
+ } else if (i <= INT_QUOTE) {
1410
+ if (i == INT_QUOTE) {
1411
+ _inputPtr = inputPtr;
1412
+ break;
1413
+ }
1414
+ if (i < INT_SPACE) {
1415
+ _inputPtr = inputPtr;
1416
+ _throwUnquotedSpace(i, "string value");
1417
+ }
1418
+ }
1419
+ }
1420
+ }
1421
+ }
1422
+
1423
+ /*
1424
+ /**********************************************************
1425
+ /* Internal methods, other parsing
1426
+ /**********************************************************
1427
+ */
1428
+
1429
+ /**
1430
+ * We actually need to check the character value here
1431
+ * (to see if we have \n following \r).
1432
+ */
1433
+ protected final void _skipCR() throws IOException
1434
+ {
1435
+ if (_inputPtr < _inputEnd || loadMore()) {
1436
+ if (_inputBuffer[_inputPtr] == '\n') {
1437
+ ++_inputPtr;
1438
+ }
1439
+ }
1440
+ ++_currInputRow;
1441
+ _currInputRowStart = _inputPtr;
1442
+ }
1443
+
1444
+ protected final void _skipLF() throws IOException
1445
+ {
1446
+ ++_currInputRow;
1447
+ _currInputRowStart = _inputPtr;
1448
+ }
1449
+
1450
+ private final int _skipWS()
1451
+ throws IOException, JsonParseException
1452
+ {
1453
+ while (_inputPtr < _inputEnd || loadMore()) {
1454
+ int i = (int) _inputBuffer[_inputPtr++];
1455
+ if (i > INT_SPACE) {
1456
+ if (i != INT_SLASH) {
1457
+ return i;
1458
+ }
1459
+ _skipComment();
1460
+ } else if (i != INT_SPACE) {
1461
+ if (i == INT_LF) {
1462
+ _skipLF();
1463
+ } else if (i == INT_CR) {
1464
+ _skipCR();
1465
+ } else if (i != INT_TAB) {
1466
+ _throwInvalidSpace(i);
1467
+ }
1468
+ }
1469
+ }
1470
+ throw _constructError("Unexpected end-of-input within/between "+_parsingContext.getTypeDesc()+" entries");
1471
+ }
1472
+
1473
+ private final int _skipWSOrEnd()
1474
+ throws IOException, JsonParseException
1475
+ {
1476
+ while ((_inputPtr < _inputEnd) || loadMore()) {
1477
+ int i = (int) _inputBuffer[_inputPtr++];
1478
+ if (i > INT_SPACE) {
1479
+ if (i == INT_SLASH) {
1480
+ _skipComment();
1481
+ continue;
1482
+ }
1483
+ return i;
1484
+ }
1485
+ if (i != INT_SPACE) {
1486
+ if (i == INT_LF) {
1487
+ _skipLF();
1488
+ } else if (i == INT_CR) {
1489
+ _skipCR();
1490
+ } else if (i != INT_TAB) {
1491
+ _throwInvalidSpace(i);
1492
+ }
1493
+ }
1494
+ }
1495
+ // We ran out of input...
1496
+ _handleEOF();
1497
+ return -1;
1498
+ }
1499
+
1500
+ private final void _skipComment()
1501
+ throws IOException, JsonParseException
1502
+ {
1503
+ if (!isEnabled(Feature.ALLOW_COMMENTS)) {
1504
+ _reportUnexpectedChar('/', "maybe a (non-standard) comment? (not recognized as one since Feature 'ALLOW_COMMENTS' not enabled for parser)");
1505
+ }
1506
+ // First: check which comment (if either) it is:
1507
+ if (_inputPtr >= _inputEnd && !loadMore()) {
1508
+ _reportInvalidEOF(" in a comment");
1509
+ }
1510
+ char c = _inputBuffer[_inputPtr++];
1511
+ if (c == '/') {
1512
+ _skipCppComment();
1513
+ } else if (c == '*') {
1514
+ _skipCComment();
1515
+ } else {
1516
+ _reportUnexpectedChar(c, "was expecting either '*' or '/' for a comment");
1517
+ }
1518
+ }
1519
+
1520
+ private final void _skipCComment()
1521
+ throws IOException, JsonParseException
1522
+ {
1523
+ // Ok: need the matching '*/'
1524
+ main_loop:
1525
+ while ((_inputPtr < _inputEnd) || loadMore()) {
1526
+ int i = (int) _inputBuffer[_inputPtr++];
1527
+ if (i <= INT_ASTERISK) {
1528
+ if (i == INT_ASTERISK) { // end?
1529
+ if ((_inputPtr >= _inputEnd) && !loadMore()) {
1530
+ break main_loop;
1531
+ }
1532
+ if (_inputBuffer[_inputPtr] == INT_SLASH) {
1533
+ ++_inputPtr;
1534
+ return;
1535
+ }
1536
+ continue;
1537
+ }
1538
+ if (i < INT_SPACE) {
1539
+ if (i == INT_LF) {
1540
+ _skipLF();
1541
+ } else if (i == INT_CR) {
1542
+ _skipCR();
1543
+ } else if (i != INT_TAB) {
1544
+ _throwInvalidSpace(i);
1545
+ }
1546
+ }
1547
+ }
1548
+ }
1549
+ _reportInvalidEOF(" in a comment");
1550
+ }
1551
+
1552
+ private final void _skipCppComment()
1553
+ throws IOException, JsonParseException
1554
+ {
1555
+ // Ok: need to find EOF or linefeed
1556
+ while ((_inputPtr < _inputEnd) || loadMore()) {
1557
+ int i = (int) _inputBuffer[_inputPtr++];
1558
+ if (i < INT_SPACE) {
1559
+ if (i == INT_LF) {
1560
+ _skipLF();
1561
+ break;
1562
+ } else if (i == INT_CR) {
1563
+ _skipCR();
1564
+ break;
1565
+ } else if (i != INT_TAB) {
1566
+ _throwInvalidSpace(i);
1567
+ }
1568
+ }
1569
+ }
1570
+ }
1571
+
1572
+ @Override
1573
+ protected final char _decodeEscaped()
1574
+ throws IOException, JsonParseException
1575
+ {
1576
+ if (_inputPtr >= _inputEnd) {
1577
+ if (!loadMore()) {
1578
+ _reportInvalidEOF(" in character escape sequence");
1579
+ }
1580
+ }
1581
+ char c = _inputBuffer[_inputPtr++];
1582
+
1583
+ switch ((int) c) {
1584
+ // First, ones that are mapped
1585
+ case INT_b:
1586
+ return '\b';
1587
+ case INT_t:
1588
+ return '\t';
1589
+ case INT_n:
1590
+ return '\n';
1591
+ case INT_f:
1592
+ return '\f';
1593
+ case INT_r:
1594
+ return '\r';
1595
+
1596
+ // And these are to be returned as they are
1597
+ case INT_QUOTE:
1598
+ case INT_SLASH:
1599
+ case INT_BACKSLASH:
1600
+ return c;
1601
+
1602
+ case INT_u: // and finally hex-escaped
1603
+ break;
1604
+
1605
+ default:
1606
+ return _handleUnrecognizedCharacterEscape(c);
1607
+ }
1608
+
1609
+ // Ok, a hex escape. Need 4 characters
1610
+ int value = 0;
1611
+ for (int i = 0; i < 4; ++i) {
1612
+ if (_inputPtr >= _inputEnd) {
1613
+ if (!loadMore()) {
1614
+ _reportInvalidEOF(" in character escape sequence");
1615
+ }
1616
+ }
1617
+ int ch = (int) _inputBuffer[_inputPtr++];
1618
+ int digit = CharTypes.charToHex(ch);
1619
+ if (digit < 0) {
1620
+ _reportUnexpectedChar(ch, "expected a hex-digit for character escape sequence");
1621
+ }
1622
+ value = (value << 4) | digit;
1623
+ }
1624
+ return (char) value;
1625
+ }
1626
+
1627
+ /**
1628
+ * Helper method for checking whether input matches expected token
1629
+ *
1630
+ * @since 1.8
1631
+ */
1632
+ protected final void _matchToken(String matchStr, int i)
1633
+ throws IOException, JsonParseException
1634
+ {
1635
+ final int len = matchStr.length();
1636
+
1637
+ do {
1638
+ if (_inputPtr >= _inputEnd) {
1639
+ if (!loadMore()) {
1640
+ _reportInvalidEOFInValue();
1641
+ }
1642
+ }
1643
+ if (_inputBuffer[_inputPtr] != matchStr.charAt(i)) {
1644
+ _reportInvalidToken(matchStr.substring(0, i), "'null', 'true', 'false' or NaN");
1645
+ }
1646
+ ++_inputPtr;
1647
+ } while (++i < len);
1648
+
1649
+ // but let's also ensure we either get EOF, or non-alphanum char...
1650
+ if (_inputPtr >= _inputEnd) {
1651
+ if (!loadMore()) {
1652
+ return;
1653
+ }
1654
+ }
1655
+ char c = _inputBuffer[_inputPtr];
1656
+ if (c < '0' || c == ']' || c == '}') { // expected/allowed chars
1657
+ return;
1658
+ }
1659
+ // if Java letter, it's a problem tho
1660
+ if (Character.isJavaIdentifierPart(c)) {
1661
+ ++_inputPtr;
1662
+ _reportInvalidToken(matchStr.substring(0, i), "'null', 'true', 'false' or NaN");
1663
+ }
1664
+ return;
1665
+ }
1666
+
1667
+ /*
1668
+ /**********************************************************
1669
+ /* Binary access
1670
+ /**********************************************************
1671
+ */
1672
+
1673
+ /**
1674
+ * Efficient handling for incremental parsing of base64-encoded
1675
+ * textual content.
1676
+ */
1677
+ protected byte[] _decodeBase64(Base64Variant b64variant)
1678
+ throws IOException, JsonParseException
1679
+ {
1680
+ ByteArrayBuilder builder = _getByteArrayBuilder();
1681
+
1682
+ //main_loop:
1683
+ while (true) {
1684
+ // first, we'll skip preceding white space, if any
1685
+ char ch;
1686
+ do {
1687
+ if (_inputPtr >= _inputEnd) {
1688
+ loadMoreGuaranteed();
1689
+ }
1690
+ ch = _inputBuffer[_inputPtr++];
1691
+ } while (ch <= INT_SPACE);
1692
+ int bits = b64variant.decodeBase64Char(ch);
1693
+ if (bits < 0) {
1694
+ if (ch == '"') { // reached the end, fair and square?
1695
+ return builder.toByteArray();
1696
+ }
1697
+ bits = _decodeBase64Escape(b64variant, ch, 0);
1698
+ if (bits < 0) { // white space to skip
1699
+ continue;
1700
+ }
1701
+ }
1702
+ int decodedData = bits;
1703
+
1704
+ // then second base64 char; can't get padding yet, nor ws
1705
+
1706
+ if (_inputPtr >= _inputEnd) {
1707
+ loadMoreGuaranteed();
1708
+ }
1709
+ ch = _inputBuffer[_inputPtr++];
1710
+ bits = b64variant.decodeBase64Char(ch);
1711
+ if (bits < 0) {
1712
+ bits = _decodeBase64Escape(b64variant, ch, 1);
1713
+ }
1714
+ decodedData = (decodedData << 6) | bits;
1715
+
1716
+ // third base64 char; can be padding, but not ws
1717
+ if (_inputPtr >= _inputEnd) {
1718
+ loadMoreGuaranteed();
1719
+ }
1720
+ ch = _inputBuffer[_inputPtr++];
1721
+ bits = b64variant.decodeBase64Char(ch);
1722
+
1723
+ // First branch: can get padding (-> 1 byte)
1724
+ if (bits < 0) {
1725
+ if (bits != Base64Variant.BASE64_VALUE_PADDING) {
1726
+ // as per [JACKSON-631], could also just be 'missing' padding
1727
+ if (ch == '"' && !b64variant.usesPadding()) {
1728
+ decodedData >>= 4;
1729
+ builder.append(decodedData);
1730
+ return builder.toByteArray();
1731
+ }
1732
+ bits = _decodeBase64Escape(b64variant, ch, 2);
1733
+ }
1734
+ if (bits == Base64Variant.BASE64_VALUE_PADDING) {
1735
+ // Ok, must get more padding chars, then
1736
+ if (_inputPtr >= _inputEnd) {
1737
+ loadMoreGuaranteed();
1738
+ }
1739
+ ch = _inputBuffer[_inputPtr++];
1740
+ if (!b64variant.usesPaddingChar(ch)) {
1741
+ throw reportInvalidBase64Char(b64variant, ch, 3, "expected padding character '"+b64variant.getPaddingChar()+"'");
1742
+ }
1743
+ // Got 12 bits, only need 8, need to shift
1744
+ decodedData >>= 4;
1745
+ builder.append(decodedData);
1746
+ continue;
1747
+ }
1748
+ // otherwise we got escaped other char, to be processed below
1749
+ }
1750
+ // Nope, 2 or 3 bytes
1751
+ decodedData = (decodedData << 6) | bits;
1752
+ // fourth and last base64 char; can be padding, but not ws
1753
+ if (_inputPtr >= _inputEnd) {
1754
+ loadMoreGuaranteed();
1755
+ }
1756
+ ch = _inputBuffer[_inputPtr++];
1757
+ bits = b64variant.decodeBase64Char(ch);
1758
+ if (bits < 0) {
1759
+ if (bits != Base64Variant.BASE64_VALUE_PADDING) {
1760
+ // as per [JACKSON-631], could also just be 'missing' padding
1761
+ if (ch == '"' && !b64variant.usesPadding()) {
1762
+ decodedData >>= 2;
1763
+ builder.appendTwoBytes(decodedData);
1764
+ return builder.toByteArray();
1765
+ }
1766
+ bits = _decodeBase64Escape(b64variant, ch, 3);
1767
+ }
1768
+ if (bits == Base64Variant.BASE64_VALUE_PADDING) {
1769
+ // With padding we only get 2 bytes; but we have
1770
+ // to shift it a bit so it is identical to triplet
1771
+ // case with partial output.
1772
+ // 3 chars gives 3x6 == 18 bits, of which 2 are
1773
+ // dummies, need to discard:
1774
+ decodedData >>= 2;
1775
+ builder.appendTwoBytes(decodedData);
1776
+ continue;
1777
+ }
1778
+ // otherwise we got escaped other char, to be processed below
1779
+ }
1780
+ // otherwise, our triplet is now complete
1781
+ decodedData = (decodedData << 6) | bits;
1782
+ builder.appendThreeBytes(decodedData);
1783
+ }
1784
+ }
1785
+
1786
+ /*
1787
+ /**********************************************************
1788
+ /* Error reporting
1789
+ /**********************************************************
1790
+ */
1791
+
1792
+ protected void _reportInvalidToken(String matchedPart, String msg)
1793
+ throws IOException, JsonParseException
1794
+ {
1795
+ StringBuilder sb = new StringBuilder(matchedPart);
1796
+ /* Let's just try to find what appears to be the token, using
1797
+ * regular Java identifier character rules. It's just a heuristic,
1798
+ * nothing fancy here.
1799
+ */
1800
+ while (true) {
1801
+ if (_inputPtr >= _inputEnd) {
1802
+ if (!loadMore()) {
1803
+ break;
1804
+ }
1805
+ }
1806
+ char c = _inputBuffer[_inputPtr];
1807
+ if (!Character.isJavaIdentifierPart(c)) {
1808
+ break;
1809
+ }
1810
+ ++_inputPtr;
1811
+ sb.append(c);
1812
+ }
1813
+ _reportError("Unrecognized token '"+sb.toString()+"': was expecting ");
1814
+ }
1815
+ }