testautoa 0.4.0.pre16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. data/.calabash_settings +1 -0
  2. data/CHANGES.txt +254 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +8 -0
  5. data/Rakefile +51 -0
  6. data/bin/calabash-android +101 -0
  7. data/bin/calabash-android-build.rb +43 -0
  8. data/bin/calabash-android-console.rb +29 -0
  9. data/bin/calabash-android-generate.rb +20 -0
  10. data/bin/calabash-android-helpers.rb +46 -0
  11. data/bin/calabash-android-run.rb +41 -0
  12. data/bin/calabash-android-setup.rb +29 -0
  13. data/calabash-android.gemspec +25 -0
  14. data/doc/calabash-android-help.txt +25 -0
  15. data/epl-v10.html +261 -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 +36 -0
  19. data/features-skeleton/support/app_life_cycle_hooks.rb +14 -0
  20. data/features-skeleton/support/env.rb +1 -0
  21. data/features-skeleton/support/hooks.rb +0 -0
  22. data/irbrc +37 -0
  23. data/lib/calabash-android/calabash_steps.rb +19 -0
  24. data/lib/calabash-android/canned_steps.md +283 -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/helpers.rb +159 -0
  28. data/lib/calabash-android/lib/AXMLPrinter2.jar +0 -0
  29. data/lib/calabash-android/lib/TestServer.apk +0 -0
  30. data/lib/calabash-android/lib/manifest_extractor.jar +0 -0
  31. data/lib/calabash-android/lib/screenShotTaker.jar +0 -0
  32. data/lib/calabash-android/lib/unsign.jar +0 -0
  33. data/lib/calabash-android/management/adb.rb +0 -0
  34. data/lib/calabash-android/management/app_installation.rb +1 -0
  35. data/lib/calabash-android/operations.rb +611 -0
  36. data/lib/calabash-android/steps/additions_manual_steps.rb +11 -0
  37. data/lib/calabash-android/steps/app_steps.rb +10 -0
  38. data/lib/calabash-android/steps/assert_steps.rb +44 -0
  39. data/lib/calabash-android/steps/check_box_steps.rb +3 -0
  40. data/lib/calabash-android/steps/context_menu_steps.rb +12 -0
  41. data/lib/calabash-android/steps/date_picker_steps.rb +8 -0
  42. data/lib/calabash-android/steps/enter_text_steps.rb +27 -0
  43. data/lib/calabash-android/steps/l10n_steps.rb +19 -0
  44. data/lib/calabash-android/steps/list_steps.rb +40 -0
  45. data/lib/calabash-android/steps/location_steps.rb +19 -0
  46. data/lib/calabash-android/steps/map_steps.rb +61 -0
  47. data/lib/calabash-android/steps/navigation_steps.rb +46 -0
  48. data/lib/calabash-android/steps/press_button_steps.rb +35 -0
  49. data/lib/calabash-android/steps/progress_steps.rb +71 -0
  50. data/lib/calabash-android/steps/rotation_steps.rb +7 -0
  51. data/lib/calabash-android/steps/screenshot_steps.rb +11 -0
  52. data/lib/calabash-android/steps/search_steps.rb +7 -0
  53. data/lib/calabash-android/steps/spinner_steps.rb +3 -0
  54. data/lib/calabash-android/steps/time_picker_steps.rb +8 -0
  55. data/lib/calabash-android/version.rb +5 -0
  56. data/lib/calabash-android/wait_helpers.rb +93 -0
  57. data/lib/calabash-android.rb +2 -0
  58. data/test-server/AndroidManifest.xml +29 -0
  59. data/test-server/build.xml +144 -0
  60. data/test-server/calabash-js/src/calabash.js +125 -0
  61. data/test-server/calabash-js/src/set_text.js +133 -0
  62. data/test-server/instrumentation-backend/.classpath +10 -0
  63. data/test-server/instrumentation-backend/.gitignore +1 -0
  64. data/test-server/instrumentation-backend/.project +33 -0
  65. data/test-server/instrumentation-backend/.settings/org.eclipse.jdt.core.prefs +11 -0
  66. data/test-server/instrumentation-backend/AndroidManifest.xml +17 -0
  67. data/test-server/instrumentation-backend/antlr/UIQuery.g +113 -0
  68. data/test-server/instrumentation-backend/antlr/UIQuery.tokens +12 -0
  69. data/test-server/instrumentation-backend/antlr.sh +2 -0
  70. data/test-server/instrumentation-backend/assets/foo.bar +0 -0
  71. data/test-server/instrumentation-backend/build-libs/antlr-3.4-complete.jar +0 -0
  72. data/test-server/instrumentation-backend/build-libs/junit.jar +0 -0
  73. data/test-server/instrumentation-backend/build.xml +56 -0
  74. data/test-server/instrumentation-backend/libs/robotium-solo-3.6.jar +0 -0
  75. data/test-server/instrumentation-backend/project.properties +11 -0
  76. data/test-server/instrumentation-backend/res/drawable-hdpi/ic_launcher.png +0 -0
  77. data/test-server/instrumentation-backend/res/drawable-ldpi/ic_launcher.png +0 -0
  78. data/test-server/instrumentation-backend/res/drawable-mdpi/ic_launcher.png +0 -0
  79. data/test-server/instrumentation-backend/res/layout/main.xml +12 -0
  80. data/test-server/instrumentation-backend/res/values/strings.xml +7 -0
  81. data/test-server/instrumentation-backend/src/com/jayway/android/robotium/solo/MapViewUtils.java +328 -0
  82. data/test-server/instrumentation-backend/src/com/jayway/android/robotium/solo/PublicViewFetcher.java +11 -0
  83. data/test-server/instrumentation-backend/src/com/jayway/android/robotium/solo/SoloEnhanced.java +97 -0
  84. data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRFileStream.java +78 -0
  85. data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRInputStream.java +70 -0
  86. data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRReaderStream.java +95 -0
  87. data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRStringStream.java +230 -0
  88. data/test-server/instrumentation-backend/src/org/antlr/runtime/BaseRecognizer.java +894 -0
  89. data/test-server/instrumentation-backend/src/org/antlr/runtime/BitSet.java +325 -0
  90. data/test-server/instrumentation-backend/src/org/antlr/runtime/BufferedTokenStream.java +272 -0
  91. data/test-server/instrumentation-backend/src/org/antlr/runtime/CharStream.java +57 -0
  92. data/test-server/instrumentation-backend/src/org/antlr/runtime/CharStreamState.java +45 -0
  93. data/test-server/instrumentation-backend/src/org/antlr/runtime/ClassicToken.java +141 -0
  94. data/test-server/instrumentation-backend/src/org/antlr/runtime/CommonToken.java +191 -0
  95. data/test-server/instrumentation-backend/src/org/antlr/runtime/CommonTokenStream.java +153 -0
  96. data/test-server/instrumentation-backend/src/org/antlr/runtime/DFA.java +250 -0
  97. data/test-server/instrumentation-backend/src/org/antlr/runtime/EarlyExitException.java +41 -0
  98. data/test-server/instrumentation-backend/src/org/antlr/runtime/FailedPredicateException.java +54 -0
  99. data/test-server/instrumentation-backend/src/org/antlr/runtime/IntStream.java +122 -0
  100. data/test-server/instrumentation-backend/src/org/antlr/runtime/LegacyCommonTokenStream.java +394 -0
  101. data/test-server/instrumentation-backend/src/org/antlr/runtime/Lexer.java +340 -0
  102. data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedNotSetException.java +41 -0
  103. data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedRangeException.java +45 -0
  104. data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedSetException.java +44 -0
  105. data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedTokenException.java +45 -0
  106. data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedTreeNodeException.java +49 -0
  107. data/test-server/instrumentation-backend/src/org/antlr/runtime/MissingTokenException.java +56 -0
  108. data/test-server/instrumentation-backend/src/org/antlr/runtime/NoViableAltException.java +57 -0
  109. data/test-server/instrumentation-backend/src/org/antlr/runtime/Parser.java +98 -0
  110. data/test-server/instrumentation-backend/src/org/antlr/runtime/ParserRuleReturnScope.java +52 -0
  111. data/test-server/instrumentation-backend/src/org/antlr/runtime/RecognitionException.java +180 -0
  112. data/test-server/instrumentation-backend/src/org/antlr/runtime/RecognizerSharedState.java +144 -0
  113. data/test-server/instrumentation-backend/src/org/antlr/runtime/RuleReturnScope.java +42 -0
  114. data/test-server/instrumentation-backend/src/org/antlr/runtime/SerializedGrammar.java +204 -0
  115. data/test-server/instrumentation-backend/src/org/antlr/runtime/Token.java +92 -0
  116. data/test-server/instrumentation-backend/src/org/antlr/runtime/TokenRewriteStream.java +569 -0
  117. data/test-server/instrumentation-backend/src/org/antlr/runtime/TokenSource.java +54 -0
  118. data/test-server/instrumentation-backend/src/org/antlr/runtime/TokenStream.java +75 -0
  119. data/test-server/instrumentation-backend/src/org/antlr/runtime/UnbufferedTokenStream.java +82 -0
  120. data/test-server/instrumentation-backend/src/org/antlr/runtime/UnwantedTokenException.java +53 -0
  121. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/BlankDebugEventListener.java +77 -0
  122. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventHub.java +292 -0
  123. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventListener.java +323 -0
  124. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventRepeater.java +88 -0
  125. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventSocketProxy.java +358 -0
  126. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugParser.java +101 -0
  127. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTokenStream.java +156 -0
  128. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTreeAdaptor.java +250 -0
  129. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTreeNodeStream.java +155 -0
  130. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTreeParser.java +112 -0
  131. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/ParseTreeBuilder.java +109 -0
  132. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/Profiler.java +772 -0
  133. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/RemoteDebugEventSocketListener.java +541 -0
  134. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/TraceDebugEventListener.java +108 -0
  135. data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/Tracer.java +69 -0
  136. data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/DoubleKeyMap.java +62 -0
  137. data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/FastQueue.java +100 -0
  138. data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/IntArray.java +87 -0
  139. data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/LookaheadStream.java +161 -0
  140. data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/Stats.java +189 -0
  141. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/BaseTree.java +349 -0
  142. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/BaseTreeAdaptor.java +279 -0
  143. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/BufferedTreeNodeStream.java +489 -0
  144. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonErrorNode.java +108 -0
  145. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonTree.java +185 -0
  146. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonTreeAdaptor.java +168 -0
  147. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonTreeNodeStream.java +171 -0
  148. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/ParseTree.java +119 -0
  149. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteCardinalityException.java +47 -0
  150. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteEarlyExitException.java +39 -0
  151. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteEmptyStreamException.java +35 -0
  152. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleElementStream.java +210 -0
  153. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleNodeStream.java +70 -0
  154. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.java +86 -0
  155. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleTokenStream.java +76 -0
  156. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/Tree.java +127 -0
  157. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeAdaptor.java +263 -0
  158. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeFilter.java +135 -0
  159. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeIterator.java +132 -0
  160. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeNodeStream.java +106 -0
  161. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeParser.java +169 -0
  162. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreePatternLexer.java +135 -0
  163. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreePatternParser.java +154 -0
  164. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeRewriter.java +124 -0
  165. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeRuleReturnScope.java +41 -0
  166. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeVisitor.java +69 -0
  167. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeVisitorAction.java +47 -0
  168. data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeWizard.java +531 -0
  169. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/CalabashInstrumentationTestRunner.java +37 -0
  170. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/ClearAppData.java +63 -0
  171. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +64 -0
  172. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/FranklyResult.java +95 -0
  173. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +90 -0
  174. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +83 -0
  175. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/TestHelpers.java +130 -0
  176. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/WakeUp.java +30 -0
  177. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Action.java +11 -0
  178. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Actions.java +112 -0
  179. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java +222 -0
  180. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NanoHTTPD.java +1094 -0
  181. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NullAction.java +23 -0
  182. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/FinishOpenedActivities.java +19 -0
  183. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/GetOpenedActivities.java +31 -0
  184. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/GoBackToActivity.java +67 -0
  185. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/SetActivityOrientation.java +41 -0
  186. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +22 -0
  187. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +27 -0
  188. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonDescription.java +40 -0
  189. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +22 -0
  190. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +47 -0
  191. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +22 -0
  192. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +22 -0
  193. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +26 -0
  194. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +22 -0
  195. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +26 -0
  196. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/ClickOnScreen.java +31 -0
  197. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Drag.java +40 -0
  198. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/DragCoordinates.java +28 -0
  199. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Swipe.java +34 -0
  200. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/TouchCoordinates.java +28 -0
  201. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/InspectCurrentDialog.java +76 -0
  202. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/ListActions.java +26 -0
  203. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/l10n/L10nHelper.java +31 -0
  204. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/l10n/PressElement.java +48 -0
  205. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/l10n/WaitForElement.java +47 -0
  206. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListData.java +85 -0
  207. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemProperties.java +194 -0
  208. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemText.java +136 -0
  209. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +22 -0
  210. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +22 -0
  211. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +138 -0
  212. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapBounds.java +27 -0
  213. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapCenter.java +27 -0
  214. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapMarker.java +31 -0
  215. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapMarkers.java +48 -0
  216. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapZoom.java +19 -0
  217. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/PanMapTo.java +23 -0
  218. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/SetMapCenter.java +23 -0
  219. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/SetMapZoom.java +34 -0
  220. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/TapAwayFromMarkers.java +28 -0
  221. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/TapMapMarker.java +29 -0
  222. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +22 -0
  223. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +22 -0
  224. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/search/EnterQueryByIndex.java +24 -0
  225. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/DownKey.java +24 -0
  226. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/EnterKey.java +24 -0
  227. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/GoBack.java +22 -0
  228. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/LeftKey.java +24 -0
  229. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/PressMenu.java +26 -0
  230. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/RightKey.java +24 -0
  231. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +24 -0
  232. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/UpKey.java +24 -0
  233. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/GetSelectedSpinnerItemText.java +36 -0
  234. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +43 -0
  235. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertGridViewContainsNoDuplicates.java +72 -0
  236. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +31 -0
  237. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +32 -0
  238. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextById.java +30 -0
  239. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +22 -0
  240. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +33 -0
  241. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +22 -0
  242. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +32 -0
  243. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextById.java +30 -0
  244. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +22 -0
  245. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/GetTextById.java +42 -0
  246. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByContentDescription.java +33 -0
  247. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByIndex.java +24 -0
  248. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByContentDescription.java +34 -0
  249. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByIndex.java +26 -0
  250. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/version/Version.java +31 -0
  251. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/AssertViewProperty.java +141 -0
  252. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewByDescription.java +46 -0
  253. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +56 -0
  254. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/GetActivityName.java +32 -0
  255. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/GetViewProperty.java +101 -0
  256. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/HasView.java +31 -0
  257. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/IsCurrentActivityFocused.java +40 -0
  258. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/IsEnabled.java +30 -0
  259. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +34 -0
  260. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +89 -0
  261. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/SelectTab.java +110 -0
  262. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +24 -0
  263. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +21 -0
  264. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +47 -0
  265. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +54 -0
  266. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForTab.java +108 -0
  267. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +37 -0
  268. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForView.java +43 -0
  269. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForViewById.java +51 -0
  270. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +180 -0
  271. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +53 -0
  272. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +55 -0
  273. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +121 -0
  274. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteAsyncJavascript.java +77 -0
  275. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteJavascript.java +75 -0
  276. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/GetLoadProgress.java +21 -0
  277. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/GetUrl.java +21 -0
  278. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java +44 -0
  279. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +70 -0
  280. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +104 -0
  281. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +87 -0
  282. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +69 -0
  283. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +47 -0
  284. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/CompletedFuture.java +40 -0
  285. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/InvocationOperation.java +222 -0
  286. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Operation.java +7 -0
  287. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/PropertyOperation.java +56 -0
  288. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java +181 -0
  289. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/QueryResult.java +27 -0
  290. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQuery.tokens +19 -0
  291. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQueryResultVoid.java +22 -0
  292. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java +93 -0
  293. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java +1713 -0
  294. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java +771 -0
  295. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/BeginsWithRelation.java +45 -0
  296. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/ComparisonOperator.java +54 -0
  297. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/ContainsRelation.java +41 -0
  298. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/EndsWithRelation.java +42 -0
  299. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/InvalidUIQueryException.java +10 -0
  300. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/LikeRelation.java +79 -0
  301. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/PartialFutureList.java +100 -0
  302. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryAST.java +8 -0
  303. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTClassName.java +142 -0
  304. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTPredicate.java +147 -0
  305. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTPredicateRelation.java +5 -0
  306. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java +202 -0
  307. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryDirection.java +15 -0
  308. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryEvaluator.java +99 -0
  309. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java +271 -0
  310. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryVisibility.java +32 -0
  311. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variant.java +413 -0
  312. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variants.java +90 -0
  313. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/FormatSchema.java +29 -0
  314. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonEncoding.java +47 -0
  315. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonFactory.java +937 -0
  316. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerationException.java +28 -0
  317. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerator.java +1197 -0
  318. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonLocation.java +141 -0
  319. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonNode.java +879 -0
  320. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParseException.java +23 -0
  321. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParser.java +1434 -0
  322. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonProcessingException.java +80 -0
  323. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonStreamContext.java +122 -0
  324. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonToken.java +161 -0
  325. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/ObjectCodec.java +157 -0
  326. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/PrettyPrinter.java +166 -0
  327. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/SerializableString.java +54 -0
  328. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Version.java +90 -0
  329. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Versioned.java +20 -0
  330. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JacksonAnnotation.java +20 -0
  331. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnyGetter.java +25 -0
  332. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnySetter.java +24 -0
  333. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAutoDetect.java +148 -0
  334. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonBackReference.java +41 -0
  335. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonCreator.java +19 -0
  336. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonGetter.java +35 -0
  337. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnore.java +57 -0
  338. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreProperties.java +48 -0
  339. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreType.java +33 -0
  340. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonManagedReference.java +41 -0
  341. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonMethod.java +90 -0
  342. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonProperty.java +38 -0
  343. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonPropertyOrder.java +46 -0
  344. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonRawValue.java +33 -0
  345. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSetter.java +33 -0
  346. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSubTypes.java +44 -0
  347. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeInfo.java +236 -0
  348. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeName.java +28 -0
  349. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonUnwrapped.java +76 -0
  350. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonValue.java +46 -0
  351. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonWriteNullProperties.java +34 -0
  352. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/package-info.java +16 -0
  353. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatDetector.java +176 -0
  354. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatMatcher.java +117 -0
  355. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/InputAccessor.java +130 -0
  356. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/MatchStrength.java +64 -0
  357. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/package-info.java +8 -0
  358. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ByteSourceBootstrapper.java +518 -0
  359. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/DefaultPrettyPrinter.java +13 -0
  360. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Indenter.java +23 -0
  361. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonGeneratorBase.java +570 -0
  362. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonNumericParserBase.java +20 -0
  363. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserBase.java +1067 -0
  364. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserMinimalBase.java +539 -0
  365. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonReadContext.java +188 -0
  366. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonWriteContext.java +178 -0
  367. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParser.java +1815 -0
  368. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParserBase.java +228 -0
  369. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/StreamBasedParserBase.java +197 -0
  370. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8Generator.java +1757 -0
  371. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8StreamParser.java +2966 -0
  372. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/WriterBasedGenerator.java +1815 -0
  373. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/package-info.java +6 -0
  374. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/BaseReader.java +117 -0
  375. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/CharacterEscapes.java +73 -0
  376. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/IOContext.java +239 -0
  377. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/InputDecorator.java +67 -0
  378. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/JsonStringEncoder.java +408 -0
  379. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/MergedStream.java +145 -0
  380. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberInput.java +303 -0
  381. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberOutput.java +398 -0
  382. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/OutputDecorator.java +40 -0
  383. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SegmentedStringWriter.java +104 -0
  384. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SerializedString.java +114 -0
  385. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF32Reader.java +214 -0
  386. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF8Writer.java +387 -0
  387. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/package.html +4 -0
  388. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AbstractTypeResolver.java +63 -0
  389. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AnnotationIntrospector.java +1485 -0
  390. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanDescription.java +171 -0
  391. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanProperty.java +123 -0
  392. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanPropertyDefinition.java +66 -0
  393. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ClassIntrospector.java +117 -0
  394. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualDeserializer.java +38 -0
  395. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualKeyDeserializer.java +33 -0
  396. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualSerializer.java +38 -0
  397. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationConfig.java +926 -0
  398. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationContext.java +262 -0
  399. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationProblemHandler.java +56 -0
  400. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerFactory.java +356 -0
  401. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerProvider.java +185 -0
  402. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Deserializers.java +339 -0
  403. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/HandlerInstantiator.java +115 -0
  404. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/InjectableValues.java +85 -0
  405. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonDeserializer.java +166 -0
  406. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonMappingException.java +335 -0
  407. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializable.java +34 -0
  408. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializableWithType.java +22 -0
  409. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializer.java +138 -0
  410. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializer.java +31 -0
  411. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializers.java +21 -0
  412. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MapperConfig.java +1154 -0
  413. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingIterator.java +190 -0
  414. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingJsonFactory.java +81 -0
  415. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Module.java +255 -0
  416. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectMapper.java +2885 -0
  417. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectReader.java +958 -0
  418. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectWriter.java +554 -0
  419. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/PropertyNamingStrategy.java +258 -0
  420. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableDeserializer.java +23 -0
  421. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableSerializer.java +23 -0
  422. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/RuntimeJsonMappingException.java +21 -0
  423. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializationConfig.java +1041 -0
  424. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerFactory.java +198 -0
  425. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerProvider.java +552 -0
  426. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Serializers.java +137 -0
  427. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeDeserializer.java +118 -0
  428. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeSerializer.java +164 -0
  429. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonInject.java +30 -0
  430. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonStdImpl.java +25 -0
  431. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonCachable.java +32 -0
  432. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonDeserialize.java +109 -0
  433. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonFilter.java +31 -0
  434. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonRootName.java +29 -0
  435. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonSerialize.java +216 -0
  436. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeIdResolver.java +35 -0
  437. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeResolver.java +28 -0
  438. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonValueInstantiator.java +26 -0
  439. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonView.java +37 -0
  440. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/NoClass.java +19 -0
  441. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/package-info.java +5 -0
  442. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/AbstractDeserializer.java +102 -0
  443. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializer.java +28 -0
  444. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializers.java +11 -0
  445. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BasicDeserializerFactory.java +894 -0
  446. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializer.java +1537 -0
  447. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerBuilder.java +277 -0
  448. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerFactory.java +1474 -0
  449. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerModifier.java +58 -0
  450. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CollectionDeserializer.java +47 -0
  451. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ContainerDeserializer.java +14 -0
  452. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CustomDeserializerFactory.java +227 -0
  453. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/DateDeserializer.java +9 -0
  454. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumDeserializer.java +15 -0
  455. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumResolver.java +17 -0
  456. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/FromStringDeserializer.java +13 -0
  457. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/JsonNodeDeserializer.java +54 -0
  458. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/MapDeserializer.java +44 -0
  459. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableAnyProperty.java +177 -0
  460. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableBeanProperty.java +827 -0
  461. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializationContext.java +326 -0
  462. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializer.java +94 -0
  463. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializerProvider.java +494 -0
  464. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializers.java +119 -0
  465. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializer.java +12 -0
  466. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializers.java +11 -0
  467. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdScalarDeserializer.java +13 -0
  468. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ThrowableDeserializer.java +13 -0
  469. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/UntypedObjectDeserializer.java +9 -0
  470. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiator.java +280 -0
  471. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiators.java +52 -0
  472. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/BeanPropertyMap.java +257 -0
  473. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorCollector.java +141 -0
  474. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorProperty.java +152 -0
  475. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java +173 -0
  476. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java +117 -0
  477. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValue.java +117 -0
  478. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValueBuffer.java +102 -0
  479. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/UnwrappedPropertyHandler.java +41 -0
  480. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ValueInjector.java +45 -0
  481. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/package-info.java +9 -0
  482. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/package-info.java +5 -0
  483. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicBooleanDeserializer.java +22 -0
  484. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicReferenceDeserializer.java +47 -0
  485. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CalendarDeserializer.java +47 -0
  486. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ClassDeserializer.java +49 -0
  487. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CollectionDeserializer.java +265 -0
  488. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ContainerDeserializerBase.java +37 -0
  489. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/DateDeserializer.java +30 -0
  490. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumDeserializer.java +139 -0
  491. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumMapDeserializer.java +90 -0
  492. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumSetDeserializer.java +89 -0
  493. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/FromStringDeserializer.java +265 -0
  494. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JavaTypeDeserializer.java +38 -0
  495. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JsonNodeDeserializer.java +314 -0
  496. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/MapDeserializer.java +412 -0
  497. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ObjectArrayDeserializer.java +201 -0
  498. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/PrimitiveArrayDeserializers.java +583 -0
  499. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdDeserializer.java +1136 -0
  500. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializer.java +340 -0
  501. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializers.java +108 -0
  502. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdScalarDeserializer.java +34 -0
  503. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdValueInstantiator.java +392 -0
  504. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringCollectionDeserializer.java +227 -0
  505. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringDeserializer.java +55 -0
  506. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ThrowableDeserializer.java +164 -0
  507. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TimestampDeserializer.java +30 -0
  508. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TokenBufferDeserializer.java +36 -0
  509. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/UntypedObjectDeserializer.java +248 -0
  510. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/package-info.java +15 -0
  511. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/exc/UnrecognizedPropertyException.java +75 -0
  512. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/DOMDeserializer.java +65 -0
  513. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/OptionalHandlerFactory.java +217 -0
  514. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/package-info.java +23 -0
  515. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/Annotated.java +85 -0
  516. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedClass.java +980 -0
  517. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedConstructor.java +143 -0
  518. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedField.java +119 -0
  519. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMember.java +56 -0
  520. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethod.java +188 -0
  521. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethodMap.java +85 -0
  522. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedParameter.java +191 -0
  523. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedWithParams.java +195 -0
  524. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotationMap.java +101 -0
  525. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicBeanDescription.java +615 -0
  526. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicClassIntrospector.java +364 -0
  527. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/JacksonAnnotationIntrospector.java +813 -0
  528. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MemberKey.java +83 -0
  529. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MethodFilter.java +12 -0
  530. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/NopAnnotationIntrospector.java +209 -0
  531. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertiesCollector.java +713 -0
  532. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertyBuilder.java +648 -0
  533. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/VisibilityChecker.java +424 -0
  534. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/package-info.java +12 -0
  535. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/NamedType.java +53 -0
  536. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/SubtypeResolver.java +39 -0
  537. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeIdResolver.java +74 -0
  538. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeResolverBuilder.java +151 -0
  539. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeDeserializer.java +126 -0
  540. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeSerializer.java +110 -0
  541. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeDeserializer.java +37 -0
  542. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeSerializer.java +129 -0
  543. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeDeserializer.java +191 -0
  544. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeSerializer.java +69 -0
  545. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeDeserializer.java +103 -0
  546. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeSerializer.java +121 -0
  547. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/ClassNameIdResolver.java +138 -0
  548. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/MinimalClassNameIdResolver.java +66 -0
  549. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdSubtypeResolver.java +151 -0
  550. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdTypeResolverBuilder.java +202 -0
  551. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeDeserializerBase.java +154 -0
  552. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeIdResolverBase.java +37 -0
  553. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeNameIdResolver.java +154 -0
  554. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeSerializerBase.java +31 -0
  555. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/package-info.java +9 -0
  556. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/package-info.java +10 -0
  557. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleAbstractTypeResolver.java +86 -0
  558. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleDeserializers.java +130 -0
  559. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleKeyDeserializers.java +59 -0
  560. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleModule.java +265 -0
  561. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleSerializers.java +206 -0
  562. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleValueInstantiators.java +45 -0
  563. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/package-info.java +16 -0
  564. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/package-info.java +34 -0
  565. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/AnyGetterWriter.java +48 -0
  566. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ArraySerializers.java +7 -0
  567. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BasicSerializerFactory.java +806 -0
  568. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyFilter.java +30 -0
  569. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyWriter.java +512 -0
  570. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializer.java +126 -0
  571. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerBuilder.java +140 -0
  572. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerFactory.java +780 -0
  573. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerModifier.java +95 -0
  574. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ContainerSerializers.java +8 -0
  575. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/CustomSerializerFactory.java +293 -0
  576. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/EnumSerializer.java +17 -0
  577. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilterProvider.java +23 -0
  578. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilteredBeanPropertyWriter.java +96 -0
  579. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/JdkSerializers.java +11 -0
  580. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/MapSerializer.java +58 -0
  581. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/PropertyBuilder.java +372 -0
  582. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ScalarSerializerBase.java +18 -0
  583. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/SerializerBase.java +23 -0
  584. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdKeySerializer.java +10 -0
  585. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializerProvider.java +852 -0
  586. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializers.java +372 -0
  587. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ToStringSerializer.java +14 -0
  588. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/FailingSerializer.java +43 -0
  589. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/JsonSerializerMap.java +93 -0
  590. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/PropertySerializerMap.java +231 -0
  591. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/ReadOnlyClassToSerializerMap.java +73 -0
  592. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SerializerCache.java +304 -0
  593. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleBeanPropertyFilter.java +109 -0
  594. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleFilterProvider.java +114 -0
  595. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnknownSerializer.java +54 -0
  596. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanPropertyWriter.java +99 -0
  597. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanSerializer.java +76 -0
  598. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/package-info.java +5 -0
  599. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/package-info.java +5 -0
  600. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/AsArraySerializerBase.java +185 -0
  601. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/BeanSerializerBase.java +340 -0
  602. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CalendarSerializer.java +43 -0
  603. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CollectionSerializer.java +113 -0
  604. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ContainerSerializerBase.java +51 -0
  605. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/DateSerializer.java +42 -0
  606. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumMapSerializer.java +218 -0
  607. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSerializer.java +84 -0
  608. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSetSerializer.java +47 -0
  609. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IndexedStringListSerializer.java +116 -0
  610. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/InetAddressSerializer.java +51 -0
  611. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IterableSerializer.java +63 -0
  612. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/JsonValueSerializer.java +233 -0
  613. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/MapSerializer.java +422 -0
  614. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NonTypedScalarSerializerBase.java +34 -0
  615. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NullSerializer.java +38 -0
  616. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ObjectArraySerializer.java +281 -0
  617. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/RawSerializer.java +52 -0
  618. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ScalarSerializerBase.java +52 -0
  619. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableSerializer.java +99 -0
  620. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableWithTypeSerializer.java +90 -0
  621. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializerBase.java +184 -0
  622. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StaticListSerializerBase.java +46 -0
  623. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdArraySerializers.java +476 -0
  624. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdContainerSerializers.java +249 -0
  625. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdJdkSerializers.java +195 -0
  626. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializer.java +43 -0
  627. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializers.java +95 -0
  628. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringCollectionSerializer.java +119 -0
  629. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringSerializer.java +36 -0
  630. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TimeZoneSerializer.java +38 -0
  631. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ToStringSerializer.java +73 -0
  632. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TokenBufferSerializer.java +66 -0
  633. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ArrayType.java +260 -0
  634. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ClassKey.java +94 -0
  635. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionLikeType.java +204 -0
  636. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionType.java +94 -0
  637. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/HierarchicType.java +88 -0
  638. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapLikeType.java +265 -0
  639. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapType.java +146 -0
  640. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/SimpleType.java +250 -0
  641. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBase.java +148 -0
  642. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBindings.java +351 -0
  643. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeFactory.java +1165 -0
  644. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeModifier.java +38 -0
  645. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeParser.java +134 -0
  646. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/package-info.java +10 -0
  647. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Annotations.java +23 -0
  648. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ArrayBuilders.java +293 -0
  649. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/BeanUtil.java +260 -0
  650. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ClassUtil.java +645 -0
  651. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Comparators.java +48 -0
  652. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumResolver.java +108 -0
  653. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumValues.java +82 -0
  654. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601DateFormat.java +52 -0
  655. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601Utils.java +230 -0
  656. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONPObject.java +105 -0
  657. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONWrappedObject.java +117 -0
  658. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LRUMap.java +28 -0
  659. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LinkedNode.java +45 -0
  660. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Named.java +10 -0
  661. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ObjectBuffer.java +257 -0
  662. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/PrimitiveArrayBuilder.java +180 -0
  663. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Provider.java +21 -0
  664. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/RootNameLookup.java +54 -0
  665. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/StdDateFormat.java +348 -0
  666. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/package-info.java +4 -0
  667. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ArrayNode.java +758 -0
  668. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BaseJsonNode.java +122 -0
  669. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BigIntegerNode.java +104 -0
  670. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BinaryNode.java +136 -0
  671. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BooleanNode.java +84 -0
  672. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ContainerNode.java +185 -0
  673. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DecimalNode.java +96 -0
  674. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DoubleNode.java +106 -0
  675. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/IntNode.java +122 -0
  676. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/JsonNodeFactory.java +222 -0
  677. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/LongNode.java +99 -0
  678. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/MissingNode.java +97 -0
  679. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NodeCursor.java +222 -0
  680. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NullNode.java +58 -0
  681. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NumericNode.java +72 -0
  682. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ObjectNode.java +696 -0
  683. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/POJONode.java +145 -0
  684. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TextNode.java +299 -0
  685. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TreeTraversingParser.java +383 -0
  686. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ValueNode.java +58 -0
  687. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/package-info.java +8 -0
  688. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/package-info.java +30 -0
  689. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSchema.java +82 -0
  690. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSerializableSchema.java +46 -0
  691. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/SchemaAware.java +25 -0
  692. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/package-info.java +5 -0
  693. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/BytesToNameCanonicalizer.java +969 -0
  694. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/CharsToNameCanonicalizer.java +578 -0
  695. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name.java +50 -0
  696. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name1.java +44 -0
  697. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name2.java +40 -0
  698. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name3.java +39 -0
  699. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/NameN.java +68 -0
  700. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/package-info.java +5 -0
  701. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/JavaType.java +503 -0
  702. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/TypeReference.java +60 -0
  703. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/package-info.java +8 -0
  704. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/BufferRecycler.java +109 -0
  705. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/ByteArrayBuilder.java +294 -0
  706. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/CharTypes.java +237 -0
  707. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/DefaultPrettyPrinter.java +282 -0
  708. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/InternCache.java +49 -0
  709. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonGeneratorDelegate.java +273 -0
  710. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserDelegate.java +251 -0
  711. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserSequence.java +150 -0
  712. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/MinimalPrettyPrinter.java +152 -0
  713. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TextBuffer.java +707 -0
  714. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TokenBuffer.java +1233 -0
  715. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/VersionUtil.java +79 -0
  716. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/package-info.java +4 -0
  717. metadata +868 -0
