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.
- data/.calabash_settings +1 -0
- data/CHANGES.txt +254 -0
- data/Gemfile +4 -0
- data/LICENSE +8 -0
- data/Rakefile +51 -0
- data/bin/calabash-android +101 -0
- data/bin/calabash-android-build.rb +43 -0
- data/bin/calabash-android-console.rb +29 -0
- data/bin/calabash-android-generate.rb +20 -0
- data/bin/calabash-android-helpers.rb +46 -0
- data/bin/calabash-android-run.rb +41 -0
- data/bin/calabash-android-setup.rb +29 -0
- data/calabash-android.gemspec +25 -0
- data/doc/calabash-android-help.txt +25 -0
- data/epl-v10.html +261 -0
- data/features-skeleton/my_first.feature +5 -0
- data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
- data/features-skeleton/support/app_installation_hooks.rb +36 -0
- data/features-skeleton/support/app_life_cycle_hooks.rb +14 -0
- data/features-skeleton/support/env.rb +1 -0
- data/features-skeleton/support/hooks.rb +0 -0
- data/irbrc +37 -0
- data/lib/calabash-android/calabash_steps.rb +19 -0
- data/lib/calabash-android/canned_steps.md +283 -0
- data/lib/calabash-android/color_helper.rb +13 -0
- data/lib/calabash-android/cucumber.rb +9 -0
- data/lib/calabash-android/helpers.rb +159 -0
- data/lib/calabash-android/lib/AXMLPrinter2.jar +0 -0
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/lib/manifest_extractor.jar +0 -0
- data/lib/calabash-android/lib/screenShotTaker.jar +0 -0
- data/lib/calabash-android/lib/unsign.jar +0 -0
- data/lib/calabash-android/management/adb.rb +0 -0
- data/lib/calabash-android/management/app_installation.rb +1 -0
- data/lib/calabash-android/operations.rb +611 -0
- data/lib/calabash-android/steps/additions_manual_steps.rb +11 -0
- data/lib/calabash-android/steps/app_steps.rb +10 -0
- data/lib/calabash-android/steps/assert_steps.rb +44 -0
- data/lib/calabash-android/steps/check_box_steps.rb +3 -0
- data/lib/calabash-android/steps/context_menu_steps.rb +12 -0
- data/lib/calabash-android/steps/date_picker_steps.rb +8 -0
- data/lib/calabash-android/steps/enter_text_steps.rb +27 -0
- data/lib/calabash-android/steps/l10n_steps.rb +19 -0
- data/lib/calabash-android/steps/list_steps.rb +40 -0
- data/lib/calabash-android/steps/location_steps.rb +19 -0
- data/lib/calabash-android/steps/map_steps.rb +61 -0
- data/lib/calabash-android/steps/navigation_steps.rb +46 -0
- data/lib/calabash-android/steps/press_button_steps.rb +35 -0
- data/lib/calabash-android/steps/progress_steps.rb +71 -0
- data/lib/calabash-android/steps/rotation_steps.rb +7 -0
- data/lib/calabash-android/steps/screenshot_steps.rb +11 -0
- data/lib/calabash-android/steps/search_steps.rb +7 -0
- data/lib/calabash-android/steps/spinner_steps.rb +3 -0
- data/lib/calabash-android/steps/time_picker_steps.rb +8 -0
- data/lib/calabash-android/version.rb +5 -0
- data/lib/calabash-android/wait_helpers.rb +93 -0
- data/lib/calabash-android.rb +2 -0
- data/test-server/AndroidManifest.xml +29 -0
- data/test-server/build.xml +144 -0
- data/test-server/calabash-js/src/calabash.js +125 -0
- data/test-server/calabash-js/src/set_text.js +133 -0
- data/test-server/instrumentation-backend/.classpath +10 -0
- data/test-server/instrumentation-backend/.gitignore +1 -0
- data/test-server/instrumentation-backend/.project +33 -0
- data/test-server/instrumentation-backend/.settings/org.eclipse.jdt.core.prefs +11 -0
- data/test-server/instrumentation-backend/AndroidManifest.xml +17 -0
- data/test-server/instrumentation-backend/antlr/UIQuery.g +113 -0
- data/test-server/instrumentation-backend/antlr/UIQuery.tokens +12 -0
- data/test-server/instrumentation-backend/antlr.sh +2 -0
- data/test-server/instrumentation-backend/assets/foo.bar +0 -0
- data/test-server/instrumentation-backend/build-libs/antlr-3.4-complete.jar +0 -0
- data/test-server/instrumentation-backend/build-libs/junit.jar +0 -0
- data/test-server/instrumentation-backend/build.xml +56 -0
- data/test-server/instrumentation-backend/libs/robotium-solo-3.6.jar +0 -0
- data/test-server/instrumentation-backend/project.properties +11 -0
- data/test-server/instrumentation-backend/res/drawable-hdpi/ic_launcher.png +0 -0
- data/test-server/instrumentation-backend/res/drawable-ldpi/ic_launcher.png +0 -0
- data/test-server/instrumentation-backend/res/drawable-mdpi/ic_launcher.png +0 -0
- data/test-server/instrumentation-backend/res/layout/main.xml +12 -0
- data/test-server/instrumentation-backend/res/values/strings.xml +7 -0
- data/test-server/instrumentation-backend/src/com/jayway/android/robotium/solo/MapViewUtils.java +328 -0
- data/test-server/instrumentation-backend/src/com/jayway/android/robotium/solo/PublicViewFetcher.java +11 -0
- data/test-server/instrumentation-backend/src/com/jayway/android/robotium/solo/SoloEnhanced.java +97 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRFileStream.java +78 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRInputStream.java +70 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRReaderStream.java +95 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/ANTLRStringStream.java +230 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/BaseRecognizer.java +894 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/BitSet.java +325 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/BufferedTokenStream.java +272 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/CharStream.java +57 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/CharStreamState.java +45 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/ClassicToken.java +141 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/CommonToken.java +191 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/CommonTokenStream.java +153 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/DFA.java +250 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/EarlyExitException.java +41 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/FailedPredicateException.java +54 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/IntStream.java +122 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/LegacyCommonTokenStream.java +394 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/Lexer.java +340 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedNotSetException.java +41 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedRangeException.java +45 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedSetException.java +44 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedTokenException.java +45 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/MismatchedTreeNodeException.java +49 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/MissingTokenException.java +56 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/NoViableAltException.java +57 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/Parser.java +98 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/ParserRuleReturnScope.java +52 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/RecognitionException.java +180 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/RecognizerSharedState.java +144 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/RuleReturnScope.java +42 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/SerializedGrammar.java +204 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/Token.java +92 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/TokenRewriteStream.java +569 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/TokenSource.java +54 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/TokenStream.java +75 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/UnbufferedTokenStream.java +82 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/UnwantedTokenException.java +53 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/BlankDebugEventListener.java +77 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventHub.java +292 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventListener.java +323 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventRepeater.java +88 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugEventSocketProxy.java +358 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugParser.java +101 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTokenStream.java +156 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTreeAdaptor.java +250 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTreeNodeStream.java +155 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/DebugTreeParser.java +112 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/ParseTreeBuilder.java +109 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/Profiler.java +772 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/RemoteDebugEventSocketListener.java +541 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/TraceDebugEventListener.java +108 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/debug/Tracer.java +69 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/DoubleKeyMap.java +62 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/FastQueue.java +100 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/IntArray.java +87 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/LookaheadStream.java +161 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/misc/Stats.java +189 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/BaseTree.java +349 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/BaseTreeAdaptor.java +279 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/BufferedTreeNodeStream.java +489 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonErrorNode.java +108 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonTree.java +185 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonTreeAdaptor.java +168 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/CommonTreeNodeStream.java +171 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/ParseTree.java +119 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteCardinalityException.java +47 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteEarlyExitException.java +39 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteEmptyStreamException.java +35 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleElementStream.java +210 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleNodeStream.java +70 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.java +86 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/RewriteRuleTokenStream.java +76 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/Tree.java +127 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeAdaptor.java +263 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeFilter.java +135 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeIterator.java +132 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeNodeStream.java +106 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeParser.java +169 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreePatternLexer.java +135 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreePatternParser.java +154 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeRewriter.java +124 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeRuleReturnScope.java +41 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeVisitor.java +69 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeVisitorAction.java +47 -0
- data/test-server/instrumentation-backend/src/org/antlr/runtime/tree/TreeWizard.java +531 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/CalabashInstrumentationTestRunner.java +37 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/ClearAppData.java +63 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +64 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/FranklyResult.java +95 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +90 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +83 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/TestHelpers.java +130 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/WakeUp.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Action.java +11 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Actions.java +112 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java +222 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NanoHTTPD.java +1094 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NullAction.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/FinishOpenedActivities.java +19 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/GetOpenedActivities.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/GoBackToActivity.java +67 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/activity/SetActivityOrientation.java +41 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +27 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonDescription.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +26 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +26 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/ClickOnScreen.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Drag.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/DragCoordinates.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Swipe.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/TouchCoordinates.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/InspectCurrentDialog.java +76 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/ListActions.java +26 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/l10n/L10nHelper.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/l10n/PressElement.java +48 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/l10n/WaitForElement.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListData.java +85 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemProperties.java +194 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemText.java +136 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +138 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapBounds.java +27 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapCenter.java +27 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapMarker.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapMarkers.java +48 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/GetMapZoom.java +19 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/PanMapTo.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/SetMapCenter.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/SetMapZoom.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/TapAwayFromMarkers.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/map/TapMapMarker.java +29 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/search/EnterQueryByIndex.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/DownKey.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/EnterKey.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/GoBack.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/LeftKey.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/PressMenu.java +26 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/RightKey.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/UpKey.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/GetSelectedSpinnerItemText.java +36 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +43 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertGridViewContainsNoDuplicates.java +72 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +32 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextById.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +33 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +32 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextById.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/GetTextById.java +42 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByContentDescription.java +33 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByIndex.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByContentDescription.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByIndex.java +26 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/version/Version.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/AssertViewProperty.java +141 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewByDescription.java +46 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +56 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/GetActivityName.java +32 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/GetViewProperty.java +101 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/HasView.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/IsCurrentActivityFocused.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/IsEnabled.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +89 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/SelectTab.java +110 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +21 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +54 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForTab.java +108 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +37 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForView.java +43 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForViewById.java +51 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +180 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +53 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +55 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +121 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteAsyncJavascript.java +77 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteJavascript.java +75 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/GetLoadProgress.java +21 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/GetUrl.java +21 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java +44 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +70 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +104 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +87 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +69 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/CompletedFuture.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/InvocationOperation.java +222 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Operation.java +7 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/PropertyOperation.java +56 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java +181 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/QueryResult.java +27 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQuery.tokens +19 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQueryResultVoid.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java +93 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java +1713 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java +771 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/BeginsWithRelation.java +45 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/ComparisonOperator.java +54 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/ContainsRelation.java +41 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/EndsWithRelation.java +42 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/InvalidUIQueryException.java +10 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/LikeRelation.java +79 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/PartialFutureList.java +100 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryAST.java +8 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTClassName.java +142 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTPredicate.java +147 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTPredicateRelation.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java +202 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryDirection.java +15 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryEvaluator.java +99 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java +271 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryVisibility.java +32 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variant.java +413 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variants.java +90 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/FormatSchema.java +29 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonEncoding.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonFactory.java +937 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerationException.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerator.java +1197 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonLocation.java +141 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonNode.java +879 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParseException.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParser.java +1434 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonProcessingException.java +80 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonStreamContext.java +122 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonToken.java +161 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/ObjectCodec.java +157 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/PrettyPrinter.java +166 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/SerializableString.java +54 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Version.java +90 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Versioned.java +20 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JacksonAnnotation.java +20 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnyGetter.java +25 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnySetter.java +24 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAutoDetect.java +148 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonBackReference.java +41 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonCreator.java +19 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonGetter.java +35 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnore.java +57 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreProperties.java +48 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreType.java +33 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonManagedReference.java +41 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonMethod.java +90 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonProperty.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonPropertyOrder.java +46 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonRawValue.java +33 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSetter.java +33 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSubTypes.java +44 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeInfo.java +236 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeName.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonUnwrapped.java +76 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonValue.java +46 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonWriteNullProperties.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/package-info.java +16 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatDetector.java +176 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatMatcher.java +117 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/InputAccessor.java +130 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/MatchStrength.java +64 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/package-info.java +8 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ByteSourceBootstrapper.java +518 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/DefaultPrettyPrinter.java +13 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Indenter.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonGeneratorBase.java +570 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonNumericParserBase.java +20 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserBase.java +1067 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserMinimalBase.java +539 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonReadContext.java +188 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonWriteContext.java +178 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParser.java +1815 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParserBase.java +228 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/StreamBasedParserBase.java +197 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8Generator.java +1757 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8StreamParser.java +2966 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/WriterBasedGenerator.java +1815 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/package-info.java +6 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/BaseReader.java +117 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/CharacterEscapes.java +73 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/IOContext.java +239 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/InputDecorator.java +67 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/JsonStringEncoder.java +408 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/MergedStream.java +145 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberInput.java +303 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberOutput.java +398 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/OutputDecorator.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SegmentedStringWriter.java +104 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SerializedString.java +114 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF32Reader.java +214 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF8Writer.java +387 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/package.html +4 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AbstractTypeResolver.java +63 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AnnotationIntrospector.java +1485 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanDescription.java +171 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanProperty.java +123 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanPropertyDefinition.java +66 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ClassIntrospector.java +117 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualDeserializer.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualKeyDeserializer.java +33 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualSerializer.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationConfig.java +926 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationContext.java +262 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationProblemHandler.java +56 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerFactory.java +356 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerProvider.java +185 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Deserializers.java +339 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/HandlerInstantiator.java +115 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/InjectableValues.java +85 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonDeserializer.java +166 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonMappingException.java +335 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializable.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializableWithType.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializer.java +138 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializer.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializers.java +21 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MapperConfig.java +1154 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingIterator.java +190 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingJsonFactory.java +81 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Module.java +255 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectMapper.java +2885 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectReader.java +958 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectWriter.java +554 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/PropertyNamingStrategy.java +258 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableDeserializer.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableSerializer.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/RuntimeJsonMappingException.java +21 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializationConfig.java +1041 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerFactory.java +198 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerProvider.java +552 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Serializers.java +137 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeDeserializer.java +118 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeSerializer.java +164 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonInject.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonStdImpl.java +25 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonCachable.java +32 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonDeserialize.java +109 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonFilter.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonRootName.java +29 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonSerialize.java +216 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeIdResolver.java +35 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeResolver.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonValueInstantiator.java +26 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonView.java +37 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/NoClass.java +19 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/package-info.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/AbstractDeserializer.java +102 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializer.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializers.java +11 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BasicDeserializerFactory.java +894 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializer.java +1537 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerBuilder.java +277 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerFactory.java +1474 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerModifier.java +58 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CollectionDeserializer.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ContainerDeserializer.java +14 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CustomDeserializerFactory.java +227 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/DateDeserializer.java +9 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumDeserializer.java +15 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumResolver.java +17 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/FromStringDeserializer.java +13 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/JsonNodeDeserializer.java +54 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/MapDeserializer.java +44 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableAnyProperty.java +177 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableBeanProperty.java +827 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializationContext.java +326 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializer.java +94 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializerProvider.java +494 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializers.java +119 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializer.java +12 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializers.java +11 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdScalarDeserializer.java +13 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ThrowableDeserializer.java +13 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/UntypedObjectDeserializer.java +9 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiator.java +280 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiators.java +52 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/BeanPropertyMap.java +257 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorCollector.java +141 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorProperty.java +152 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java +173 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java +117 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValue.java +117 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValueBuffer.java +102 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/UnwrappedPropertyHandler.java +41 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ValueInjector.java +45 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/package-info.java +9 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/package-info.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicBooleanDeserializer.java +22 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicReferenceDeserializer.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CalendarDeserializer.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ClassDeserializer.java +49 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CollectionDeserializer.java +265 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ContainerDeserializerBase.java +37 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/DateDeserializer.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumDeserializer.java +139 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumMapDeserializer.java +90 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumSetDeserializer.java +89 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/FromStringDeserializer.java +265 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JavaTypeDeserializer.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JsonNodeDeserializer.java +314 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/MapDeserializer.java +412 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ObjectArrayDeserializer.java +201 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/PrimitiveArrayDeserializers.java +583 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdDeserializer.java +1136 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializer.java +340 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializers.java +108 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdScalarDeserializer.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdValueInstantiator.java +392 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringCollectionDeserializer.java +227 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringDeserializer.java +55 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ThrowableDeserializer.java +164 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TimestampDeserializer.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TokenBufferDeserializer.java +36 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/UntypedObjectDeserializer.java +248 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/package-info.java +15 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/exc/UnrecognizedPropertyException.java +75 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/DOMDeserializer.java +65 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/OptionalHandlerFactory.java +217 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/package-info.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/Annotated.java +85 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedClass.java +980 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedConstructor.java +143 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedField.java +119 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMember.java +56 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethod.java +188 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethodMap.java +85 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedParameter.java +191 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedWithParams.java +195 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotationMap.java +101 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicBeanDescription.java +615 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicClassIntrospector.java +364 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/JacksonAnnotationIntrospector.java +813 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MemberKey.java +83 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MethodFilter.java +12 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/NopAnnotationIntrospector.java +209 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertiesCollector.java +713 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertyBuilder.java +648 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/VisibilityChecker.java +424 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/package-info.java +12 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/NamedType.java +53 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/SubtypeResolver.java +39 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeIdResolver.java +74 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeResolverBuilder.java +151 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeDeserializer.java +126 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeSerializer.java +110 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeDeserializer.java +37 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeSerializer.java +129 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeDeserializer.java +191 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeSerializer.java +69 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeDeserializer.java +103 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeSerializer.java +121 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/ClassNameIdResolver.java +138 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/MinimalClassNameIdResolver.java +66 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdSubtypeResolver.java +151 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdTypeResolverBuilder.java +202 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeDeserializerBase.java +154 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeIdResolverBase.java +37 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeNameIdResolver.java +154 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeSerializerBase.java +31 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/package-info.java +9 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/package-info.java +10 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleAbstractTypeResolver.java +86 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleDeserializers.java +130 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleKeyDeserializers.java +59 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleModule.java +265 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleSerializers.java +206 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleValueInstantiators.java +45 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/package-info.java +16 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/package-info.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/AnyGetterWriter.java +48 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ArraySerializers.java +7 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BasicSerializerFactory.java +806 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyFilter.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyWriter.java +512 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializer.java +126 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerBuilder.java +140 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerFactory.java +780 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerModifier.java +95 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ContainerSerializers.java +8 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/CustomSerializerFactory.java +293 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/EnumSerializer.java +17 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilterProvider.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilteredBeanPropertyWriter.java +96 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/JdkSerializers.java +11 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/MapSerializer.java +58 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/PropertyBuilder.java +372 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ScalarSerializerBase.java +18 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/SerializerBase.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdKeySerializer.java +10 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializerProvider.java +852 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializers.java +372 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ToStringSerializer.java +14 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/FailingSerializer.java +43 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/JsonSerializerMap.java +93 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/PropertySerializerMap.java +231 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/ReadOnlyClassToSerializerMap.java +73 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SerializerCache.java +304 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleBeanPropertyFilter.java +109 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleFilterProvider.java +114 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnknownSerializer.java +54 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanPropertyWriter.java +99 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanSerializer.java +76 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/package-info.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/package-info.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/AsArraySerializerBase.java +185 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/BeanSerializerBase.java +340 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CalendarSerializer.java +43 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CollectionSerializer.java +113 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ContainerSerializerBase.java +51 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/DateSerializer.java +42 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumMapSerializer.java +218 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSerializer.java +84 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSetSerializer.java +47 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IndexedStringListSerializer.java +116 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/InetAddressSerializer.java +51 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IterableSerializer.java +63 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/JsonValueSerializer.java +233 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/MapSerializer.java +422 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NonTypedScalarSerializerBase.java +34 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NullSerializer.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ObjectArraySerializer.java +281 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/RawSerializer.java +52 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ScalarSerializerBase.java +52 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableSerializer.java +99 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableWithTypeSerializer.java +90 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializerBase.java +184 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StaticListSerializerBase.java +46 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdArraySerializers.java +476 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdContainerSerializers.java +249 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdJdkSerializers.java +195 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializer.java +43 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializers.java +95 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringCollectionSerializer.java +119 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringSerializer.java +36 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TimeZoneSerializer.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ToStringSerializer.java +73 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TokenBufferSerializer.java +66 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ArrayType.java +260 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ClassKey.java +94 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionLikeType.java +204 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionType.java +94 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/HierarchicType.java +88 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapLikeType.java +265 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapType.java +146 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/SimpleType.java +250 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBase.java +148 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBindings.java +351 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeFactory.java +1165 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeModifier.java +38 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeParser.java +134 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/package-info.java +10 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Annotations.java +23 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ArrayBuilders.java +293 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/BeanUtil.java +260 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ClassUtil.java +645 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Comparators.java +48 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumResolver.java +108 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumValues.java +82 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601DateFormat.java +52 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601Utils.java +230 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONPObject.java +105 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONWrappedObject.java +117 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LRUMap.java +28 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LinkedNode.java +45 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Named.java +10 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ObjectBuffer.java +257 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/PrimitiveArrayBuilder.java +180 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Provider.java +21 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/RootNameLookup.java +54 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/StdDateFormat.java +348 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/package-info.java +4 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ArrayNode.java +758 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BaseJsonNode.java +122 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BigIntegerNode.java +104 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BinaryNode.java +136 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BooleanNode.java +84 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ContainerNode.java +185 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DecimalNode.java +96 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DoubleNode.java +106 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/IntNode.java +122 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/JsonNodeFactory.java +222 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/LongNode.java +99 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/MissingNode.java +97 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NodeCursor.java +222 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NullNode.java +58 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NumericNode.java +72 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ObjectNode.java +696 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/POJONode.java +145 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TextNode.java +299 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TreeTraversingParser.java +383 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ValueNode.java +58 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/package-info.java +8 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/package-info.java +30 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSchema.java +82 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSerializableSchema.java +46 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/SchemaAware.java +25 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/package-info.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/BytesToNameCanonicalizer.java +969 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/CharsToNameCanonicalizer.java +578 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name.java +50 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name1.java +44 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name2.java +40 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name3.java +39 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/NameN.java +68 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/package-info.java +5 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/JavaType.java +503 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/TypeReference.java +60 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/package-info.java +8 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/BufferRecycler.java +109 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/ByteArrayBuilder.java +294 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/CharTypes.java +237 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/DefaultPrettyPrinter.java +282 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/InternCache.java +49 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonGeneratorDelegate.java +273 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserDelegate.java +251 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserSequence.java +150 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/MinimalPrettyPrinter.java +152 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TextBuffer.java +707 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TokenBuffer.java +1233 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/VersionUtil.java +79 -0
- data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/package-info.java +4 -0
- metadata +868 -0
data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8Generator.java
ADDED
|
@@ -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
|
+
}
|