calabash-android 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. data/CHANGES.txt +1 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +8 -0
  4. data/Rakefile +2 -0
  5. data/bin/calabash-android +42 -0
  6. data/bin/calabash-android-build.rb +37 -0
  7. data/bin/calabash-android-generate.rb +26 -0
  8. data/bin/calabash-android-helpers.rb +71 -0
  9. data/bin/calabash-android-run.rb +18 -0
  10. data/bin/calabash-android-setup.rb +392 -0
  11. data/calabash-android.gemspec +23 -0
  12. data/doc/calabash-android-help.txt +21 -0
  13. data/epl-v10.html +261 -0
  14. data/features-skeleton/.irbrc +16 -0
  15. data/features-skeleton/irb_android.sh +2 -0
  16. data/features-skeleton/my_first.feature +5 -0
  17. data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
  18. data/features-skeleton/support/app_installation_hooks.rb +26 -0
  19. data/features-skeleton/support/app_life_cycle_hooks.rb +28 -0
  20. data/features-skeleton/support/env.rb +1 -0
  21. data/features-skeleton/support/hooks.rb +18 -0
  22. data/lib/calabash-android.rb +2 -0
  23. data/lib/calabash-android/calabash_steps.rb +18 -0
  24. data/lib/calabash-android/canned_steps.md +239 -0
  25. data/lib/calabash-android/color_helper.rb +13 -0
  26. data/lib/calabash-android/cucumber.rb +9 -0
  27. data/lib/calabash-android/lib/screenShotTaker.jar +0 -0
  28. data/lib/calabash-android/management/adb.rb +11 -0
  29. data/lib/calabash-android/management/app_installation.rb +21 -0
  30. data/lib/calabash-android/operations.rb +283 -0
  31. data/lib/calabash-android/steps/additions_manual_steps.rb +11 -0
  32. data/lib/calabash-android/steps/app_steps.rb +10 -0
  33. data/lib/calabash-android/steps/assert_steps.rb +32 -0
  34. data/lib/calabash-android/steps/check_box_steps.rb +3 -0
  35. data/lib/calabash-android/steps/context_menu_steps.rb +12 -0
  36. data/lib/calabash-android/steps/date_picker_steps.rb +8 -0
  37. data/lib/calabash-android/steps/enter_text_steps.rb +21 -0
  38. data/lib/calabash-android/steps/location_steps.rb +19 -0
  39. data/lib/calabash-android/steps/navigation_steps.rb +27 -0
  40. data/lib/calabash-android/steps/press_button_steps.rb +35 -0
  41. data/lib/calabash-android/steps/progress_steps.rb +49 -0
  42. data/lib/calabash-android/steps/rotation_steps.rb +8 -0
  43. data/lib/calabash-android/steps/screenshot_steps.rb +11 -0
  44. data/lib/calabash-android/steps/spinner_steps.rb +3 -0
  45. data/lib/calabash-android/steps/time_picker_steps.rb +8 -0
  46. data/lib/calabash-android/version.rb +6 -0
  47. data/test-server/AndroidManifest.xml +13 -0
  48. data/test-server/build.xml +192 -0
  49. data/test-server/calabash-js/src/calabash.js +125 -0
  50. data/test-server/calabash-js/src/set_text.js +132 -0
  51. data/test-server/instrumentation-backend/.classpath +10 -0
  52. data/test-server/instrumentation-backend/.project +33 -0
  53. data/test-server/instrumentation-backend/.settings/org.eclipse.jdt.core.prefs +12 -0
  54. data/test-server/instrumentation-backend/AndroidManifest.xml +15 -0
  55. data/test-server/instrumentation-backend/assets/foo.bar +0 -0
  56. data/test-server/instrumentation-backend/gen/com/lesspainful/simpleui/test/R.java +23 -0
  57. data/test-server/instrumentation-backend/libs/robotium-solo-2.5.jar +0 -0
  58. data/test-server/instrumentation-backend/project.properties +11 -0
  59. data/test-server/instrumentation-backend/res/drawable-hdpi/ic_launcher.png +0 -0
  60. data/test-server/instrumentation-backend/res/drawable-ldpi/ic_launcher.png +0 -0
  61. data/test-server/instrumentation-backend/res/drawable-mdpi/ic_launcher.png +0 -0
  62. data/test-server/instrumentation-backend/res/layout/main.xml +12 -0
  63. data/test-server/instrumentation-backend/res/values/strings.xml +7 -0
  64. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +48 -0
  65. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +196 -0
  66. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +64 -0
  67. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/TestHelpers.java +136 -0
  68. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Action.java +11 -0
  69. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Actions.java +113 -0
  70. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NullAction.java +23 -0
  71. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +22 -0
  72. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +27 -0
  73. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +22 -0
  74. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +47 -0
  75. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +22 -0
  76. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +22 -0
  77. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +26 -0
  78. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +22 -0
  79. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +26 -0
  80. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/ClickOnScreen.java +31 -0
  81. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Swipe.java +28 -0
  82. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/ListActions.java +26 -0
  83. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +22 -0
  84. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +22 -0
  85. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +79 -0
  86. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +28 -0
  87. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +28 -0
  88. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/DownKey.java +24 -0
  89. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/GoBack.java +22 -0
  90. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/PressMenu.java +26 -0
  91. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +24 -0
  92. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +43 -0
  93. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +31 -0
  94. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +32 -0
  95. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +22 -0
  96. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +33 -0
  97. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +22 -0
  98. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +32 -0
  99. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +22 -0
  100. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByContentDescription.java +33 -0
  101. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByIndex.java +24 -0
  102. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByContentDescription.java +34 -0
  103. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByIndex.java +26 -0
  104. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +63 -0
  105. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +34 -0
  106. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +89 -0
  107. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/WaitForViewById.java +41 -0
  108. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +24 -0
  109. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +21 -0
  110. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +47 -0
  111. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +49 -0
  112. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +26 -0
  113. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +109 -0
  114. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +33 -0
  115. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +33 -0
  116. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +99 -0
  117. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +43 -0
  118. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Query.java +24 -0
  119. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +99 -0
  120. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +74 -0
  121. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +43 -0
  122. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +50 -0
  123. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Touch.java +44 -0
  124. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variant.java +413 -0
  125. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variants.java +90 -0
  126. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/FormatSchema.java +29 -0
  127. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonEncoding.java +47 -0
  128. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonFactory.java +937 -0
  129. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerationException.java +28 -0
  130. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerator.java +1197 -0
  131. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonLocation.java +141 -0
  132. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonNode.java +879 -0
  133. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParseException.java +23 -0
  134. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParser.java +1434 -0
  135. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonProcessingException.java +80 -0
  136. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonStreamContext.java +122 -0
  137. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonToken.java +161 -0
  138. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/ObjectCodec.java +157 -0
  139. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/PrettyPrinter.java +166 -0
  140. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/SerializableString.java +54 -0
  141. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Version.java +90 -0
  142. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Versioned.java +20 -0
  143. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JacksonAnnotation.java +20 -0
  144. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnyGetter.java +25 -0
  145. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnySetter.java +24 -0
  146. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAutoDetect.java +148 -0
  147. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonBackReference.java +41 -0
  148. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonCreator.java +19 -0
  149. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonGetter.java +35 -0
  150. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnore.java +57 -0
  151. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreProperties.java +48 -0
  152. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreType.java +33 -0
  153. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonManagedReference.java +41 -0
  154. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonMethod.java +90 -0
  155. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonProperty.java +38 -0
  156. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonPropertyOrder.java +46 -0
  157. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonRawValue.java +33 -0
  158. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSetter.java +33 -0
  159. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSubTypes.java +44 -0
  160. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeInfo.java +236 -0
  161. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeName.java +28 -0
  162. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonUnwrapped.java +76 -0
  163. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonValue.java +46 -0
  164. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonWriteNullProperties.java +34 -0
  165. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/package-info.java +16 -0
  166. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatDetector.java +176 -0
  167. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatMatcher.java +117 -0
  168. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/InputAccessor.java +130 -0
  169. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/MatchStrength.java +64 -0
  170. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/package-info.java +8 -0
  171. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ByteSourceBootstrapper.java +518 -0
  172. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/DefaultPrettyPrinter.java +13 -0
  173. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Indenter.java +23 -0
  174. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonGeneratorBase.java +570 -0
  175. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonNumericParserBase.java +20 -0
  176. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserBase.java +1067 -0
  177. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserMinimalBase.java +539 -0
  178. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonReadContext.java +188 -0
  179. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonWriteContext.java +178 -0
  180. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParser.java +1815 -0
  181. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParserBase.java +228 -0
  182. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/StreamBasedParserBase.java +197 -0
  183. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8Generator.java +1757 -0
  184. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8StreamParser.java +2966 -0
  185. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/WriterBasedGenerator.java +1815 -0
  186. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/package-info.java +6 -0
  187. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/BaseReader.java +117 -0
  188. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/CharacterEscapes.java +73 -0
  189. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/IOContext.java +239 -0
  190. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/InputDecorator.java +67 -0
  191. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/JsonStringEncoder.java +408 -0
  192. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/MergedStream.java +145 -0
  193. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberInput.java +303 -0
  194. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberOutput.java +398 -0
  195. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/OutputDecorator.java +40 -0
  196. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SegmentedStringWriter.java +104 -0
  197. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SerializedString.java +114 -0
  198. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF32Reader.java +214 -0
  199. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF8Writer.java +387 -0
  200. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/package.html +4 -0
  201. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AbstractTypeResolver.java +63 -0
  202. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AnnotationIntrospector.java +1485 -0
  203. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanDescription.java +171 -0
  204. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanProperty.java +123 -0
  205. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanPropertyDefinition.java +66 -0
  206. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ClassIntrospector.java +117 -0
  207. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualDeserializer.java +38 -0
  208. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualKeyDeserializer.java +33 -0
  209. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualSerializer.java +38 -0
  210. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationConfig.java +926 -0
  211. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationContext.java +262 -0
  212. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationProblemHandler.java +56 -0
  213. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerFactory.java +356 -0
  214. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerProvider.java +185 -0
  215. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Deserializers.java +339 -0
  216. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/HandlerInstantiator.java +115 -0
  217. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/InjectableValues.java +85 -0
  218. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonDeserializer.java +166 -0
  219. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonMappingException.java +335 -0
  220. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializable.java +34 -0
  221. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializableWithType.java +22 -0
  222. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializer.java +138 -0
  223. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializer.java +31 -0
  224. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializers.java +21 -0
  225. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MapperConfig.java +1154 -0
  226. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingIterator.java +190 -0
  227. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingJsonFactory.java +81 -0
  228. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Module.java +255 -0
  229. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectMapper.java +2885 -0
  230. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectReader.java +958 -0
  231. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectWriter.java +554 -0
  232. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/PropertyNamingStrategy.java +258 -0
  233. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableDeserializer.java +23 -0
  234. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableSerializer.java +23 -0
  235. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/RuntimeJsonMappingException.java +21 -0
  236. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializationConfig.java +1041 -0
  237. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerFactory.java +198 -0
  238. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerProvider.java +552 -0
  239. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Serializers.java +137 -0
  240. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeDeserializer.java +118 -0
  241. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeSerializer.java +164 -0
  242. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonInject.java +30 -0
  243. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonStdImpl.java +25 -0
  244. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonCachable.java +32 -0
  245. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonDeserialize.java +109 -0
  246. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonFilter.java +31 -0
  247. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonRootName.java +29 -0
  248. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonSerialize.java +216 -0
  249. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeIdResolver.java +35 -0
  250. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeResolver.java +28 -0
  251. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonValueInstantiator.java +26 -0
  252. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonView.java +37 -0
  253. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/NoClass.java +19 -0
  254. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/package-info.java +5 -0
  255. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/AbstractDeserializer.java +102 -0
  256. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializer.java +28 -0
  257. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializers.java +11 -0
  258. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BasicDeserializerFactory.java +894 -0
  259. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializer.java +1537 -0
  260. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerBuilder.java +277 -0
  261. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerFactory.java +1474 -0
  262. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerModifier.java +58 -0
  263. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CollectionDeserializer.java +47 -0
  264. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ContainerDeserializer.java +14 -0
  265. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CustomDeserializerFactory.java +227 -0
  266. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/DateDeserializer.java +9 -0
  267. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumDeserializer.java +15 -0
  268. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumResolver.java +17 -0
  269. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/FromStringDeserializer.java +13 -0
  270. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/JsonNodeDeserializer.java +54 -0
  271. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/MapDeserializer.java +44 -0
  272. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableAnyProperty.java +177 -0
  273. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableBeanProperty.java +827 -0
  274. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializationContext.java +326 -0
  275. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializer.java +94 -0
  276. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializerProvider.java +494 -0
  277. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializers.java +119 -0
  278. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializer.java +12 -0
  279. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializers.java +11 -0
  280. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdScalarDeserializer.java +13 -0
  281. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ThrowableDeserializer.java +13 -0
  282. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/UntypedObjectDeserializer.java +9 -0
  283. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiator.java +280 -0
  284. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiators.java +52 -0
  285. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/BeanPropertyMap.java +257 -0
  286. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorCollector.java +141 -0
  287. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorProperty.java +152 -0
  288. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java +173 -0
  289. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java +117 -0
  290. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValue.java +117 -0
  291. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValueBuffer.java +102 -0
  292. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/UnwrappedPropertyHandler.java +41 -0
  293. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ValueInjector.java +45 -0
  294. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/package-info.java +9 -0
  295. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/package-info.java +5 -0
  296. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicBooleanDeserializer.java +22 -0
  297. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicReferenceDeserializer.java +47 -0
  298. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CalendarDeserializer.java +47 -0
  299. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ClassDeserializer.java +49 -0
  300. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CollectionDeserializer.java +265 -0
  301. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ContainerDeserializerBase.java +37 -0
  302. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/DateDeserializer.java +30 -0
  303. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumDeserializer.java +139 -0
  304. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumMapDeserializer.java +90 -0
  305. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumSetDeserializer.java +89 -0
  306. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/FromStringDeserializer.java +265 -0
  307. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JavaTypeDeserializer.java +38 -0
  308. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JsonNodeDeserializer.java +314 -0
  309. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/MapDeserializer.java +412 -0
  310. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ObjectArrayDeserializer.java +201 -0
  311. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/PrimitiveArrayDeserializers.java +583 -0
  312. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdDeserializer.java +1136 -0
  313. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializer.java +340 -0
  314. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializers.java +108 -0
  315. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdScalarDeserializer.java +34 -0
  316. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdValueInstantiator.java +392 -0
  317. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringCollectionDeserializer.java +227 -0
  318. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringDeserializer.java +55 -0
  319. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ThrowableDeserializer.java +164 -0
  320. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TimestampDeserializer.java +30 -0
  321. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TokenBufferDeserializer.java +36 -0
  322. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/UntypedObjectDeserializer.java +248 -0
  323. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/package-info.java +15 -0
  324. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/exc/UnrecognizedPropertyException.java +75 -0
  325. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/CoreXMLDeserializers.java +114 -0
  326. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/CoreXMLSerializers.java +72 -0
  327. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/DOMDeserializer.java +65 -0
  328. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/OptionalHandlerFactory.java +217 -0
  329. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/package-info.java +23 -0
  330. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/Annotated.java +85 -0
  331. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedClass.java +980 -0
  332. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedConstructor.java +143 -0
  333. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedField.java +119 -0
  334. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMember.java +56 -0
  335. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethod.java +188 -0
  336. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethodMap.java +85 -0
  337. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedParameter.java +191 -0
  338. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedWithParams.java +195 -0
  339. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotationMap.java +101 -0
  340. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicBeanDescription.java +615 -0
  341. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicClassIntrospector.java +364 -0
  342. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/JacksonAnnotationIntrospector.java +813 -0
  343. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MemberKey.java +83 -0
  344. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MethodFilter.java +12 -0
  345. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/NopAnnotationIntrospector.java +209 -0
  346. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertiesCollector.java +713 -0
  347. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertyBuilder.java +648 -0
  348. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/VisibilityChecker.java +424 -0
  349. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/package-info.java +12 -0
  350. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/NamedType.java +53 -0
  351. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/SubtypeResolver.java +39 -0
  352. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeIdResolver.java +74 -0
  353. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeResolverBuilder.java +151 -0
  354. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeDeserializer.java +126 -0
  355. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeSerializer.java +110 -0
  356. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeDeserializer.java +37 -0
  357. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeSerializer.java +129 -0
  358. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeDeserializer.java +191 -0
  359. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeSerializer.java +69 -0
  360. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeDeserializer.java +103 -0
  361. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeSerializer.java +121 -0
  362. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/ClassNameIdResolver.java +138 -0
  363. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/MinimalClassNameIdResolver.java +66 -0
  364. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdSubtypeResolver.java +151 -0
  365. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdTypeResolverBuilder.java +202 -0
  366. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeDeserializerBase.java +154 -0
  367. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeIdResolverBase.java +37 -0
  368. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeNameIdResolver.java +154 -0
  369. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeSerializerBase.java +31 -0
  370. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/package-info.java +9 -0
  371. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/package-info.java +10 -0
  372. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleAbstractTypeResolver.java +86 -0
  373. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleDeserializers.java +130 -0
  374. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleKeyDeserializers.java +59 -0
  375. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleModule.java +265 -0
  376. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleSerializers.java +206 -0
  377. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleValueInstantiators.java +45 -0
  378. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/package-info.java +16 -0
  379. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/package-info.java +34 -0
  380. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/AnyGetterWriter.java +48 -0
  381. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ArraySerializers.java +7 -0
  382. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BasicSerializerFactory.java +806 -0
  383. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyFilter.java +30 -0
  384. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyWriter.java +512 -0
  385. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializer.java +126 -0
  386. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerBuilder.java +140 -0
  387. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerFactory.java +780 -0
  388. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerModifier.java +95 -0
  389. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ContainerSerializers.java +8 -0
  390. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/CustomSerializerFactory.java +293 -0
  391. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/EnumSerializer.java +17 -0
  392. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilterProvider.java +23 -0
  393. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilteredBeanPropertyWriter.java +96 -0
  394. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/JdkSerializers.java +11 -0
  395. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/MapSerializer.java +58 -0
  396. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/PropertyBuilder.java +372 -0
  397. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ScalarSerializerBase.java +18 -0
  398. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/SerializerBase.java +23 -0
  399. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdKeySerializer.java +10 -0
  400. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializerProvider.java +852 -0
  401. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializers.java +372 -0
  402. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ToStringSerializer.java +14 -0
  403. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/FailingSerializer.java +43 -0
  404. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/JsonSerializerMap.java +93 -0
  405. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/PropertySerializerMap.java +231 -0
  406. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/ReadOnlyClassToSerializerMap.java +73 -0
  407. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SerializerCache.java +304 -0
  408. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleBeanPropertyFilter.java +109 -0
  409. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleFilterProvider.java +114 -0
  410. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnknownSerializer.java +54 -0
  411. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanPropertyWriter.java +99 -0
  412. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanSerializer.java +76 -0
  413. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/package-info.java +5 -0
  414. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/package-info.java +5 -0
  415. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/AsArraySerializerBase.java +185 -0
  416. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/BeanSerializerBase.java +340 -0
  417. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CalendarSerializer.java +43 -0
  418. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CollectionSerializer.java +113 -0
  419. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ContainerSerializerBase.java +51 -0
  420. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/DateSerializer.java +42 -0
  421. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumMapSerializer.java +218 -0
  422. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSerializer.java +84 -0
  423. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSetSerializer.java +47 -0
  424. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IndexedStringListSerializer.java +116 -0
  425. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/InetAddressSerializer.java +51 -0
  426. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IterableSerializer.java +63 -0
  427. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/JsonValueSerializer.java +233 -0
  428. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/MapSerializer.java +422 -0
  429. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NonTypedScalarSerializerBase.java +34 -0
  430. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NullSerializer.java +38 -0
  431. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ObjectArraySerializer.java +281 -0
  432. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/RawSerializer.java +52 -0
  433. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ScalarSerializerBase.java +52 -0
  434. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableSerializer.java +99 -0
  435. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableWithTypeSerializer.java +90 -0
  436. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializerBase.java +184 -0
  437. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StaticListSerializerBase.java +46 -0
  438. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdArraySerializers.java +476 -0
  439. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdContainerSerializers.java +249 -0
  440. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdJdkSerializers.java +195 -0
  441. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializer.java +43 -0
  442. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializers.java +95 -0
  443. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringCollectionSerializer.java +119 -0
  444. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringSerializer.java +36 -0
  445. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TimeZoneSerializer.java +38 -0
  446. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ToStringSerializer.java +73 -0
  447. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TokenBufferSerializer.java +66 -0
  448. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ArrayType.java +260 -0
  449. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ClassKey.java +94 -0
  450. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionLikeType.java +204 -0
  451. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionType.java +94 -0
  452. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/HierarchicType.java +88 -0
  453. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapLikeType.java +265 -0
  454. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapType.java +146 -0
  455. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/SimpleType.java +250 -0
  456. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBase.java +148 -0
  457. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBindings.java +351 -0
  458. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeFactory.java +1165 -0
  459. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeModifier.java +38 -0
  460. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeParser.java +134 -0
  461. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/package-info.java +10 -0
  462. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Annotations.java +23 -0
  463. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ArrayBuilders.java +293 -0
  464. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/BeanUtil.java +260 -0
  465. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ClassUtil.java +645 -0
  466. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Comparators.java +48 -0
  467. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumResolver.java +108 -0
  468. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumValues.java +82 -0
  469. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601DateFormat.java +52 -0
  470. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601Utils.java +230 -0
  471. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONPObject.java +105 -0
  472. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONWrappedObject.java +117 -0
  473. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LRUMap.java +28 -0
  474. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LinkedNode.java +45 -0
  475. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Named.java +10 -0
  476. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ObjectBuffer.java +257 -0
  477. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/PrimitiveArrayBuilder.java +180 -0
  478. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Provider.java +21 -0
  479. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/RootNameLookup.java +54 -0
  480. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/StdDateFormat.java +348 -0
  481. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/package-info.java +4 -0
  482. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ArrayNode.java +758 -0
  483. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BaseJsonNode.java +122 -0
  484. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BigIntegerNode.java +104 -0
  485. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BinaryNode.java +136 -0
  486. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BooleanNode.java +84 -0
  487. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ContainerNode.java +185 -0
  488. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DecimalNode.java +96 -0
  489. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DoubleNode.java +106 -0
  490. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/IntNode.java +122 -0
  491. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/JsonNodeFactory.java +222 -0
  492. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/LongNode.java +99 -0
  493. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/MissingNode.java +97 -0
  494. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NodeCursor.java +222 -0
  495. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NullNode.java +58 -0
  496. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NumericNode.java +72 -0
  497. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ObjectNode.java +696 -0
  498. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/POJONode.java +145 -0
  499. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TextNode.java +299 -0
  500. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TreeTraversingParser.java +383 -0
  501. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ValueNode.java +58 -0
  502. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/package-info.java +8 -0
  503. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/package-info.java +30 -0
  504. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSchema.java +82 -0
  505. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSerializableSchema.java +46 -0
  506. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/SchemaAware.java +25 -0
  507. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/package-info.java +5 -0
  508. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/BytesToNameCanonicalizer.java +969 -0
  509. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/CharsToNameCanonicalizer.java +578 -0
  510. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name.java +50 -0
  511. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name1.java +44 -0
  512. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name2.java +40 -0
  513. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name3.java +39 -0
  514. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/NameN.java +68 -0
  515. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/package-info.java +5 -0
  516. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/JavaType.java +503 -0
  517. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/TypeReference.java +60 -0
  518. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/package-info.java +8 -0
  519. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/BufferRecycler.java +109 -0
  520. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/ByteArrayBuilder.java +294 -0
  521. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/CharTypes.java +237 -0
  522. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/DefaultPrettyPrinter.java +282 -0
  523. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/InternCache.java +49 -0
  524. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonGeneratorDelegate.java +273 -0
  525. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserDelegate.java +251 -0
  526. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserSequence.java +150 -0
  527. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/MinimalPrettyPrinter.java +152 -0
  528. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TextBuffer.java +707 -0
  529. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TokenBuffer.java +1233 -0
  530. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/VersionUtil.java +79 -0
  531. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/package-info.java +4 -0
  532. metadata +619 -0