@@ -0,0 +1,1757 @@
1
+ package sh.calaba.org.codehaus.jackson.impl;
2
+
3
+ import java.io.*;
4
+ import java.math.BigDecimal;
5
+ import java.math.BigInteger;
6
+
7
+ import sh.calaba.org.codehaus.jackson.*;
8
+ import sh.calaba.org.codehaus.jackson.io.CharacterEscapes;
9
+ import sh.calaba.org.codehaus.jackson.io.IOContext;
10
+ import sh.calaba.org.codehaus.jackson.io.NumberOutput;
11
+ import sh.calaba.org.codehaus.jackson.io.SerializedString;
12
+ import sh.calaba.org.codehaus.jackson.util.CharTypes;
13
+
14
+ public class Utf8Generator
15
+ extends JsonGeneratorBase
16
+ {
17
+ private final static byte BYTE_u = (byte) 'u';
18
+
19
+ private final static byte BYTE_0 = (byte) '0';
20
+
21
+ private final static byte BYTE_LBRACKET = (byte) '[';
22
+ private final static byte BYTE_RBRACKET = (byte) ']';
23
+ private final static byte BYTE_LCURLY = (byte) '{';
24
+ private final static byte BYTE_RCURLY = (byte) '}';
25
+
26
+ private final static byte BYTE_BACKSLASH = (byte) '\\';
27
+ private final static byte BYTE_SPACE = (byte) ' ';
28
+ private final static byte BYTE_COMMA = (byte) ',';
29
+ private final static byte BYTE_COLON = (byte) ':';
30
+ private final static byte BYTE_QUOTE = (byte) '"';
31
+
32
+ protected final static int SURR1_FIRST = 0xD800;
33
+ protected final static int SURR1_LAST = 0xDBFF;
34
+ protected final static int SURR2_FIRST = 0xDC00;
35
+ protected final static int SURR2_LAST = 0xDFFF;
36
+
37
+ // intermediate copies only made up to certain length...
38
+ private final static int MAX_BYTES_TO_BUFFER = 512;
39
+
40
+ final static byte[] HEX_CHARS = CharTypes.copyHexBytes();
41
+
42
+ private final static byte[] NULL_BYTES = { 'n', 'u', 'l', 'l' };
43
+ private final static byte[] TRUE_BYTES = { 't', 'r', 'u', 'e' };
44
+ private final static byte[] FALSE_BYTES = { 'f', 'a', 'l', 's', 'e' };
45
+
46
+ /**
47
+ * This is the default set of escape codes, over 7-bit ASCII range
48
+ * (first 128 character codes), used for single-byte UTF-8 characters.
49
+ */
50
+ protected final static int[] sOutputEscapes = CharTypes.get7BitOutputEscapes();
51
+
52
+ /*
53
+ /**********************************************************
54
+ /* Configuration, basic I/O
55
+ /**********************************************************
56
+ */
57
+
58
+ final protected IOContext _ioContext;
59
+
60
+ /**
61
+ * Underlying output stream used for writing JSON content.
62
+ */
63
+ final protected OutputStream _outputStream;
64
+
65
+ /*
66
+ /**********************************************************
67
+ /* Configuration, output escaping
68
+ /**********************************************************
69
+ */
70
+
71
+ /**
72
+ * Currently active set of output escape code definitions (whether
73
+ * and how to escape or not) for 7-bit ASCII range (first 128
74
+ * character codes). Defined separately to make potentially
75
+ * customizable
76
+ */
77
+ protected int[] _outputEscapes = sOutputEscapes;
78
+
79
+ /**
80
+ * Value between 128 (0x80) and 65535 (0xFFFF) that indicates highest
81
+ * Unicode code point that will not need escaping; or 0 to indicate
82
+ * that all characters can be represented without escaping.
83
+ * Typically used to force escaping of some portion of character set;
84
+ * for example to always escape non-ASCII characters (if value was 127).
85
+ *<p>
86
+ * NOTE: not all sub-classes make use of this setting.
87
+ */
88
+ protected int _maximumNonEscapedChar;
89
+
90
+ /**
91
+ * Definition of custom character escapes to use for generators created
92
+ * by this factory, if any. If null, standard data format specific
93
+ * escapes are used.
94
+ *
95
+ * @since 1.8
96
+ */
97
+ protected CharacterEscapes _characterEscapes;
98
+
99
+ /*
100
+ /**********************************************************
101
+ /* Output buffering
102
+ /**********************************************************
103
+ */
104
+
105
+ /**
106
+ * Intermediate buffer in which contents are buffered before
107
+ * being written using {@link #_outputStream}.
108
+ */
109
+ protected byte[] _outputBuffer;
110
+
111
+ /**
112
+ * Pointer to the position right beyond the last character to output
113
+ * (end marker; may be past the buffer)
114
+ */
115
+ protected int _outputTail = 0;
116
+
117
+ /**
118
+ * End marker of the output buffer; one past the last valid position
119
+ * within the buffer.
120
+ */
121
+ protected final int _outputEnd;
122
+
123
+ /**
124
+ * Maximum number of <code>char</code>s that we know will always fit
125
+ * in the output buffer after escaping
126
+ */
127
+ protected final int _outputMaxContiguous;
128
+
129
+ /**
130
+ * Intermediate buffer in which characters of a String are copied
131
+ * before being encoded.
132
+ */
133
+ protected char[] _charBuffer;
134
+
135
+ /**
136
+ * Length of <code>_charBuffer</code>
137
+ */
138
+ protected final int _charBufferLength;
139
+
140
+ /**
141
+ * 6 character temporary buffer allocated if needed, for constructing
142
+ * escape sequences
143
+ */
144
+ protected byte[] _entityBuffer;
145
+
146
+ /**
147
+ * Flag that indicates whether the output buffer is recycable (and
148
+ * needs to be returned to recycler once we are done) or not.
149
+ */
150
+ protected boolean _bufferRecyclable;
151
+
152
+ /*
153
+ /**********************************************************
154
+ /* Life-cycle
155
+ /**********************************************************
156
+ */
157
+
158
+ public Utf8Generator(IOContext ctxt, int features, ObjectCodec codec,
159
+ OutputStream out)
160
+ {
161
+
162
+ super(features, codec);
163
+ _ioContext = ctxt;
164
+ _outputStream = out;
165
+ _bufferRecyclable = true;
166
+ _outputBuffer = ctxt.allocWriteEncodingBuffer();
167
+ _outputEnd = _outputBuffer.length;
168
+ /* To be exact, each char can take up to 6 bytes when escaped (Unicode
169
+ * escape with backslash, 'u' and 4 hex digits); but to avoid fluctuation,
170
+ * we will actually round down to only do up to 1/8 number of chars
171
+ */
172
+ _outputMaxContiguous = _outputEnd >> 3;
173
+ _charBuffer = ctxt.allocConcatBuffer();
174
+ _charBufferLength = _charBuffer.length;
175
+
176
+ // By default we use this feature to determine additional quoting
177
+ if (isEnabled(Feature.ESCAPE_NON_ASCII)) {
178
+ setHighestNonEscapedChar(127);
179
+ }
180
+ }
181
+
182
+ public Utf8Generator(IOContext ctxt, int features, ObjectCodec codec,
183
+ OutputStream out, byte[] outputBuffer, int outputOffset, boolean bufferRecyclable)
184
+ {
185
+
186
+ super(features, codec);
187
+ _ioContext = ctxt;
188
+ _outputStream = out;
189
+ _bufferRecyclable = bufferRecyclable;
190
+ _outputTail = outputOffset;
191
+ _outputBuffer = outputBuffer;
192
+ _outputEnd = _outputBuffer.length;
193
+ // up to 6 bytes per char (see above), rounded up to 1/8
194
+ _outputMaxContiguous = _outputEnd >> 3;
195
+ _charBuffer = ctxt.allocConcatBuffer();
196
+ _charBufferLength = _charBuffer.length;
197
+
198
+ if (isEnabled(Feature.ESCAPE_NON_ASCII)) {
199
+ setHighestNonEscapedChar(127);
200
+ }
201
+ }
202
+
203
+ /*
204
+ /**********************************************************
205
+ /* Overridden configuration methods
206
+ /**********************************************************
207
+ */
208
+
209
+ @Override
210
+ public JsonGenerator setHighestNonEscapedChar(int charCode) {
211
+ _maximumNonEscapedChar = (charCode < 0) ? 0 : charCode;
212
+ return this;
213
+ }
214
+
215
+ @Override
216
+ public int getHighestEscapedChar() {
217
+ return _maximumNonEscapedChar;
218
+ }
219
+
220
+ @Override
221
+ public JsonGenerator setCharacterEscapes(CharacterEscapes esc)
222
+ {
223
+ _characterEscapes = esc;
224
+ if (esc == null) { // revert to standard escapes
225
+ _outputEscapes = sOutputEscapes;
226
+ } else {
227
+ _outputEscapes = esc.getEscapeCodesForAscii();
228
+ }
229
+ return this;
230
+ }
231
+
232
+ /**
233
+ * Method for accessing custom escapes factory uses for {@link JsonGenerator}s
234
+ * it creates.
235
+ *
236
+ * @since 1.8
237
+ */
238
+ @Override
239
+ public CharacterEscapes getCharacterEscapes() {
240
+ return _characterEscapes;
241
+ }
242
+
243
+ @Override
244
+ public Object getOutputTarget() {
245
+ return _outputStream;
246
+ }
247
+
248
+ /*
249
+ /**********************************************************
250
+ /* Overridden methods
251
+ /**********************************************************
252
+ */
253
+
254
+ /* Most overrides in this section are just to make methods final,
255
+ * to allow better inlining...
256
+ */
257
+ @Override
258
+ public final void writeStringField(String fieldName, String value)
259
+ throws IOException, JsonGenerationException
260
+ {
261
+ writeFieldName(fieldName);
262
+ writeString(value);
263
+ }
264
+
265
+ @Override
266
+ public final void writeFieldName(String name) throws IOException, JsonGenerationException
267
+ {
268
+ int status = _writeContext.writeFieldName(name);
269
+ if (status == JsonWriteContext.STATUS_EXPECT_VALUE) {
270
+ _reportError("Can not write a field name, expecting a value");
271
+ }
272
+ if (_cfgPrettyPrinter != null) {
273
+ _writePPFieldName(name, (status == JsonWriteContext.STATUS_OK_AFTER_COMMA));
274
+ return;
275
+ }
276
+ if (status == JsonWriteContext.STATUS_OK_AFTER_COMMA) { // need comma
277
+ if (_outputTail >= _outputEnd) {
278
+ _flushBuffer();
279
+ }
280
+ _outputBuffer[_outputTail++] = BYTE_COMMA;
281
+ }
282
+ _writeFieldName(name);
283
+ }
284
+
285
+ @Override
286
+ public final void writeFieldName(SerializedString name)
287
+ throws IOException, JsonGenerationException
288
+ {
289
+ // Object is a value, need to verify it's allowed
290
+ int status = _writeContext.writeFieldName(name.getValue());
291
+ if (status == JsonWriteContext.STATUS_EXPECT_VALUE) {
292
+ _reportError("Can not write a field name, expecting a value");
293
+ }
294
+ if (_cfgPrettyPrinter != null) {
295
+ _writePPFieldName(name, (status == JsonWriteContext.STATUS_OK_AFTER_COMMA));
296
+ return;
297
+ }
298
+ if (status == JsonWriteContext.STATUS_OK_AFTER_COMMA) {
299
+ if (_outputTail >= _outputEnd) {
300
+ _flushBuffer();
301
+ }
302
+ _outputBuffer[_outputTail++] = BYTE_COMMA;
303
+ }
304
+ _writeFieldName(name);
305
+ }
306
+
307
+ @Override
308
+ public final void writeFieldName(SerializableString name)
309
+ throws IOException, JsonGenerationException
310
+ {
311
+ // Object is a value, need to verify it's allowed
312
+ int status = _writeContext.writeFieldName(name.getValue());
313
+ if (status == JsonWriteContext.STATUS_EXPECT_VALUE) {
314
+ _reportError("Can not write a field name, expecting a value");
315
+ }
316
+ if (_cfgPrettyPrinter != null) {
317
+ _writePPFieldName(name, (status == JsonWriteContext.STATUS_OK_AFTER_COMMA));
318
+ return;
319
+ }
320
+ if (status == JsonWriteContext.STATUS_OK_AFTER_COMMA) {
321
+ if (_outputTail >= _outputEnd) {
322
+ _flushBuffer();
323
+ }
324
+ _outputBuffer[_outputTail++] = BYTE_COMMA;
325
+ }
326
+ _writeFieldName(name);
327
+ }
328
+
329
+ /*
330
+ /**********************************************************
331
+ /* Output method implementations, structural
332
+ /**********************************************************
333
+ */
334
+
335
+ @Override
336
+ public final void writeStartArray() throws IOException, JsonGenerationException
337
+ {
338
+ _verifyValueWrite("start an array");
339
+ _writeContext = _writeContext.createChildArrayContext();
340
+ if (_cfgPrettyPrinter != null) {
341
+ _cfgPrettyPrinter.writeStartArray(this);
342
+ } else {
343
+ if (_outputTail >= _outputEnd) {
344
+ _flushBuffer();
345
+ }
346
+ _outputBuffer[_outputTail++] = BYTE_LBRACKET;
347
+ }
348
+ }
349
+
350
+ @Override
351
+ public final void writeEndArray() throws IOException, JsonGenerationException
352
+ {
353
+ if (!_writeContext.inArray()) {
354
+ _reportError("Current context not an ARRAY but "+_writeContext.getTypeDesc());
355
+ }
356
+ if (_cfgPrettyPrinter != null) {
357
+ _cfgPrettyPrinter.writeEndArray(this, _writeContext.getEntryCount());
358
+ } else {
359
+ if (_outputTail >= _outputEnd) {
360
+ _flushBuffer();
361
+ }
362
+ _outputBuffer[_outputTail++] = BYTE_RBRACKET;
363
+ }
364
+ _writeContext = _writeContext.getParent();
365
+ }
366
+
367
+ @Override
368
+ public final void writeStartObject() throws IOException, JsonGenerationException
369
+ {
370
+ _verifyValueWrite("start an object");
371
+ _writeContext = _writeContext.createChildObjectContext();
372
+ if (_cfgPrettyPrinter != null) {
373
+ _cfgPrettyPrinter.writeStartObject(this);
374
+ } else {
375
+ if (_outputTail >= _outputEnd) {
376
+ _flushBuffer();
377
+ }
378
+ _outputBuffer[_outputTail++] = BYTE_LCURLY;
379
+ }
380
+ }
381
+
382
+ @Override
383
+ public final void writeEndObject() throws IOException, JsonGenerationException
384
+ {
385
+ if (!_writeContext.inObject()) {
386
+ _reportError("Current context not an object but "+_writeContext.getTypeDesc());
387
+ }
388
+ _writeContext = _writeContext.getParent();
389
+ if (_cfgPrettyPrinter != null) {
390
+ _cfgPrettyPrinter.writeEndObject(this, _writeContext.getEntryCount());
391
+ } else {
392
+ if (_outputTail >= _outputEnd) {
393
+ _flushBuffer();
394
+ }
395
+ _outputBuffer[_outputTail++] = BYTE_RCURLY;
396
+ }
397
+ }
398
+
399
+ protected final void _writeFieldName(String name)
400
+ throws IOException, JsonGenerationException
401
+ {
402
+ /* To support [JACKSON-46], we'll do this:
403
+ * (Question: should quoting of spaces (etc) still be enabled?)
404
+ */
405
+ if (!isEnabled(Feature.QUOTE_FIELD_NAMES)) {
406
+ _writeStringSegments(name);
407
+ return;
408
+ }
409
+ if (_outputTail >= _outputEnd) {
410
+ _flushBuffer();
411
+ }
412
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
413
+ // The beef:
414
+ final int len = name.length();
415
+ if (len <= _charBufferLength) { // yes, fits right in
416
+ name.getChars(0, len, _charBuffer, 0);
417
+ // But as one segment, or multiple?
418
+ if (len <= _outputMaxContiguous) {
419
+ if ((_outputTail + len) > _outputEnd) { // caller must ensure enough space
420
+ _flushBuffer();
421
+ }
422
+ _writeStringSegment(_charBuffer, 0, len);
423
+ } else {
424
+ _writeStringSegments(_charBuffer, 0, len);
425
+ }
426
+ } else {
427
+ _writeStringSegments(name);
428
+ }
429
+
430
+ // and closing quotes; need room for one more char:
431
+ if (_outputTail >= _outputEnd) {
432
+ _flushBuffer();
433
+ }
434
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
435
+ }
436
+
437
+ protected final void _writeFieldName(SerializableString name)
438
+ throws IOException, JsonGenerationException
439
+ {
440
+ byte[] raw = name.asQuotedUTF8();
441
+ if (!isEnabled(Feature.QUOTE_FIELD_NAMES)) {
442
+ _writeBytes(raw);
443
+ return;
444
+ }
445
+ if (_outputTail >= _outputEnd) {
446
+ _flushBuffer();
447
+ }
448
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
449
+
450
+ // Can do it all in buffer?
451
+ final int len = raw.length;
452
+ if ((_outputTail + len + 1) < _outputEnd) { // yup
453
+ System.arraycopy(raw, 0, _outputBuffer, _outputTail, len);
454
+ _outputTail += len;
455
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
456
+ } else {
457
+ _writeBytes(raw);
458
+ if (_outputTail >= _outputEnd) {
459
+ _flushBuffer();
460
+ }
461
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
462
+ }
463
+ }
464
+
465
+ /**
466
+ * Specialized version of <code>_writeFieldName</code>, off-lined
467
+ * to keep the "fast path" as simple (and hopefully fast) as possible.
468
+ */
469
+ protected final void _writePPFieldName(String name, boolean commaBefore)
470
+ throws IOException, JsonGenerationException
471
+ {
472
+ if (commaBefore) {
473
+ _cfgPrettyPrinter.writeObjectEntrySeparator(this);
474
+ } else {
475
+ _cfgPrettyPrinter.beforeObjectEntries(this);
476
+ }
477
+
478
+ if (isEnabled(Feature.QUOTE_FIELD_NAMES)) { // standard
479
+ if (_outputTail >= _outputEnd) {
480
+ _flushBuffer();
481
+ }
482
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
483
+ final int len = name.length();
484
+ if (len <= _charBufferLength) { // yes, fits right in
485
+ name.getChars(0, len, _charBuffer, 0);
486
+ // But as one segment, or multiple?
487
+ if (len <= _outputMaxContiguous) {
488
+ if ((_outputTail + len) > _outputEnd) { // caller must ensure enough space
489
+ _flushBuffer();
490
+ }
491
+ _writeStringSegment(_charBuffer, 0, len);
492
+ } else {
493
+ _writeStringSegments(_charBuffer, 0, len);
494
+ }
495
+ } else {
496
+ _writeStringSegments(name);
497
+ }
498
+ if (_outputTail >= _outputEnd) {
499
+ _flushBuffer();
500
+ }
501
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
502
+ } else { // non-standard, omit quotes
503
+ _writeStringSegments(name);
504
+ }
505
+ }
506
+
507
+ protected final void _writePPFieldName(SerializableString name, boolean commaBefore)
508
+ throws IOException, JsonGenerationException
509
+ {
510
+ if (commaBefore) {
511
+ _cfgPrettyPrinter.writeObjectEntrySeparator(this);
512
+ } else {
513
+ _cfgPrettyPrinter.beforeObjectEntries(this);
514
+ }
515
+
516
+ boolean addQuotes = isEnabled(Feature.QUOTE_FIELD_NAMES); // standard
517
+ if (addQuotes) {
518
+ if (_outputTail >= _outputEnd) {
519
+ _flushBuffer();
520
+ }
521
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
522
+ }
523
+ _writeBytes(name.asQuotedUTF8());
524
+ if (addQuotes) {
525
+ if (_outputTail >= _outputEnd) {
526
+ _flushBuffer();
527
+ }
528
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
529
+ }
530
+ }
531
+
532
+ /*
533
+ /**********************************************************
534
+ /* Output method implementations, textual
535
+ /**********************************************************
536
+ */
537
+
538
+ @Override
539
+ public void writeString(String text)
540
+ throws IOException, JsonGenerationException
541
+ {
542
+ _verifyValueWrite("write text value");
543
+ if (text == null) {
544
+ _writeNull();
545
+ return;
546
+ }
547
+ // First: can we make a local copy of chars that make up text?
548
+ final int len = text.length();
549
+ if (len > _charBufferLength) { // nope: off-line handling
550
+ _writeLongString(text);
551
+ return;
552
+ }
553
+ // yes: good.
554
+ text.getChars(0, len, _charBuffer, 0);
555
+ // Output: if we can't guarantee it fits in output buffer, off-line as well:
556
+ if (len > _outputMaxContiguous) {
557
+ _writeLongString(_charBuffer, 0, len);
558
+ return;
559
+ }
560
+ if ((_outputTail + len) >= _outputEnd) {
561
+ _flushBuffer();
562
+ }
563
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
564
+ _writeStringSegment(_charBuffer, 0, len); // we checked space already above
565
+ /* [JACKSON-462] But that method may have had to expand multi-byte Unicode
566
+ * chars, so we must check again
567
+ */
568
+ if (_outputTail >= _outputEnd) {
569
+ _flushBuffer();
570
+ }
571
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
572
+ }
573
+
574
+ private final void _writeLongString(String text)
575
+ throws IOException, JsonGenerationException
576
+ {
577
+ if (_outputTail >= _outputEnd) {
578
+ _flushBuffer();
579
+ }
580
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
581
+ _writeStringSegments(text);
582
+ if (_outputTail >= _outputEnd) {
583
+ _flushBuffer();
584
+ }
585
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
586
+ }
587
+
588
+ private final void _writeLongString(char[] text, int offset, int len)
589
+ throws IOException, JsonGenerationException
590
+ {
591
+ if (_outputTail >= _outputEnd) {
592
+ _flushBuffer();
593
+ }
594
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
595
+ _writeStringSegments(_charBuffer, 0, len);
596
+ if (_outputTail >= _outputEnd) {
597
+ _flushBuffer();
598
+ }
599
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
600
+ }
601
+
602
+ @Override
603
+ public void writeString(char[] text, int offset, int len)
604
+ throws IOException, JsonGenerationException
605
+ {
606
+ _verifyValueWrite("write text value");
607
+ if (_outputTail >= _outputEnd) {
608
+ _flushBuffer();
609
+ }
610
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
611
+ // One or multiple segments?
612
+ if (len <= _outputMaxContiguous) {
613
+ if ((_outputTail + len) > _outputEnd) { // caller must ensure enough space
614
+ _flushBuffer();
615
+ }
616
+ _writeStringSegment(text, offset, len);
617
+ } else {
618
+ _writeStringSegments(text, offset, len);
619
+ }
620
+ // And finally, closing quotes
621
+ if (_outputTail >= _outputEnd) {
622
+ _flushBuffer();
623
+ }
624
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
625
+ }
626
+
627
+ @Override
628
+ public final void writeString(SerializableString text)
629
+ throws IOException, JsonGenerationException
630
+ {
631
+ _verifyValueWrite("write text value");
632
+ if (_outputTail >= _outputEnd) {
633
+ _flushBuffer();
634
+ }
635
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
636
+ _writeBytes(text.asQuotedUTF8());
637
+ if (_outputTail >= _outputEnd) {
638
+ _flushBuffer();
639
+ }
640
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
641
+ }
642
+
643
+ @Override
644
+ public void writeRawUTF8String(byte[] text, int offset, int length)
645
+ throws IOException, JsonGenerationException
646
+ {
647
+ _verifyValueWrite("write text value");
648
+ if (_outputTail >= _outputEnd) {
649
+ _flushBuffer();
650
+ }
651
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
652
+ _writeBytes(text, offset, length);
653
+ if (_outputTail >= _outputEnd) {
654
+ _flushBuffer();
655
+ }
656
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
657
+ }
658
+
659
+ @Override
660
+ public void writeUTF8String(byte[] text, int offset, int len)
661
+ throws IOException, JsonGenerationException
662
+ {
663
+ _verifyValueWrite("write text value");
664
+ if (_outputTail >= _outputEnd) {
665
+ _flushBuffer();
666
+ }
667
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
668
+ // One or multiple segments?
669
+ if (len <= _outputMaxContiguous) {
670
+ _writeUTF8Segment(text, offset, len);
671
+ } else {
672
+ _writeUTF8Segments(text, offset, len);
673
+ }
674
+ if (_outputTail >= _outputEnd) {
675
+ _flushBuffer();
676
+ }
677
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
678
+ }
679
+
680
+ /*
681
+ /**********************************************************
682
+ /* Output method implementations, unprocessed ("raw")
683
+ /**********************************************************
684
+ */
685
+
686
+ @Override
687
+ public void writeRaw(String text)
688
+ throws IOException, JsonGenerationException
689
+ {
690
+ int start = 0;
691
+ int len = text.length();
692
+ while (len > 0) {
693
+ char[] buf = _charBuffer;
694
+ final int blen = buf.length;
695
+ final int len2 = (len < blen) ? len : blen;
696
+ text.getChars(start, start+len2, buf, 0);
697
+ writeRaw(buf, 0, len2);
698
+ start += len2;
699
+ len -= len2;
700
+ }
701
+ }
702
+
703
+ @Override
704
+ public void writeRaw(String text, int offset, int len)
705
+ throws IOException, JsonGenerationException
706
+ {
707
+ while (len > 0) {
708
+ char[] buf = _charBuffer;
709
+ final int blen = buf.length;
710
+ final int len2 = (len < blen) ? len : blen;
711
+ text.getChars(offset, offset+len2, buf, 0);
712
+ writeRaw(buf, 0, len2);
713
+ offset += len2;
714
+ len -= len2;
715
+ }
716
+ }
717
+
718
+ // @TODO: rewrite for speed...
719
+ @Override
720
+ public final void writeRaw(char[] cbuf, int offset, int len)
721
+ throws IOException, JsonGenerationException
722
+ {
723
+ // First: if we have 3 x charCount spaces, we know it'll fit just fine
724
+ {
725
+ int len3 = len+len+len;
726
+ if ((_outputTail + len3) > _outputEnd) {
727
+ // maybe we could flush?
728
+ if (_outputEnd < len3) { // wouldn't be enough...
729
+ _writeSegmentedRaw(cbuf, offset, len);
730
+ return;
731
+ }
732
+ // yes, flushing brings enough space
733
+ _flushBuffer();
734
+ }
735
+ }
736
+ len += offset; // now marks the end
737
+
738
+ // Note: here we know there is enough room, hence no output boundary checks
739
+ main_loop:
740
+ while (offset < len) {
741
+ inner_loop:
742
+ while (true) {
743
+ int ch = (int) cbuf[offset];
744
+ if (ch > 0x7F) {
745
+ break inner_loop;
746
+ }
747
+ _outputBuffer[_outputTail++] = (byte) ch;
748
+ if (++offset >= len) {
749
+ break main_loop;
750
+ }
751
+ }
752
+ char ch = cbuf[offset++];
753
+ if (ch < 0x800) { // 2-byte?
754
+ _outputBuffer[_outputTail++] = (byte) (0xc0 | (ch >> 6));
755
+ _outputBuffer[_outputTail++] = (byte) (0x80 | (ch & 0x3f));
756
+ } else {
757
+ _outputRawMultiByteChar(ch, cbuf, offset, len);
758
+ }
759
+ }
760
+ }
761
+
762
+ @Override
763
+ public void writeRaw(char ch)
764
+ throws IOException, JsonGenerationException
765
+ {
766
+ if ((_outputTail + 3) >= _outputEnd) {
767
+ _flushBuffer();
768
+ }
769
+ final byte[] bbuf = _outputBuffer;
770
+ if (ch <= 0x7F) {
771
+ bbuf[_outputTail++] = (byte) ch;
772
+ } else if (ch < 0x800) { // 2-byte?
773
+ bbuf[_outputTail++] = (byte) (0xc0 | (ch >> 6));
774
+ bbuf[_outputTail++] = (byte) (0x80 | (ch & 0x3f));
775
+ } else {
776
+ _outputRawMultiByteChar(ch, null, 0, 0);
777
+ }
778
+ }
779
+
780
+ /**
781
+ * Helper method called when it is possible that output of raw section
782
+ * to output may cross buffer boundary
783
+ */
784
+ private final void _writeSegmentedRaw(char[] cbuf, int offset, int len)
785
+ throws IOException, JsonGenerationException
786
+ {
787
+ final int end = _outputEnd;
788
+ final byte[] bbuf = _outputBuffer;
789
+
790
+ main_loop:
791
+ while (offset < len) {
792
+ inner_loop:
793
+ while (true) {
794
+ int ch = (int) cbuf[offset];
795
+ if (ch >= 0x80) {
796
+ break inner_loop;
797
+ }
798
+ // !!! TODO: fast(er) writes (roll input, output checks in one)
799
+ if (_outputTail >= end) {
800
+ _flushBuffer();
801
+ }
802
+ bbuf[_outputTail++] = (byte) ch;
803
+ if (++offset >= len) {
804
+ break main_loop;
805
+ }
806
+ }
807
+ if ((_outputTail + 3) >= _outputEnd) {
808
+ _flushBuffer();
809
+ }
810
+ char ch = cbuf[offset++];
811
+ if (ch < 0x800) { // 2-byte?
812
+ bbuf[_outputTail++] = (byte) (0xc0 | (ch >> 6));
813
+ bbuf[_outputTail++] = (byte) (0x80 | (ch & 0x3f));
814
+ } else {
815
+ _outputRawMultiByteChar(ch, cbuf, offset, len);
816
+ }
817
+ }
818
+ }
819
+
820
+ /*
821
+ /**********************************************************
822
+ /* Output method implementations, base64-encoded binary
823
+ /**********************************************************
824
+ */
825
+
826
+ @Override
827
+ public void writeBinary(Base64Variant b64variant, byte[] data, int offset, int len)
828
+ throws IOException, JsonGenerationException
829
+ {
830
+ _verifyValueWrite("write binary value");
831
+ // Starting quotes
832
+ if (_outputTail >= _outputEnd) {
833
+ _flushBuffer();
834
+ }
835
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
836
+ _writeBinary(b64variant, data, offset, offset+len);
837
+ // and closing quotes
838
+ if (_outputTail >= _outputEnd) {
839
+ _flushBuffer();
840
+ }
841
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
842
+ }
843
+
844
+ /*
845
+ /**********************************************************
846
+ /* Output method implementations, primitive
847
+ /**********************************************************
848
+ */
849
+
850
+ @Override
851
+ public void writeNumber(int i)
852
+ throws IOException, JsonGenerationException
853
+ {
854
+ _verifyValueWrite("write number");
855
+ // up to 10 digits and possible minus sign
856
+ if ((_outputTail + 11) >= _outputEnd) {
857
+ _flushBuffer();
858
+ }
859
+ if (_cfgNumbersAsStrings) {
860
+ _writeQuotedInt(i);
861
+ return;
862
+ }
863
+ _outputTail = NumberOutput.outputInt(i, _outputBuffer, _outputTail);
864
+ }
865
+
866
+ private final void _writeQuotedInt(int i) throws IOException {
867
+ if ((_outputTail + 13) >= _outputEnd) {
868
+ _flushBuffer();
869
+ }
870
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
871
+ _outputTail = NumberOutput.outputInt(i, _outputBuffer, _outputTail);
872
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
873
+ }
874
+
875
+ @Override
876
+ public void writeNumber(long l)
877
+ throws IOException, JsonGenerationException
878
+ {
879
+ _verifyValueWrite("write number");
880
+ if (_cfgNumbersAsStrings) {
881
+ _writeQuotedLong(l);
882
+ return;
883
+ }
884
+ if ((_outputTail + 21) >= _outputEnd) {
885
+ // up to 20 digits, minus sign
886
+ _flushBuffer();
887
+ }
888
+ _outputTail = NumberOutput.outputLong(l, _outputBuffer, _outputTail);
889
+ }
890
+
891
+ private final void _writeQuotedLong(long l) throws IOException {
892
+ if ((_outputTail + 23) >= _outputEnd) {
893
+ _flushBuffer();
894
+ }
895
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
896
+ _outputTail = NumberOutput.outputLong(l, _outputBuffer, _outputTail);
897
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
898
+ }
899
+
900
+ @Override
901
+ public void writeNumber(BigInteger value)
902
+ throws IOException, JsonGenerationException
903
+ {
904
+ _verifyValueWrite("write number");
905
+ if (value == null) {
906
+ _writeNull();
907
+ } else if (_cfgNumbersAsStrings) {
908
+ _writeQuotedRaw(value);
909
+ } else {
910
+ writeRaw(value.toString());
911
+ }
912
+ }
913
+
914
+
915
+ @Override
916
+ public void writeNumber(double d)
917
+ throws IOException, JsonGenerationException
918
+ {
919
+ if (_cfgNumbersAsStrings ||
920
+ // [JACKSON-139]
921
+ (((Double.isNaN(d) || Double.isInfinite(d))
922
+ && isEnabled(Feature.QUOTE_NON_NUMERIC_NUMBERS)))) {
923
+ writeString(String.valueOf(d));
924
+ return;
925
+ }
926
+ // What is the max length for doubles? 40 chars?
927
+ _verifyValueWrite("write number");
928
+ writeRaw(String.valueOf(d));
929
+ }
930
+
931
+ @Override
932
+ public void writeNumber(float f)
933
+ throws IOException, JsonGenerationException
934
+ {
935
+ if (_cfgNumbersAsStrings ||
936
+ // [JACKSON-139]
937
+ (((Float.isNaN(f) || Float.isInfinite(f))
938
+ && isEnabled(Feature.QUOTE_NON_NUMERIC_NUMBERS)))) {
939
+ writeString(String.valueOf(f));
940
+ return;
941
+ }
942
+ // What is the max length for floats?
943
+ _verifyValueWrite("write number");
944
+ writeRaw(String.valueOf(f));
945
+ }
946
+
947
+ @Override
948
+ public void writeNumber(BigDecimal value)
949
+ throws IOException, JsonGenerationException
950
+ {
951
+ // Don't really know max length for big decimal, no point checking
952
+ _verifyValueWrite("write number");
953
+ if (value == null) {
954
+ _writeNull();
955
+ } else if (_cfgNumbersAsStrings) {
956
+ _writeQuotedRaw(value);
957
+ } else {
958
+ writeRaw(value.toString());
959
+ }
960
+ }
961
+
962
+ @Override
963
+ public void writeNumber(String encodedValue)
964
+ throws IOException, JsonGenerationException
965
+ {
966
+ _verifyValueWrite("write number");
967
+ if (_cfgNumbersAsStrings) {
968
+ _writeQuotedRaw(encodedValue);
969
+ } else {
970
+ writeRaw(encodedValue);
971
+ }
972
+ }
973
+
974
+ private final void _writeQuotedRaw(Object value) throws IOException
975
+ {
976
+ if (_outputTail >= _outputEnd) {
977
+ _flushBuffer();
978
+ }
979
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
980
+ writeRaw(value.toString());
981
+ if (_outputTail >= _outputEnd) {
982
+ _flushBuffer();
983
+ }
984
+ _outputBuffer[_outputTail++] = BYTE_QUOTE;
985
+ }
986
+
987
+ @Override
988
+ public void writeBoolean(boolean state)
989
+ throws IOException, JsonGenerationException
990
+ {
991
+ _verifyValueWrite("write boolean value");
992
+ if ((_outputTail + 5) >= _outputEnd) {
993
+ _flushBuffer();
994
+ }
995
+ byte[] keyword = state ? TRUE_BYTES : FALSE_BYTES;
996
+ int len = keyword.length;
997
+ System.arraycopy(keyword, 0, _outputBuffer, _outputTail, len);
998
+ _outputTail += len;
999
+ }
1000
+
1001
+ @Override
1002
+ public void writeNull()
1003
+ throws IOException, JsonGenerationException
1004
+ {
1005
+ _verifyValueWrite("write null value");
1006
+ _writeNull();
1007
+ }
1008
+
1009
+ /*
1010
+ /**********************************************************
1011
+ /* Implementations for other methods
1012
+ /**********************************************************
1013
+ */
1014
+
1015
+ @Override
1016
+ protected final void _verifyValueWrite(String typeMsg)
1017
+ throws IOException, JsonGenerationException
1018
+ {
1019
+ int status = _writeContext.writeValue();
1020
+ if (status == JsonWriteContext.STATUS_EXPECT_NAME) {
1021
+ _reportError("Can not "+typeMsg+", expecting field name");
1022
+ }
1023
+ if (_cfgPrettyPrinter == null) {
1024
+ byte b;
1025
+ switch (status) {
1026
+ case JsonWriteContext.STATUS_OK_AFTER_COMMA:
1027
+ b = BYTE_COMMA;
1028
+ break;
1029
+ case JsonWriteContext.STATUS_OK_AFTER_COLON:
1030
+ b = BYTE_COLON;
1031
+ break;
1032
+ case JsonWriteContext.STATUS_OK_AFTER_SPACE:
1033
+ b = BYTE_SPACE;
1034
+ break;
1035
+ case JsonWriteContext.STATUS_OK_AS_IS:
1036
+ default:
1037
+ return;
1038
+ }
1039
+ if (_outputTail >= _outputEnd) {
1040
+ _flushBuffer();
1041
+ }
1042
+ _outputBuffer[_outputTail] = b;
1043
+ ++_outputTail;
1044
+ return;
1045
+ }
1046
+ // Otherwise, pretty printer knows what to do...
1047
+ _verifyPrettyValueWrite(typeMsg, status);
1048
+ }
1049
+
1050
+ protected final void _verifyPrettyValueWrite(String typeMsg, int status)
1051
+ throws IOException, JsonGenerationException
1052
+ {
1053
+ // If we have a pretty printer, it knows what to do:
1054
+ switch (status) {
1055
+ case JsonWriteContext.STATUS_OK_AFTER_COMMA: // array
1056
+ _cfgPrettyPrinter.writeArrayValueSeparator(this);
1057
+ break;
1058
+ case JsonWriteContext.STATUS_OK_AFTER_COLON:
1059
+ _cfgPrettyPrinter.writeObjectFieldValueSeparator(this);
1060
+ break;
1061
+ case JsonWriteContext.STATUS_OK_AFTER_SPACE:
1062
+ _cfgPrettyPrinter.writeRootValueSeparator(this);
1063
+ break;
1064
+ case JsonWriteContext.STATUS_OK_AS_IS:
1065
+ // First entry, but of which context?
1066
+ if (_writeContext.inArray()) {
1067
+ _cfgPrettyPrinter.beforeArrayValues(this);
1068
+ } else if (_writeContext.inObject()) {
1069
+ _cfgPrettyPrinter.beforeObjectEntries(this);
1070
+ }
1071
+ break;
1072
+ default:
1073
+ _cantHappen();
1074
+ break;
1075
+ }
1076
+ }
1077
+
1078
+ /*
1079
+ /**********************************************************
1080
+ /* Low-level output handling
1081
+ /**********************************************************
1082
+ */
1083
+
1084
+ @Override
1085
+ public final void flush()
1086
+ throws IOException
1087
+ {
1088
+ _flushBuffer();
1089
+ if (_outputStream != null) {
1090
+ if (isEnabled(Feature.FLUSH_PASSED_TO_STREAM)) {
1091
+ _outputStream.flush();
1092
+ }
1093
+ }
1094
+ }
1095
+
1096
+ @Override
1097
+ public void close()
1098
+ throws IOException
1099
+ {
1100
+ super.close();
1101
+
1102
+ /* 05-Dec-2008, tatu: To add [JACKSON-27], need to close open
1103
+ * scopes.
1104
+ */
1105
+ // First: let's see that we still have buffers...
1106
+ if (_outputBuffer != null
1107
+ && isEnabled(Feature.AUTO_CLOSE_JSON_CONTENT)) {
1108
+ while (true) {
1109
+ JsonStreamContext ctxt = getOutputContext();
1110
+ if (ctxt.inArray()) {
1111
+ writeEndArray();
1112
+ } else if (ctxt.inObject()) {
1113
+ writeEndObject();
1114
+ } else {
1115
+ break;
1116
+ }
1117
+ }
1118
+ }
1119
+ _flushBuffer();
1120
+
1121
+ /* 25-Nov-2008, tatus: As per [JACKSON-16] we are not to call close()
1122
+ * on the underlying Reader, unless we "own" it, or auto-closing
1123
+ * feature is enabled.
1124
+ * One downside: when using UTF8Writer, underlying buffer(s)
1125
+ * may not be properly recycled if we don't close the writer.
1126
+ */
1127
+ if (_outputStream != null) {
1128
+ if (_ioContext.isResourceManaged() || isEnabled(Feature.AUTO_CLOSE_TARGET)) {
1129
+ _outputStream.close();
1130
+ } else if (isEnabled(Feature.FLUSH_PASSED_TO_STREAM)) {
1131
+ // If we can't close it, we should at least flush
1132
+ _outputStream.flush();
1133
+ }
1134
+ }
1135
+ // Internal buffer(s) generator has can now be released as well
1136
+ _releaseBuffers();
1137
+ }
1138
+
1139
+ @Override
1140
+ protected void _releaseBuffers()
1141
+ {
1142
+ byte[] buf = _outputBuffer;
1143
+ if (buf != null && _bufferRecyclable) {
1144
+ _outputBuffer = null;
1145
+ _ioContext.releaseWriteEncodingBuffer(buf);
1146
+ }
1147
+ char[] cbuf = _charBuffer;
1148
+ if (cbuf != null) {
1149
+ _charBuffer = null;
1150
+ _ioContext.releaseConcatBuffer(cbuf);
1151
+ }
1152
+ }
1153
+
1154
+ /*
1155
+ /**********************************************************
1156
+ /* Internal methods, low-level writing, raw bytes
1157
+ /**********************************************************
1158
+ */
1159
+
1160
+ private final void _writeBytes(byte[] bytes) throws IOException
1161
+ {
1162
+ final int len = bytes.length;
1163
+ if ((_outputTail + len) > _outputEnd) {
1164
+ _flushBuffer();
1165
+ // still not enough?
1166
+ if (len > MAX_BYTES_TO_BUFFER) {
1167
+ _outputStream.write(bytes, 0, len);
1168
+ return;
1169
+ }
1170
+ }
1171
+ System.arraycopy(bytes, 0, _outputBuffer, _outputTail, len);
1172
+ _outputTail += len;
1173
+ }
1174
+
1175
+ private final void _writeBytes(byte[] bytes, int offset, int len) throws IOException
1176
+ {
1177
+ if ((_outputTail + len) > _outputEnd) {
1178
+ _flushBuffer();
1179
+ // still not enough?
1180
+ if (len > MAX_BYTES_TO_BUFFER) {
1181
+ _outputStream.write(bytes, offset, len);
1182
+ return;
1183
+ }
1184
+ }
1185
+ System.arraycopy(bytes, offset, _outputBuffer, _outputTail, len);
1186
+ _outputTail += len;
1187
+ }
1188
+
1189
+ /*
1190
+ /**********************************************************
1191
+ /* Internal methods, mid-level writing, String segments
1192
+ /**********************************************************
1193
+ */
1194
+
1195
+ /**
1196
+ * Method called when String to write is long enough not to fit
1197
+ * completely in temporary copy buffer. If so, we will actually
1198
+ * copy it in small enough chunks so it can be directly fed
1199
+ * to single-segment writes (instead of maximum slices that
1200
+ * would fit in copy buffer)
1201
+ */
1202
+ private final void _writeStringSegments(String text)
1203
+ throws IOException, JsonGenerationException
1204
+ {
1205
+ int left = text.length();
1206
+ int offset = 0;
1207
+ final char[] cbuf = _charBuffer;
1208
+
1209
+ while (left > 0) {
1210
+ int len = Math.min(_outputMaxContiguous, left);
1211
+ text.getChars(offset, offset+len, cbuf, 0);
1212
+ if ((_outputTail + len) > _outputEnd) { // caller must ensure enough space
1213
+ _flushBuffer();
1214
+ }
1215
+ _writeStringSegment(cbuf, 0, len);
1216
+ offset += len;
1217
+ left -= len;
1218
+ }
1219
+ }
1220
+
1221
+ /**
1222
+ * Method called when character sequence to write is long enough that
1223
+ * its maximum encoded and escaped form is not guaranteed to fit in
1224
+ * the output buffer. If so, we will need to choose smaller output
1225
+ * chunks to write at a time.
1226
+ */
1227
+ private final void _writeStringSegments(char[] cbuf, int offset, int totalLen)
1228
+ throws IOException, JsonGenerationException
1229
+ {
1230
+ do {
1231
+ int len = Math.min(_outputMaxContiguous, totalLen);
1232
+ if ((_outputTail + len) > _outputEnd) { // caller must ensure enough space
1233
+ _flushBuffer();
1234
+ }
1235
+ _writeStringSegment(cbuf, offset, len);
1236
+ offset += len;
1237
+ totalLen -= len;
1238
+ } while (totalLen > 0);
1239
+ }
1240
+
1241
+ /*
1242
+ /**********************************************************
1243
+ /* Internal methods, low-level writing, text segments
1244
+ /**********************************************************
1245
+ */
1246
+
1247
+ /**
1248
+ * This method called when the string content is already in
1249
+ * a char buffer, and its maximum total encoded and escaped length
1250
+ * can not exceed size of the output buffer.
1251
+ * Caller must ensure that there is enough space in output buffer,
1252
+ * assuming case of all non-escaped ASCII characters, as well as
1253
+ * potentially enough space for other cases (but not necessarily flushed)
1254
+ */
1255
+ private final void _writeStringSegment(char[] cbuf, int offset, int len)
1256
+ throws IOException, JsonGenerationException
1257
+ {
1258
+ // note: caller MUST ensure (via flushing) there's room for ASCII only
1259
+
1260
+ // Fast+tight loop for ASCII-only, no-escaping-needed output
1261
+ len += offset; // becomes end marker, then
1262
+
1263
+ int outputPtr = _outputTail;
1264
+ final byte[] outputBuffer = _outputBuffer;
1265
+ final int[] escCodes = _outputEscapes;
1266
+
1267
+ while (offset < len) {
1268
+ int ch = cbuf[offset];
1269
+ // note: here we know that (ch > 0x7F) will cover case of escaping non-ASCII too:
1270
+ if (ch > 0x7F || escCodes[ch] != 0) {
1271
+ break;
1272
+ }
1273
+ outputBuffer[outputPtr++] = (byte) ch;
1274
+ ++offset;
1275
+ }
1276
+ _outputTail = outputPtr;
1277
+ if (offset < len) {
1278
+ // [JACKSON-106]
1279
+ if (_characterEscapes != null) {
1280
+ _writeCustomStringSegment2(cbuf, offset, len);
1281
+ // [JACKSON-102]
1282
+ } else if (_maximumNonEscapedChar == 0) {
1283
+ _writeStringSegment2(cbuf, offset, len);
1284
+ } else {
1285
+ _writeStringSegmentASCII2(cbuf, offset, len);
1286
+ }
1287
+
1288
+ }
1289
+ }
1290
+
1291
+ /**
1292
+ * Secondary method called when content contains characters to escape,
1293
+ * and/or multi-byte UTF-8 characters.
1294
+ */
1295
+ private final void _writeStringSegment2(final char[] cbuf, int offset, final int end)
1296
+ throws IOException, JsonGenerationException
1297
+ {
1298
+ // Ok: caller guarantees buffer can have room; but that may require flushing:
1299
+ if ((_outputTail + 6 * (end - offset)) > _outputEnd) {
1300
+ _flushBuffer();
1301
+ }
1302
+
1303
+ int outputPtr = _outputTail;
1304
+
1305
+ final byte[] outputBuffer = _outputBuffer;
1306
+ final int[] escCodes = _outputEscapes;
1307
+
1308
+ while (offset < end) {
1309
+ int ch = cbuf[offset++];
1310
+ if (ch <= 0x7F) {
1311
+ if (escCodes[ch] == 0) {
1312
+ outputBuffer[outputPtr++] = (byte) ch;
1313
+ continue;
1314
+ }
1315
+ int escape = escCodes[ch];
1316
+ if (escape > 0) { // 2-char escape, fine
1317
+ outputBuffer[outputPtr++] = BYTE_BACKSLASH;
1318
+ outputBuffer[outputPtr++] = (byte) escape;
1319
+ } else {
1320
+ // ctrl-char, 6-byte escape...
1321
+ outputPtr = _writeGenericEscape(ch, outputPtr);
1322
+ }
1323
+ continue;
1324
+ }
1325
+ if (ch <= 0x7FF) { // fine, just needs 2 byte output
1326
+ outputBuffer[outputPtr++] = (byte) (0xc0 | (ch >> 6));
1327
+ outputBuffer[outputPtr++] = (byte) (0x80 | (ch & 0x3f));
1328
+ } else {
1329
+ outputPtr = _outputMultiByteChar(ch, outputPtr);
1330
+ }
1331
+ }
1332
+ _outputTail = outputPtr;
1333
+ }
1334
+
1335
+ /*
1336
+ /**********************************************************
1337
+ /* Internal methods, low-level writing, text segment
1338
+ /* with additional escaping (ASCII or such)
1339
+ /* (since 1.8; see [JACKSON-102])
1340
+ /**********************************************************
1341
+ */
1342
+
1343
+ /**
1344
+ * Same as <code>_writeStringSegment2(char[], ...)</code., but with
1345
+ * additional escaping for high-range code points
1346
+ *
1347
+ * @since 1.8
1348
+ */
1349
+ private final void _writeStringSegmentASCII2(final char[] cbuf, int offset, final int end)
1350
+ throws IOException, JsonGenerationException
1351
+ {
1352
+ // Ok: caller guarantees buffer can have room; but that may require flushing:
1353
+ if ((_outputTail + 6 * (end - offset)) > _outputEnd) {
1354
+ _flushBuffer();
1355
+ }
1356
+
1357
+ int outputPtr = _outputTail;
1358
+
1359
+ final byte[] outputBuffer = _outputBuffer;
1360
+ final int[] escCodes = _outputEscapes;
1361
+ final int maxUnescaped = _maximumNonEscapedChar;
1362
+
1363
+ while (offset < end) {
1364
+ int ch = cbuf[offset++];
1365
+ if (ch <= 0x7F) {
1366
+ if (escCodes[ch] == 0) {
1367
+ outputBuffer[outputPtr++] = (byte) ch;
1368
+ continue;
1369
+ }
1370
+ int escape = escCodes[ch];
1371
+ if (escape > 0) { // 2-char escape, fine
1372
+ outputBuffer[outputPtr++] = BYTE_BACKSLASH;
1373
+ outputBuffer[outputPtr++] = (byte) escape;
1374
+ } else {
1375
+ // ctrl-char, 6-byte escape...
1376
+ outputPtr = _writeGenericEscape(ch, outputPtr);
1377
+ }
1378
+ continue;
1379
+ }
1380
+ if (ch > maxUnescaped) { // [JACKSON-102] Allow forced escaping if non-ASCII (etc) chars:
1381
+ outputPtr = _writeGenericEscape(ch, outputPtr);
1382
+ continue;
1383
+ }
1384
+ if (ch <= 0x7FF) { // fine, just needs 2 byte output
1385
+ outputBuffer[outputPtr++] = (byte) (0xc0 | (ch >> 6));
1386
+ outputBuffer[outputPtr++] = (byte) (0x80 | (ch & 0x3f));
1387
+ } else {
1388
+ outputPtr = _outputMultiByteChar(ch, outputPtr);
1389
+ }
1390
+ }
1391
+ _outputTail = outputPtr;
1392
+ }
1393
+
1394
+ /*
1395
+ /**********************************************************
1396
+ /* Internal methods, low-level writing, text segment
1397
+ /* with fully custom escaping (and possibly escaping of non-ASCII
1398
+ /**********************************************************
1399
+ */
1400
+
1401
+ /**
1402
+ * Same as <code>_writeStringSegmentASCII2(char[], ...)</code., but with
1403
+ * additional checking for completely custom escapes
1404
+ *
1405
+ * @since 1.8
1406
+ */
1407
+ private final void _writeCustomStringSegment2(final char[] cbuf, int offset, final int end)
1408
+ throws IOException, JsonGenerationException
1409
+ {
1410
+ // Ok: caller guarantees buffer can have room; but that may require flushing:
1411
+ if ((_outputTail + 6 * (end - offset)) > _outputEnd) {
1412
+ _flushBuffer();
1413
+ }
1414
+ int outputPtr = _outputTail;
1415
+
1416
+ final byte[] outputBuffer = _outputBuffer;
1417
+ final int[] escCodes = _outputEscapes;
1418
+ // may or may not have this limit
1419
+ final int maxUnescaped = (_maximumNonEscapedChar <= 0) ? 0xFFFF : _maximumNonEscapedChar;
1420
+ final CharacterEscapes customEscapes = _characterEscapes; // non-null
1421
+
1422
+ while (offset < end) {
1423
+ int ch = cbuf[offset++];
1424
+ if (ch <= 0x7F) {
1425
+ if (escCodes[ch] == 0) {
1426
+ outputBuffer[outputPtr++] = (byte) ch;
1427
+ continue;
1428
+ }
1429
+ int escape = escCodes[ch];
1430
+ if (escape > 0) { // 2-char escape, fine
1431
+ outputBuffer[outputPtr++] = BYTE_BACKSLASH;
1432
+ outputBuffer[outputPtr++] = (byte) escape;
1433
+ } else if (escape == CharacterEscapes.ESCAPE_CUSTOM) {
1434
+ SerializableString esc = customEscapes.getEscapeSequence(ch);
1435
+ if (esc == null) {
1436
+ throw new JsonGenerationException("Invalid custom escape definitions; custom escape not found for character code 0x"
1437
+ +Integer.toHexString(ch)+", although was supposed to have one");
1438
+ }
1439
+ outputPtr = _writeCustomEscape(outputBuffer, outputPtr, esc, end-offset);
1440
+ } else {
1441
+ // ctrl-char, 6-byte escape...
1442
+ outputPtr = _writeGenericEscape(ch, outputPtr);
1443
+ }
1444
+ continue;
1445
+ }
1446
+ if (ch > maxUnescaped) { // [JACKSON-102] Allow forced escaping if non-ASCII (etc) chars:
1447
+ outputPtr = _writeGenericEscape(ch, outputPtr);
1448
+ continue;
1449
+ }
1450
+ SerializableString esc = customEscapes.getEscapeSequence(ch);
1451
+ if (esc != null) {
1452
+ outputPtr = _writeCustomEscape(outputBuffer, outputPtr, esc, end-offset);
1453
+ continue;
1454
+ }
1455
+ if (ch <= 0x7FF) { // fine, just needs 2 byte output
1456
+ outputBuffer[outputPtr++] = (byte) (0xc0 | (ch >> 6));
1457
+ outputBuffer[outputPtr++] = (byte) (0x80 | (ch & 0x3f));
1458
+ } else {
1459
+ outputPtr = _outputMultiByteChar(ch, outputPtr);
1460
+ }
1461
+ }
1462
+ _outputTail = outputPtr;
1463
+ }
1464
+
1465
+ private int _writeCustomEscape(byte[] outputBuffer, int outputPtr, SerializableString esc, int remainingChars)
1466
+ throws IOException, JsonGenerationException
1467
+ {
1468
+ byte[] raw = esc.asUnquotedUTF8(); // must be escaped at this point, shouldn't double-quote
1469
+ int len = raw.length;
1470
+ if (len > 6) { // may violate constraints we have, do offline
1471
+ return _handleLongCustomEscape(outputBuffer, outputPtr, _outputEnd, raw, remainingChars);
1472
+ }
1473
+ // otherwise will fit without issues, so:
1474
+ System.arraycopy(raw, 0, outputBuffer, outputPtr, len);
1475
+ return (outputPtr + len);
1476
+ }
1477
+
1478
+ private int _handleLongCustomEscape(byte[] outputBuffer, int outputPtr, int outputEnd, byte[] raw,
1479
+ int remainingChars)
1480
+ throws IOException, JsonGenerationException
1481
+ {
1482
+ int len = raw.length;
1483
+ if ((outputPtr + len) > outputEnd) {
1484
+ _outputTail = outputPtr;
1485
+ _flushBuffer();
1486
+ outputPtr = _outputTail;
1487
+ if (len > outputBuffer.length) { // very unlikely, but possible...
1488
+ _outputStream.write(raw, 0, len);
1489
+ return outputPtr;
1490
+ }
1491
+ System.arraycopy(raw, 0, outputBuffer, outputPtr, len);
1492
+ outputPtr += len;
1493
+ }
1494
+ // but is the invariant still obeyed? If not, flush once more
1495
+ if ((outputPtr + 6 * remainingChars) > outputEnd) {
1496
+ _flushBuffer();
1497
+ return _outputTail;
1498
+ }
1499
+ return outputPtr;
1500
+ }
1501
+
1502
+ /*
1503
+ /**********************************************************
1504
+ /* Internal methods, low-level writing, "raw UTF-8" segments
1505
+ /**********************************************************
1506
+ */
1507
+
1508
+ /**
1509
+ * Method called when UTF-8 encoded (but NOT yet escaped!) content is not guaranteed
1510
+ * to fit in the output buffer after escaping; as such, we just need to
1511
+ * chunk writes.
1512
+ */
1513
+ private final void _writeUTF8Segments(byte[] utf8, int offset, int totalLen)
1514
+ throws IOException, JsonGenerationException
1515
+ {
1516
+ do {
1517
+ int len = Math.min(_outputMaxContiguous, totalLen);
1518
+ _writeUTF8Segment(utf8, offset, len);
1519
+ offset += len;
1520
+ totalLen -= len;
1521
+ } while (totalLen > 0);
1522
+ }
1523
+
1524
+ private final void _writeUTF8Segment(byte[] utf8, final int offset, final int len)
1525
+ throws IOException, JsonGenerationException
1526
+ {
1527
+ // fast loop to see if escaping is needed; don't copy, just look
1528
+ final int[] escCodes = _outputEscapes;
1529
+
1530
+ for (int ptr = offset, end = offset + len; ptr < end; ) {
1531
+ // 28-Feb-2011, tatu: escape codes just cover 7-bit range, so:
1532
+ int ch = utf8[ptr++];
1533
+ if ((ch >= 0) && escCodes[ch] != 0) {
1534
+ _writeUTF8Segment2(utf8, offset, len);
1535
+ return;
1536
+ }
1537
+ }
1538
+
1539
+ // yes, fine, just copy the sucker
1540
+ if ((_outputTail + len) > _outputEnd) { // enough room or need to flush?
1541
+ _flushBuffer(); // but yes once we flush (caller guarantees length restriction)
1542
+ }
1543
+ System.arraycopy(utf8, offset, _outputBuffer, _outputTail, len);
1544
+ _outputTail += len;
1545
+ }
1546
+
1547
+ private final void _writeUTF8Segment2(final byte[] utf8, int offset, int len)
1548
+ throws IOException, JsonGenerationException
1549
+ {
1550
+ int outputPtr = _outputTail;
1551
+
1552
+ // Ok: caller guarantees buffer can have room; but that may require flushing:
1553
+ if ((outputPtr + (len * 6)) > _outputEnd) {
1554
+ _flushBuffer();
1555
+ outputPtr = _outputTail;
1556
+ }
1557
+
1558
+ final byte[] outputBuffer = _outputBuffer;
1559
+ final int[] escCodes = _outputEscapes;
1560
+ len += offset; // so 'len' becomes 'end'
1561
+
1562
+ while (offset < len) {
1563
+ byte b = utf8[offset++];
1564
+ int ch = b;
1565
+ if (ch < 0 || escCodes[ch] == 0) {
1566
+ outputBuffer[outputPtr++] = b;
1567
+ continue;
1568
+ }
1569
+ int escape = escCodes[ch];
1570
+ if (escape > 0) { // 2-char escape, fine
1571
+ outputBuffer[outputPtr++] = BYTE_BACKSLASH;
1572
+ outputBuffer[outputPtr++] = (byte) escape;
1573
+ } else {
1574
+ // ctrl-char, 6-byte escape...
1575
+ outputPtr = _writeGenericEscape(ch, outputPtr);
1576
+ }
1577
+ }
1578
+ _outputTail = outputPtr;
1579
+ }
1580
+
1581
+ /*
1582
+ /**********************************************************
1583
+ /* Internal methods, low-level writing, base64 encoded
1584
+ /**********************************************************
1585
+ */
1586
+
1587
+ protected void _writeBinary(Base64Variant b64variant, byte[] input, int inputPtr, final int inputEnd)
1588
+ throws IOException, JsonGenerationException
1589
+ {
1590
+ // Encoding is by chunks of 3 input, 4 output chars, so:
1591
+ int safeInputEnd = inputEnd - 3;
1592
+ // Let's also reserve room for possible (and quoted) lf char each round
1593
+ int safeOutputEnd = _outputEnd - 6;
1594
+ int chunksBeforeLF = b64variant.getMaxLineLength() >> 2;
1595
+
1596
+ // Ok, first we loop through all full triplets of data:
1597
+ while (inputPtr <= safeInputEnd) {
1598
+ if (_outputTail > safeOutputEnd) { // need to flush
1599
+ _flushBuffer();
1600
+ }
1601
+ // First, mash 3 bytes into lsb of 32-bit int
1602
+ int b24 = ((int) input[inputPtr++]) << 8;
1603
+ b24 |= ((int) input[inputPtr++]) & 0xFF;
1604
+ b24 = (b24 << 8) | (((int) input[inputPtr++]) & 0xFF);
1605
+ _outputTail = b64variant.encodeBase64Chunk(b24, _outputBuffer, _outputTail);
1606
+ if (--chunksBeforeLF <= 0) {
1607
+ // note: must quote in JSON value
1608
+ _outputBuffer[_outputTail++] = '\\';
1609
+ _outputBuffer[_outputTail++] = 'n';
1610
+ chunksBeforeLF = b64variant.getMaxLineLength() >> 2;
1611
+ }
1612
+ }
1613
+
1614
+ // And then we may have 1 or 2 leftover bytes to encode
1615
+ int inputLeft = inputEnd - inputPtr; // 0, 1 or 2
1616
+ if (inputLeft > 0) { // yes, but do we have room for output?
1617
+ if (_outputTail > safeOutputEnd) { // don't really need 6 bytes but...
1618
+ _flushBuffer();
1619
+ }
1620
+ int b24 = ((int) input[inputPtr++]) << 16;
1621
+ if (inputLeft == 2) {
1622
+ b24 |= (((int) input[inputPtr++]) & 0xFF) << 8;
1623
+ }
1624
+ _outputTail = b64variant.encodeBase64Partial(b24, inputLeft, _outputBuffer, _outputTail);
1625
+ }
1626
+ }
1627
+
1628
+ /*
1629
+ /**********************************************************
1630
+ /* Internal methods, character escapes/encoding
1631
+ /**********************************************************
1632
+ */
1633
+
1634
+ /**
1635
+ * Method called to output a character that is beyond range of
1636
+ * 1- and 2-byte UTF-8 encodings, when outputting "raw"
1637
+ * text (meaning it is not to be escaped or quoted)
1638
+ */
1639
+ private final int _outputRawMultiByteChar(int ch, char[] cbuf, int inputOffset, int inputLen)
1640
+ throws IOException
1641
+ {
1642
+ // Let's handle surrogates gracefully (as 4 byte output):
1643
+ if (ch >= SURR1_FIRST) {
1644
+ if (ch <= SURR2_LAST) { // yes, outside of BMP
1645
+ // Do we have second part?
1646
+ if (inputOffset >= inputLen) { // nope... have to note down
1647
+ _reportError("Split surrogate on writeRaw() input (last character)");
1648
+ }
1649
+ _outputSurrogates(ch, cbuf[inputOffset]);
1650
+ return (inputOffset+1);
1651
+ }
1652
+ }
1653
+ final byte[] bbuf = _outputBuffer;
1654
+ bbuf[_outputTail++] = (byte) (0xe0 | (ch >> 12));
1655
+ bbuf[_outputTail++] = (byte) (0x80 | ((ch >> 6) & 0x3f));
1656
+ bbuf[_outputTail++] = (byte) (0x80 | (ch & 0x3f));
1657
+ return inputOffset;
1658
+ }
1659
+
1660
+ protected final void _outputSurrogates(int surr1, int surr2)
1661
+ throws IOException
1662
+ {
1663
+ int c = _decodeSurrogate(surr1, surr2);
1664
+ if ((_outputTail + 4) > _outputEnd) {
1665
+ _flushBuffer();
1666
+ }
1667
+ final byte[] bbuf = _outputBuffer;
1668
+ bbuf[_outputTail++] = (byte) (0xf0 | (c >> 18));
1669
+ bbuf[_outputTail++] = (byte) (0x80 | ((c >> 12) & 0x3f));
1670
+ bbuf[_outputTail++] = (byte) (0x80 | ((c >> 6) & 0x3f));
1671
+ bbuf[_outputTail++] = (byte) (0x80 | (c & 0x3f));
1672
+ }
1673
+
1674
+ /**
1675
+ *
1676
+ * @param ch
1677
+ * @param outputPtr Position within output buffer to append multi-byte in
1678
+ *
1679
+ * @return New output position after appending
1680
+ *
1681
+ * @throws IOException
1682
+ */
1683
+ private final int _outputMultiByteChar(int ch, int outputPtr)
1684
+ throws IOException
1685
+ {
1686
+ byte[] bbuf = _outputBuffer;
1687
+ if (ch >= SURR1_FIRST && ch <= SURR2_LAST) { // yes, outside of BMP; add an escape
1688
+ bbuf[outputPtr++] = BYTE_BACKSLASH;
1689
+ bbuf[outputPtr++] = BYTE_u;
1690
+
1691
+ bbuf[outputPtr++] = HEX_CHARS[(ch >> 12) & 0xF];
1692
+ bbuf[outputPtr++] = HEX_CHARS[(ch >> 8) & 0xF];
1693
+ bbuf[outputPtr++] = HEX_CHARS[(ch >> 4) & 0xF];
1694
+ bbuf[outputPtr++] = HEX_CHARS[ch & 0xF];
1695
+ } else {
1696
+ bbuf[outputPtr++] = (byte) (0xe0 | (ch >> 12));
1697
+ bbuf[outputPtr++] = (byte) (0x80 | ((ch >> 6) & 0x3f));
1698
+ bbuf[outputPtr++] = (byte) (0x80 | (ch & 0x3f));
1699
+ }
1700
+ return outputPtr;
1701
+ }
1702
+
1703
+ protected final int _decodeSurrogate(int surr1, int surr2) throws IOException
1704
+ {
1705
+ // First is known to be valid, but how about the other?
1706
+ if (surr2 < SURR2_FIRST || surr2 > SURR2_LAST) {
1707
+ String msg = "Incomplete surrogate pair: first char 0x"+Integer.toHexString(surr1)+", second 0x"+Integer.toHexString(surr2);
1708
+ _reportError(msg);
1709
+ }
1710
+ int c = 0x10000 + ((surr1 - SURR1_FIRST) << 10) + (surr2 - SURR2_FIRST);
1711
+ return c;
1712
+ }
1713
+
1714
+ private final void _writeNull() throws IOException
1715
+ {
1716
+ if ((_outputTail + 4) >= _outputEnd) {
1717
+ _flushBuffer();
1718
+ }
1719
+ System.arraycopy(NULL_BYTES, 0, _outputBuffer, _outputTail, 4);
1720
+ _outputTail += 4;
1721
+ }
1722
+
1723
+ /**
1724
+ * Method called to write a generic Unicode escape for given character.
1725
+ *
1726
+ * @param charToEscape Character to escape using escape sequence (\\uXXXX)
1727
+ */
1728
+ private int _writeGenericEscape(int charToEscape, int outputPtr)
1729
+ throws IOException
1730
+ {
1731
+ final byte[] bbuf = _outputBuffer;
1732
+ bbuf[outputPtr++] = BYTE_BACKSLASH;
1733
+ bbuf[outputPtr++] = BYTE_u;
1734
+ if (charToEscape > 0xFF) {
1735
+ int hi = (charToEscape >> 8) & 0xFF;
1736
+ bbuf[outputPtr++] = HEX_CHARS[hi >> 4];
1737
+ bbuf[outputPtr++] = HEX_CHARS[hi & 0xF];
1738
+ charToEscape &= 0xFF;
1739
+ } else {
1740
+ bbuf[outputPtr++] = BYTE_0;
1741
+ bbuf[outputPtr++] = BYTE_0;
1742
+ }
1743
+ // We know it's a control char, so only the last 2 chars are non-0
1744
+ bbuf[outputPtr++] = HEX_CHARS[charToEscape >> 4];
1745
+ bbuf[outputPtr++] = HEX_CHARS[charToEscape & 0xF];
1746
+ return outputPtr;
1747
+ }
1748
+
1749
+ protected final void _flushBuffer() throws IOException
1750
+ {
1751
+ int len = _outputTail;
1752
+ if (len > 0) {
1753
+ _outputTail = 0;
1754
+ _outputStream.write(_outputBuffer, 0, len);
1755
+ }
1756
+ }
1757
+ }