@@ -0,0 +1,260 @@
1
+ package sh.calaba.org.codehaus.jackson.map.util;
2
+
3
+ import sh.calaba.org.codehaus.jackson.map.introspect.AnnotatedMethod;
4
+
5
+ /**
6
+ * Helper class that contains functionality needed by both serialization
7
+ * and deserialization side.
8
+ *
9
+ * @since 1.9
10
+ */
11
+ public class BeanUtil
12
+ {
13
+ /*
14
+ * Helper method to use for sorting bean properties, based on
15
+ * ordering rules indicated by annotations, config features.
16
+ *
17
+ * @param config Serialization/Deserialization configuration in effect
18
+ * @param beanDesc Bean description
19
+ * @param props Properties to sort if/as necessary
20
+ * @param defaultSortByAlpha Whether properties should be (re)sorted alphabetically
21
+ * by default (unless overridden by type)
22
+ */
23
+ /*
24
+ public static <T extends Named> List<T> sortProperties(MapperConfig<?> config,
25
+ BasicBeanDescription beanDesc, List<T> props,
26
+ boolean defaultSortByAlpha)
27
+ {
28
+ // First, order by [JACKSON-90] (explicit ordering and/or alphabetic)
29
+ // and then for [JACKSON-170] (implicitly order creator properties before others)
30
+ List<String> creatorProps = beanDesc.findCreatorPropertyNames();
31
+ // Then how about explicit ordering?
32
+ AnnotationIntrospector intr = config.getAnnotationIntrospector();
33
+ AnnotatedClass ac = beanDesc.getClassInfo();
34
+ String[] propertyOrder = intr.findSerializationPropertyOrder(ac);
35
+ Boolean alpha = intr.findSerializationSortAlphabetically(ac);
36
+ boolean sort;
37
+
38
+ if (alpha == null) {
39
+ sort = defaultSortByAlpha;
40
+ } else {
41
+ sort = alpha.booleanValue();
42
+ }
43
+ // no sorting? no need to shuffle, then
44
+ if (!sort && creatorProps.isEmpty() && propertyOrder == null) {
45
+ return props;
46
+ }
47
+ int size = props.size();
48
+ Map<String,T> all;
49
+ // Need to (re)sort alphabetically?
50
+ if (sort) {
51
+ all = new TreeMap<String,T>();
52
+ } else {
53
+ all = new LinkedHashMap<String,T>(size+size);
54
+ }
55
+
56
+ for (T w : props) {
57
+ all.put(w.getName(), w);
58
+ }
59
+ Map<String,T> ordered = new LinkedHashMap<String,T>(size+size);
60
+ // Ok: primarily by explicit order
61
+ if (propertyOrder != null) {
62
+ for (String name : propertyOrder) {
63
+ T w = all.get(name);
64
+ if (w != null) {
65
+ ordered.put(name, w);
66
+ }
67
+ }
68
+ }
69
+ // And secondly by sorting Creator properties before other unordered properties
70
+ for (String name : creatorProps) {
71
+ T w = all.get(name);
72
+ if (w != null) {
73
+ ordered.put(name, w);
74
+ }
75
+ }
76
+ // And finally whatever is left (trying to put again will not change ordering)
77
+ ordered.putAll(all);
78
+ return new ArrayList<T>(ordered.values());
79
+ }
80
+ */
81
+
82
+ /*
83
+ /**********************************************************
84
+ /* Handling "getter" names
85
+ /**********************************************************
86
+ */
87
+
88
+ public static String okNameForGetter(AnnotatedMethod am)
89
+ {
90
+ String name = am.getName();
91
+ String str = okNameForIsGetter(am, name);
92
+ if (str == null) {
93
+ str = okNameForRegularGetter(am, name);
94
+ }
95
+ return str;
96
+ }
97
+
98
+ public static String okNameForRegularGetter(AnnotatedMethod am, String name)
99
+ {
100
+ if (name.startsWith("get")) {
101
+ /* 16-Feb-2009, tatu: To handle [JACKSON-53], need to block
102
+ * CGLib-provided method "getCallbacks". Not sure of exact
103
+ * safe criteria to get decent coverage without false matches;
104
+ * but for now let's assume there's no reason to use any
105
+ * such getter from CGLib.
106
+ * But let's try this approach...
107
+ */
108
+ if ("getCallbacks".equals(name)) {
109
+ if (isCglibGetCallbacks(am)) {
110
+ return null;
111
+ }
112
+ } else if ("getMetaClass".equals(name)) {
113
+ /* 30-Apr-2009, tatu: [JACKSON-103], need to suppress
114
+ * serialization of a cyclic (and useless) reference
115
+ */
116
+ if (isGroovyMetaClassGetter(am)) {
117
+ return null;
118
+ }
119
+ }
120
+ return manglePropertyName(name.substring(3));
121
+ }
122
+ return null;
123
+ }
124
+
125
+ public static String okNameForIsGetter(AnnotatedMethod am, String name)
126
+ {
127
+ if (name.startsWith("is")) {
128
+ // plus, must return boolean...
129
+ Class<?> rt = am.getRawType();
130
+ if (rt != Boolean.class && rt != Boolean.TYPE) {
131
+ return null;
132
+ }
133
+ return manglePropertyName(name.substring(2));
134
+ }
135
+ // no, not a match by name
136
+ return null;
137
+ }
138
+
139
+ public static String okNameForSetter(AnnotatedMethod am)
140
+ {
141
+ String name = am.getName();
142
+ if (name.startsWith("set")) {
143
+ name = manglePropertyName(name.substring(3));
144
+ if (name == null) { // plain old "set" is no good...
145
+ return null;
146
+ }
147
+ if ("metaClass".equals(name)) {
148
+ // 26-Nov-2009 [JACSON-103], need to suppress this internal groovy method
149
+ if (isGroovyMetaClassSetter(am)) {
150
+ return null;
151
+ }
152
+ }
153
+ return name;
154
+ }
155
+ return null;
156
+ }
157
+
158
+ /*
159
+ /**********************************************************
160
+ /* Helper methods for bean property name handling
161
+ /**********************************************************
162
+ */
163
+
164
+ /**
165
+ * This method was added to address [JACKSON-53]: need to weed out
166
+ * CGLib-injected "getCallbacks".
167
+ * At this point caller has detected a potential getter method
168
+ * with name "getCallbacks" and we need to determine if it is
169
+ * indeed injectect by Cglib. We do this by verifying that the
170
+ * result type is "net.sf.cglib.proxy.Callback[]"
171
+ *<p>
172
+ * Also, see [JACKSON-177]; Hibernate may repackage cglib
173
+ * it uses, so we better catch that too
174
+ */
175
+ protected static boolean isCglibGetCallbacks(AnnotatedMethod am)
176
+ {
177
+ Class<?> rt = am.getRawType();
178
+ // Ok, first: must return an array type
179
+ if (rt == null || !rt.isArray()) {
180
+ return false;
181
+ }
182
+ /* And that type needs to be "net.sf.cglib.proxy.Callback".
183
+ * Theoretically could just be a type that implements it, but
184
+ * for now let's keep things simple, fix if need be.
185
+ */
186
+ Class<?> compType = rt.getComponentType();
187
+ // Actually, let's just verify it's a "net.sf.cglib.*" class/interface
188
+ Package pkg = compType.getPackage();
189
+ if (pkg != null) {
190
+ String pname = pkg.getName();
191
+ if (pname.startsWith("net.sf.cglib")
192
+ // also, as per [JACKSON-177]
193
+ || pname.startsWith("org.hibernate.repackage.cglib")) {
194
+ return true;
195
+ }
196
+ }
197
+ return false;
198
+ }
199
+
200
+ /**
201
+ * Similar to {@link #isCglibGetCallbacks}, need to suppress
202
+ * a cyclic reference to resolve [JACKSON-103]
203
+ */
204
+ protected static boolean isGroovyMetaClassSetter(AnnotatedMethod am)
205
+ {
206
+ Class<?> argType = am.getParameterClass(0);
207
+ Package pkg = argType.getPackage();
208
+ if (pkg != null && pkg.getName().startsWith("groovy.lang")) {
209
+ return true;
210
+ }
211
+ return false;
212
+ }
213
+
214
+ /**
215
+ * Another helper method to deal with rest of [JACKSON-103]
216
+ */
217
+ protected static boolean isGroovyMetaClassGetter(AnnotatedMethod am)
218
+ {
219
+ Class<?> rt = am.getRawType();
220
+ if (rt == null || rt.isArray()) {
221
+ return false;
222
+ }
223
+ Package pkg = rt.getPackage();
224
+ if (pkg != null && pkg.getName().startsWith("groovy.lang")) {
225
+ return true;
226
+ }
227
+ return false;
228
+ }
229
+
230
+ /**
231
+ * Method called to figure out name of the property, given
232
+ * corresponding suggested name based on a method or field name.
233
+ *
234
+ * @param basename Name of accessor/mutator method, not including prefix
235
+ * ("get"/"is"/"set")
236
+ */
237
+ protected static String manglePropertyName(String basename)
238
+ {
239
+ int len = basename.length();
240
+
241
+ // First things first: empty basename is no good
242
+ if (len == 0) {
243
+ return null;
244
+ }
245
+ // otherwise, lower case initial chars
246
+ StringBuilder sb = null;
247
+ for (int i = 0; i < len; ++i) {
248
+ char upper = basename.charAt(i);
249
+ char lower = Character.toLowerCase(upper);
250
+ if (upper == lower) {
251
+ break;
252
+ }
253
+ if (sb == null) {
254
+ sb = new StringBuilder(basename);
255
+ }
256
+ sb.setCharAt(i, lower);
257
+ }
258
+ return (sb == null) ? basename : sb.toString();
259
+ }
260
+ }
@@ -0,0 +1,645 @@
1
+ package sh.calaba.org.codehaus.jackson.map.util;
2
+
3
+ import java.lang.reflect.*;
4
+ import java.util.*;
5
+
6
+ public final class ClassUtil
7
+ {
8
+ /*
9
+ /**********************************************************
10
+ /* Methods that deal with inheritance
11
+ /**********************************************************
12
+ */
13
+
14
+ /**
15
+ * Method that will find all sub-classes and implemented interfaces
16
+ * of a given class or interface. Classes are listed in order of
17
+ * precedence, starting with the immediate super-class, followed by
18
+ * interfaces class directly declares to implemented, and then recursively
19
+ * followed by parent of super-class and so forth.
20
+ * Note that <code>Object.class</code> is not included in the list
21
+ * regardless of whether <code>endBefore</code> argument is defined or not.
22
+ *
23
+ * @param endBefore Super-type to NOT include in results, if any; when
24
+ * encountered, will be ignored (and no super types are checked).
25
+ */
26
+ public static List<Class<?>> findSuperTypes(Class<?> cls, Class<?> endBefore)
27
+ {
28
+ return findSuperTypes(cls, endBefore, new ArrayList<Class<?>>(8));
29
+ }
30
+
31
+ public static List<Class<?>> findSuperTypes(Class<?> cls, Class<?> endBefore, List<Class<?>> result)
32
+ {
33
+ _addSuperTypes(cls, endBefore, result, false);
34
+ return result;
35
+ }
36
+
37
+ private static void _addSuperTypes(Class<?> cls, Class<?> endBefore, Collection<Class<?>> result, boolean addClassItself)
38
+ {
39
+ if (cls == endBefore || cls == null || cls == Object.class) {
40
+ return;
41
+ }
42
+ if (addClassItself) {
43
+ if (result.contains(cls)) { // already added, no need to check supers
44
+ return;
45
+ }
46
+ result.add(cls);
47
+ }
48
+ for (Class<?> intCls : cls.getInterfaces()) {
49
+ _addSuperTypes(intCls, endBefore, result, true);
50
+ }
51
+ _addSuperTypes(cls.getSuperclass(), endBefore, result, true);
52
+ }
53
+
54
+ /*
55
+ /**********************************************************
56
+ /* Class type detection methods
57
+ /**********************************************************
58
+ */
59
+
60
+ /**
61
+ * @return Null if class might be a bean; type String (that identifies
62
+ * why it's not a bean) if not
63
+ */
64
+ public static String canBeABeanType(Class<?> type)
65
+ {
66
+ // First: language constructs that ain't beans:
67
+ if (type.isAnnotation()) {
68
+ return "annotation";
69
+ }
70
+ if (type.isArray()) {
71
+ return "array";
72
+ }
73
+ if (type.isEnum()) {
74
+ return "enum";
75
+ }
76
+ if (type.isPrimitive()) {
77
+ return "primitive";
78
+ }
79
+
80
+ // Anything else? Seems valid, then
81
+ return null;
82
+ }
83
+
84
+ /**
85
+ * @deprecated since 1.9, use variant that takes second argument
86
+ */
87
+ @Deprecated
88
+ public static String isLocalType(Class<?> type) {
89
+ return isLocalType(type, false);
90
+ }
91
+
92
+ /**
93
+ * @since 1.9
94
+ */
95
+ public static String isLocalType(Class<?> type, boolean allowNonStatic)
96
+ {
97
+ /* As per [JACKSON-187], GAE seems to throw SecurityExceptions
98
+ * here and there... and GAE itself has a bug, too
99
+ * (see []). Bah. So we need to catch some wayward exceptions on GAE
100
+ */
101
+ try {
102
+ // one more: method locals, anonymous, are not good:
103
+ if (type.getEnclosingMethod() != null) {
104
+ return "local/anonymous";
105
+ }
106
+
107
+ /* But how about non-static inner classes? Can't construct
108
+ * easily (theoretically, we could try to check if parent
109
+ * happens to be enclosing... but that gets convoluted)
110
+ */
111
+ if (!allowNonStatic) {
112
+ if (type.getEnclosingClass() != null) {
113
+ if (!Modifier.isStatic(type.getModifiers())) {
114
+ return "non-static member class";
115
+ }
116
+ }
117
+ }
118
+ }
119
+ catch (SecurityException e) { }
120
+ catch (NullPointerException e) { }
121
+ return null;
122
+ }
123
+
124
+ /**
125
+ * Method for finding enclosing class for non-static inner classes
126
+ *
127
+ * @since 1.9
128
+ */
129
+ public static Class<?> getOuterClass(Class<?> type)
130
+ {
131
+ // as above, GAE has some issues...
132
+ try {
133
+ // one more: method locals, anonymous, are not good:
134
+ if (type.getEnclosingMethod() != null) {
135
+ return null;
136
+ }
137
+ if (!Modifier.isStatic(type.getModifiers())) {
138
+ return type.getEnclosingClass();
139
+ }
140
+ } catch (SecurityException e) { }
141
+ catch (NullPointerException e) { }
142
+ return null;
143
+ }
144
+
145
+
146
+ /**
147
+ * Helper method used to weed out dynamic Proxy types; types that do
148
+ * not expose concrete method API that we could use to figure out
149
+ * automatic Bean (property) based serialization.
150
+ */
151
+ public static boolean isProxyType(Class<?> type)
152
+ {
153
+ // Then: well-known proxy (etc) classes
154
+ if (Proxy.isProxyClass(type)) {
155
+ return true;
156
+ }
157
+ String name = type.getName();
158
+ // Hibernate uses proxies heavily as well:
159
+ if (name.startsWith("net.sf.cglib.proxy.")
160
+ || name.startsWith("org.hibernate.proxy.")) {
161
+ return true;
162
+ }
163
+ // Not one of known proxies, nope:
164
+ return false;
165
+ }
166
+
167
+ /**
168
+ * Helper method that checks if given class is a concrete one;
169
+ * that is, not an interface or abstract class.
170
+ */
171
+ public static boolean isConcrete(Class<?> type)
172
+ {
173
+ int mod = type.getModifiers();
174
+ return (mod & (Modifier.INTERFACE | Modifier.ABSTRACT)) == 0;
175
+ }
176
+
177
+ /**
178
+ * @since 1.6
179
+ */
180
+ public static boolean isConcrete(Member member)
181
+ {
182
+ int mod = member.getModifiers();
183
+ return (mod & (Modifier.INTERFACE | Modifier.ABSTRACT)) == 0;
184
+ }
185
+
186
+ public static boolean isCollectionMapOrArray(Class<?> type)
187
+ {
188
+ if (type.isArray()) return true;
189
+ if (Collection.class.isAssignableFrom(type)) return true;
190
+ if (Map.class.isAssignableFrom(type)) return true;
191
+ return false;
192
+ }
193
+
194
+ /*
195
+ /**********************************************************
196
+ /* Type name handling methods
197
+ /**********************************************************
198
+ */
199
+
200
+ /**
201
+ * Helper method used to construct appropriate description
202
+ * when passed either type (Class) or an instance; in latter
203
+ * case, class of instance is to be used.
204
+ */
205
+ public static String getClassDescription(Object classOrInstance)
206
+ {
207
+ if (classOrInstance == null) {
208
+ return "unknown";
209
+ }
210
+ Class<?> cls = (classOrInstance instanceof Class<?>) ?
211
+ (Class<?>) classOrInstance : classOrInstance.getClass();
212
+ return cls.getName();
213
+ }
214
+
215
+ /*
216
+ /**********************************************************
217
+ /* Method type detection methods
218
+ /**********************************************************
219
+ */
220
+
221
+ public static boolean hasGetterSignature(Method m)
222
+ {
223
+ // First: static methods can't be getters
224
+ if (Modifier.isStatic(m.getModifiers())) {
225
+ return false;
226
+ }
227
+ // Must take no args
228
+ Class<?>[] pts = m.getParameterTypes();
229
+ if (pts != null && pts.length != 0) {
230
+ return false;
231
+ }
232
+ // Can't be a void method
233
+ if (Void.TYPE == m.getReturnType()) {
234
+ return false;
235
+ }
236
+ // Otherwise looks ok:
237
+ return true;
238
+ }
239
+
240
+ /*
241
+ /**********************************************************
242
+ /* Exception handling
243
+ /**********************************************************
244
+ */
245
+
246
+ /**
247
+ * Method that can be used to find the "root cause", innermost
248
+ * of chained (wrapped) exceptions.
249
+ */
250
+ public static Throwable getRootCause(Throwable t)
251
+ {
252
+ while (t.getCause() != null) {
253
+ t = t.getCause();
254
+ }
255
+ return t;
256
+ }
257
+
258
+ /**
259
+ * Method that will unwrap root causes of given Throwable, and throw
260
+ * the innermost {@link Exception} or {@link Error} as is.
261
+ * This is useful in cases where mandatory wrapping is added, which
262
+ * is often done by Reflection API.
263
+ *
264
+ * @since 1.7
265
+ */
266
+ public static void throwRootCause(Throwable t) throws Exception
267
+ {
268
+ t = getRootCause(t);
269
+ if (t instanceof Exception) {
270
+ throw (Exception) t;
271
+ }
272
+ throw (Error) t;
273
+ }
274
+
275
+ /**
276
+ * Method that will wrap 't' as an {@link IllegalArgumentException} if it
277
+ * is a checked exception; otherwise (runtime exception or error) throw as is
278
+ */
279
+ public static void throwAsIAE(Throwable t)
280
+ {
281
+ throwAsIAE(t, t.getMessage());
282
+ }
283
+
284
+ /**
285
+ * Method that will wrap 't' as an {@link IllegalArgumentException} (and with
286
+ * specified message) if it
287
+ * is a checked exception; otherwise (runtime exception or error) throw as is
288
+ */
289
+ public static void throwAsIAE(Throwable t, String msg)
290
+ {
291
+ if (t instanceof RuntimeException) {
292
+ throw (RuntimeException) t;
293
+ }
294
+ if (t instanceof Error) {
295
+ throw (Error) t;
296
+ }
297
+ throw new IllegalArgumentException(msg, t);
298
+ }
299
+
300
+ /**
301
+ * Method that will locate the innermost exception for given Throwable;
302
+ * and then wrap it as an {@link IllegalArgumentException} if it
303
+ * is a checked exception; otherwise (runtime exception or error) throw as is
304
+ */
305
+ public static void unwrapAndThrowAsIAE(Throwable t)
306
+ {
307
+ throwAsIAE(getRootCause(t));
308
+ }
309
+
310
+ /**
311
+ * Method that will locate the innermost exception for given Throwable;
312
+ * and then wrap it as an {@link IllegalArgumentException} if it
313
+ * is a checked exception; otherwise (runtime exception or error) throw as is
314
+ */
315
+ public static void unwrapAndThrowAsIAE(Throwable t, String msg)
316
+ {
317
+ throwAsIAE(getRootCause(t), msg);
318
+ }
319
+
320
+ /*
321
+ /**********************************************************
322
+ /* Instantiation
323
+ /**********************************************************
324
+ */
325
+
326
+ /**
327
+ * Method that can be called to try to create an instantiate of
328
+ * specified type. Instantiation is done using default no-argument
329
+ * constructor.
330
+ *
331
+ * @param canFixAccess Whether it is possible to try to change access
332
+ * rights of the default constructor (in case it is not publicly
333
+ * accessible) or not.
334
+ *
335
+ * @throws IllegalArgumentException If instantiation fails for any reason;
336
+ * except for cases where constructor throws an unchecked exception
337
+ * (which will be passed as is)
338
+ */
339
+ public static <T> T createInstance(Class<T> cls, boolean canFixAccess)
340
+ throws IllegalArgumentException
341
+ {
342
+ Constructor<T> ctor = findConstructor(cls, canFixAccess);
343
+ if (ctor == null) {
344
+ throw new IllegalArgumentException("Class "+cls.getName()+" has no default (no arg) constructor");
345
+ }
346
+ try {
347
+ return ctor.newInstance();
348
+ } catch (Exception e) {
349
+ ClassUtil.unwrapAndThrowAsIAE(e, "Failed to instantiate class "+cls.getName()+", problem: "+e.getMessage());
350
+ return null;
351
+ }
352
+ }
353
+
354
+ public static <T> Constructor<T> findConstructor(Class<T> cls, boolean canFixAccess)
355
+ throws IllegalArgumentException
356
+ {
357
+ try {
358
+ Constructor<T> ctor = cls.getDeclaredConstructor();
359
+ if (canFixAccess) {
360
+ checkAndFixAccess(ctor);
361
+ } else {
362
+ // Has to be public...
363
+ if (!Modifier.isPublic(ctor.getModifiers())) {
364
+ throw new IllegalArgumentException("Default constructor for "+cls.getName()+" is not accessible (non-public?): not allowed to try modify access via Reflection: can not instantiate type");
365
+ }
366
+ }
367
+ return ctor;
368
+ } catch (NoSuchMethodException e) {
369
+ ;
370
+ } catch (Exception e) {
371
+ ClassUtil.unwrapAndThrowAsIAE(e, "Failed to find default constructor of class "+cls.getName()+", problem: "+e.getMessage());
372
+ }
373
+ return null;
374
+ }
375
+
376
+ /*
377
+ /**********************************************************
378
+ /* Primitive type support
379
+ /**********************************************************
380
+ */
381
+
382
+ /**
383
+ * Helper method used to get default value for wrappers used for primitive types
384
+ * (0 for Integer etc)
385
+ *
386
+ * @since 1.6.1
387
+ */
388
+ public static Object defaultValue(Class<?> cls)
389
+ {
390
+ if (cls == Integer.TYPE) {
391
+ return Integer.valueOf(0);
392
+ }
393
+ if (cls == Long.TYPE) {
394
+ return Long.valueOf(0L);
395
+ }
396
+ if (cls == Boolean.TYPE) {
397
+ return Boolean.FALSE;
398
+ }
399
+ if (cls == Double.TYPE) {
400
+ return Double.valueOf(0.0);
401
+ }
402
+ if (cls == Float.TYPE) {
403
+ return Float.valueOf(0.0f);
404
+ }
405
+ if (cls == Byte.TYPE) {
406
+ return Byte.valueOf((byte) 0);
407
+ }
408
+ if (cls == Short.TYPE) {
409
+ return Short.valueOf((short) 0);
410
+ }
411
+ if (cls == Character.TYPE) {
412
+ return '\0';
413
+ }
414
+ throw new IllegalArgumentException("Class "+cls.getName()+" is not a primitive type");
415
+ }
416
+
417
+ /**
418
+ * Helper method for finding wrapper type for given primitive type (why isn't
419
+ * there one in JDK?)
420
+ *
421
+ * @since 1.7.1
422
+ */
423
+ public static Class<?> wrapperType(Class<?> primitiveType)
424
+ {
425
+ if (primitiveType == Integer.TYPE) {
426
+ return Integer.class;
427
+ }
428
+ if (primitiveType == Long.TYPE) {
429
+ return Long.class;
430
+ }
431
+ if (primitiveType == Boolean.TYPE) {
432
+ return Boolean.class;
433
+ }
434
+ if (primitiveType == Double.TYPE) {
435
+ return Double.class;
436
+ }
437
+ if (primitiveType == Float.TYPE) {
438
+ return Float.class;
439
+ }
440
+ if (primitiveType == Byte.TYPE) {
441
+ return Byte.class;
442
+ }
443
+ if (primitiveType == Short.TYPE) {
444
+ return Short.class;
445
+ }
446
+ if (primitiveType == Character.TYPE) {
447
+ return Character.class;
448
+ }
449
+ throw new IllegalArgumentException("Class "+primitiveType.getName()+" is not a primitive type");
450
+ }
451
+
452
+ /*
453
+ /**********************************************************
454
+ /* Access checking/handling methods
455
+ /**********************************************************
456
+ */
457
+
458
+ /**
459
+ * Method called to check if we can use the passed method or constructor
460
+ * (wrt access restriction -- public methods can be called, others
461
+ * usually not); and if not, if there is a work-around for
462
+ * the problem.
463
+ */
464
+ public static void checkAndFixAccess(Member member)
465
+ {
466
+ // We know all members are also accessible objects...
467
+ AccessibleObject ao = (AccessibleObject) member;
468
+
469
+ /* 14-Jan-2009, tatu: It seems safe and potentially beneficial to
470
+ * always to make it accessible (latter because it will force
471
+ * skipping checks we have no use for...), so let's always call it.
472
+ */
473
+ //if (!ao.isAccessible()) {
474
+ try {
475
+ ao.setAccessible(true);
476
+ } catch (SecurityException se) {
477
+ /* 17-Apr-2009, tatu: Related to [JACKSON-101]: this can fail on
478
+ * platforms like EJB and Google App Engine); so let's
479
+ * only fail if we really needed it...
480
+ */
481
+ if (!ao.isAccessible()) {
482
+ Class<?> declClass = member.getDeclaringClass();
483
+ throw new IllegalArgumentException("Can not access "+member+" (from class "+declClass.getName()+"; failed to set access: "+se.getMessage());
484
+ }
485
+ }
486
+ //}
487
+ }
488
+
489
+ /*
490
+ /**********************************************************
491
+ /* Enum type detection
492
+ /**********************************************************
493
+ */
494
+
495
+ /**
496
+ * Helper method that can be used to dynamically figure out
497
+ * enumeration type of given {@link EnumSet}, without having
498
+ * access to its declaration.
499
+ * Code is needed to work around design flaw in JDK.
500
+ *
501
+ * @since 1.5
502
+ */
503
+ public static Class<? extends Enum<?>> findEnumType(EnumSet<?> s)
504
+ {
505
+ // First things first: if not empty, easy to determine
506
+ if (!s.isEmpty()) {
507
+ return findEnumType(s.iterator().next());
508
+ }
509
+ // Otherwise need to locate using an internal field
510
+ return EnumTypeLocator.instance.enumTypeFor(s);
511
+ }
512
+
513
+ /**
514
+ * Helper method that can be used to dynamically figure out
515
+ * enumeration type of given {@link EnumSet}, without having
516
+ * access to its declaration.
517
+ * Code is needed to work around design flaw in JDK.
518
+ *
519
+ * @since 1.5
520
+ */
521
+ public static Class<? extends Enum<?>> findEnumType(EnumMap<?,?> m)
522
+ {
523
+ if (!m.isEmpty()) {
524
+ return findEnumType(m.keySet().iterator().next());
525
+ }
526
+ // Otherwise need to locate using an internal field
527
+ return EnumTypeLocator.instance.enumTypeFor(m);
528
+ }
529
+
530
+ /**
531
+ * Helper method that can be used to dynamically figure out formal
532
+ * enumeration type (class) for given enumeration. This is either
533
+ * class of enum instance (for "simple" enumerations), or its
534
+ * superclass (for enums with instance fields or methods)
535
+ */
536
+ @SuppressWarnings("unchecked")
537
+ public static Class<? extends Enum<?>> findEnumType(Enum<?> en)
538
+ {
539
+ // enums with "body" are sub-classes of the formal type
540
+ Class<?> ec = en.getClass();
541
+ if (ec.getSuperclass() != Enum.class) {
542
+ ec = ec.getSuperclass();
543
+ }
544
+ return (Class<? extends Enum<?>>) ec;
545
+ }
546
+
547
+ /**
548
+ * Helper method that can be used to dynamically figure out formal
549
+ * enumeration type (class) for given class of an enumeration value.
550
+ * This is either class of enum instance (for "simple" enumerations),
551
+ * or its superclass (for enums with instance fields or methods)
552
+ */
553
+ @SuppressWarnings("unchecked")
554
+ public static Class<? extends Enum<?>> findEnumType(Class<?> cls)
555
+ {
556
+ // enums with "body" are sub-classes of the formal type
557
+ if (cls.getSuperclass() != Enum.class) {
558
+ cls = cls.getSuperclass();
559
+ }
560
+ return (Class<? extends Enum<?>>) cls;
561
+ }
562
+
563
+ /*
564
+ /**********************************************************
565
+ /* Helper classes
566
+ /**********************************************************
567
+ */
568
+
569
+ /**
570
+ * Inner class used to contain gory details of how we can determine
571
+ * details of instances of common JDK types like {@link EnumMap}s.
572
+ */
573
+ private static class EnumTypeLocator
574
+ {
575
+ final static EnumTypeLocator instance = new EnumTypeLocator();
576
+
577
+ private final Field enumSetTypeField;
578
+ private final Field enumMapTypeField;
579
+
580
+ private EnumTypeLocator() {
581
+ /* JDK uses following fields to store information about actual Enumeration
582
+ * type for EnumSets, EnumMaps...
583
+ */
584
+ enumSetTypeField = locateField(EnumSet.class, "elementType", Class.class);
585
+ enumMapTypeField = locateField(EnumMap.class, "elementType", Class.class);
586
+ }
587
+
588
+ @SuppressWarnings("unchecked")
589
+ public Class<? extends Enum<?>> enumTypeFor(EnumSet<?> set)
590
+ {
591
+ if (enumSetTypeField != null) {
592
+ return (Class<? extends Enum<?>>) get(set, enumSetTypeField);
593
+ }
594
+ throw new IllegalStateException("Can not figure out type for EnumSet (odd JDK platform?)");
595
+ }
596
+
597
+ @SuppressWarnings("unchecked")
598
+ public Class<? extends Enum<?>> enumTypeFor(EnumMap<?,?> set)
599
+ {
600
+ if (enumMapTypeField != null) {
601
+ return (Class<? extends Enum<?>>) get(set, enumMapTypeField);
602
+ }
603
+ throw new IllegalStateException("Can not figure out type for EnumMap (odd JDK platform?)");
604
+
605
+ }
606
+
607
+ private Object get(Object bean, Field field)
608
+ {
609
+ try {
610
+ return field.get(bean);
611
+ } catch (Exception e) {
612
+ throw new IllegalArgumentException(e);
613
+ }
614
+ }
615
+
616
+ private static Field locateField(Class<?> fromClass, String expectedName, Class<?> type)
617
+ {
618
+ Field found = null;
619
+ // First: let's see if we can find exact match:
620
+ Field[] fields = fromClass.getDeclaredFields();
621
+ for (Field f : fields) {
622
+ if (expectedName.equals(f.getName()) && f.getType() == type) {
623
+ found = f;
624
+ break;
625
+ }
626
+ }
627
+ // And if not, if there is just one field with the type, that field
628
+ if (found == null) {
629
+ for (Field f : fields) {
630
+ if (f.getType() == type) {
631
+ // If more than one, can't choose
632
+ if (found != null) return null;
633
+ found = f;
634
+ }
635
+ }
636
+ }
637
+ if (found != null) { // it's non-public, need to force accessible
638
+ try {
639
+ found.setAccessible(true);
640
+ } catch (Throwable t) { }
641
+ }
642
+ return found;
643
+ }
644
+ }
645
+ }