gitextract_qrfoz67k/ ├── .idea/ │ └── vcs.xml ├── LICENSE ├── README.md ├── alltests.groovy ├── listings/ │ ├── allsources.txt │ ├── appD/ │ │ ├── Listing_D_01_GStrings.groovy │ │ ├── Listing_D_02_Lists.groovy │ │ ├── Listing_D_03_Closures.groovy │ │ ├── Listing_D_04_Regex.groovy │ │ └── Listing_D_05_GPath.groovy │ ├── chap01/ │ │ ├── Listing_01_01_Gold.groovy │ │ ├── customers.xml │ │ ├── data.txt │ │ ├── groovysh.txt │ │ ├── snippet0101_customers.groovy │ │ ├── snippet0101_fileLineNumbers.groovy │ │ ├── snippet0101_newDates.txt │ │ ├── snippet0101_printPackageNames.groovy │ │ ├── snippet0101_printPackageNamesGpath.groovy │ │ ├── snippet0102_printGroovyWebSiteCount.groovy │ │ └── snippet0103_googleIpAdr.groovy │ ├── chap02/ │ │ ├── Book.groovy │ │ ├── Listing_02_01_Assertions.groovy │ │ ├── Listing_02_02_Book.txt │ │ ├── Listing_02_03_BookScript.groovy │ │ ├── Listing_02_04_BookBean.groovy │ │ ├── Listing_02_05_ImmutableBook.groovy │ │ ├── Listing_02_06_Grab.groovy │ │ ├── Listing_02_07_Clinks.groovy │ │ ├── Listing_02_08_ControlStructures.groovy │ │ ├── snippet0201_comments.groovy │ │ ├── snippet0202_failing_assert.groovy │ │ ├── snippet0202_failing_assertion_error.txt │ │ ├── snippet0203_clinks_java.groovy │ │ ├── snippet0203_gstring.groovy │ │ ├── snippet0203_int_usage.groovy │ │ ├── snippet0203_map_usage.groovy │ │ ├── snippet0203_range_usage.groovy │ │ ├── snippet0203_roman.groovy │ │ ├── snippet0204_evaluate_jdk7_only.groovy │ │ ├── snippet0204_evaluate_jdk8_only.groovy │ │ └── snippet0204_failing_typechecked.groovy │ ├── chap03/ │ │ ├── ArrayListSummer.java │ │ ├── Listing_03_01_PrimitiveMethodsObjectOperators.groovy │ │ ├── Listing_03_02_ListMapCast.groovy │ │ ├── Listing_03_03_DefiningOperators.groovy │ │ ├── Listing_03_04_DefiningGStrings.groovy │ │ ├── Listing_03_05_StringOperations.groovy │ │ ├── Listing_03_06_RegexGStrings.groovy │ │ ├── Listing_03_07_RegularExpressions.groovy │ │ ├── Listing_03_08_EachMatch.groovy │ │ ├── Listing_03_09_PatternReuse.groovy │ │ ├── Listing_03_10_PatternsClassification.groovy │ │ ├── Listing_03_11_NumberMethodsGDK.groovy │ │ ├── extra_escaped_characters_table36.groovy │ │ ├── extra_method_operators_table34.groovy │ │ ├── extra_numeric_literals_table32.groovy │ │ ├── extra_numerical_coercion_table310.groovy │ │ ├── extra_optional_typing_table33.groovy │ │ ├── extra_primitive_values_table31.groovy │ │ ├── regex_dgm.txt │ │ ├── snippet0301_autoboxing.groovy │ │ ├── snippet0304_GString_internals.groovy │ │ ├── snippet0304_stringbuffer.groovy │ │ ├── snippet0305_matcher_each_group.groovy │ │ ├── snippet0305_matcher_groups.groovy │ │ ├── snippet0305_matcher_parallel_assignment.groovy │ │ ├── snippet0305_matcher_plain.groovy │ │ └── snippet0306_GDK_methods_for_numbers.groovy │ ├── chap04/ │ │ ├── Listing_04_01_range_declarations.groovy │ │ ├── Listing_04_02_ranges_are_objects.groovy │ │ ├── Listing_04_03_custom_ranges.groovy │ │ ├── Listing_04_04_list_declarations.groovy │ │ ├── Listing_04_05_list_subscript_operator.groovy │ │ ├── Listing_04_06_list_add_remove.groovy │ │ ├── Listing_04_07_lists_control_structures.groovy │ │ ├── Listing_04_08_list_content_manipulation.groovy │ │ ├── Listing_04_09_list_other_methods.groovy │ │ ├── Listing_04_10_list_quicksort.groovy │ │ ├── Listing_04_11_list_mapreduce.groovy │ │ ├── Listing_04_12_map_declarations.groovy │ │ ├── Listing_04_13_map_accessors.groovy │ │ ├── Listing_04_14_map_query_methods.groovy │ │ ├── Listing_04_15_map_iteration.groovy │ │ ├── Listing_04_16_map_content.groovy │ │ ├── Listing_04_17_map_example.groovy │ │ ├── extra_EnumRange.groovy │ │ ├── extra_ListCast.groovy │ │ ├── extra_ListTable.groovy │ │ ├── extra_Map_as.groovy │ │ ├── extra_Map_group.groovy │ │ ├── extra_MaxMinSum.groovy │ │ ├── extra_SplitList.groovy │ │ ├── snippet0402_ListAsSet.groovy │ │ ├── snippet0402_ListRemoveNulls.groovy │ │ ├── snippet0402_ListStreams_jdk8_plus.groovy │ │ ├── snippet0403_Map_Ctor_Expression.groovy │ │ ├── snippet0403_Map_Ctor_Unquoted.groovy │ │ ├── snippet0403_Map_MapReduce.groovy │ │ └── snippet0403_Map_String_accessors.groovy │ ├── chap05/ │ │ ├── Listing_05_01_closure_simple_declaration.groovy │ │ ├── Listing_05_02_simple_method_closure.groovy │ │ ├── Listing_05_03_multi_method_closure.groovy │ │ ├── Listing_05_04_closure_all_declarations.groovy │ │ ├── Listing_05_05_simple_closure_calling.groovy │ │ ├── Listing_05_06_calling_closures.groovy │ │ ├── Listing_05_07_simple_currying.groovy │ │ ├── Listing_05_08_logging_curry_example.groovy │ │ ├── Listing_05_09_closure_scope.groovy │ │ ├── Listing_05_10_closure_accumulator.groovy │ │ ├── Listing_05_11_visitor_pattern.groovy │ │ ├── extra_ClosureProperty.groovy │ │ ├── extra_Closure_delegate.groovy │ │ ├── extra_Closure_myWith.groovy │ │ ├── snippet0501_envelope.groovy.txt │ │ ├── snippet0504_closure_default_params.groovy │ │ ├── snippet0504_closure_isCase.groovy │ │ ├── snippet0504_closure_paramcount.groovy │ │ ├── snippet0505_map_with.groovy │ │ ├── snippet0505_scoping.groovy │ │ ├── snippet0506_closure_return.groovy │ │ ├── snippet0507_closure_composition.groovy │ │ ├── snippet0508_memoize.groovy │ │ └── snippet0509_trampoline.groovy │ ├── chap06/ │ │ ├── Listing_06_01_groovy_truth.groovy │ │ ├── Listing_06_02_assignment_bug.groovy │ │ ├── Listing_06_03_if_then_else.groovy │ │ ├── Listing_06_04_conditional_operator.groovy │ │ ├── Listing_06_05_switch_basic.groovy │ │ ├── Listing_06_06_switch_advanced.groovy │ │ ├── Listing_06_07_assert_host.groovy │ │ ├── Listing_06_08_while.groovy │ │ ├── Listing_06_09_for.groovy │ │ ├── Listing_06_10_break_continue.groovy │ │ ├── Listing_06_11_exception_example.groovy │ │ ├── extra_if_return.groovy │ │ ├── extra_in_operator.groovy │ │ ├── extra_switch_return.groovy │ │ ├── myFileName.txt │ │ ├── snippet0602_bad_file_read.groovy │ │ ├── snippet0602_bad_file_read_with_message.groovy │ │ ├── snippet0602_failing_assert.groovy │ │ ├── snippet0603_each_loop_iterate.groovy │ │ ├── snippet0603_file_iterate_lines.groovy │ │ ├── snippet0603_for_loop_iterate.groovy │ │ ├── snippet0603_null_iterate.groovy │ │ ├── snippet0603_object_iterate.groovy │ │ ├── snippet0603_regex_iterate_match.groovy │ │ └── snippet0604_multicatch.groovy │ ├── chap07/ │ │ ├── Listing_07_01_Declaring_Variables.groovy │ │ ├── Listing_07_02_TypeBreaking_Assignment.groovy │ │ ├── Listing_07_03_Referencing_Fields.groovy │ │ ├── Listing_07_04_Overriding_Field_Access.groovy │ │ ├── Listing_07_05_Declaring_Methods.groovy │ │ ├── Listing_07_06_Declaring_Parameters.groovy │ │ ├── Listing_07_07_Parameter_Usages.groovy │ │ ├── Listing_07_08_Safe_Dereferencing.groovy │ │ ├── Listing_07_09_Instantiation.groovy │ │ ├── Listing_07_10_Instantiation_Named.groovy │ │ ├── Listing_07_11_Classes.groovy │ │ ├── Listing_07_13_Import.groovy │ │ ├── Listing_07_14_Import_As_BugFix.groovy │ │ ├── Listing_07_15_Import_As_NameClash.groovy │ │ ├── Listing_07_16_Multimethods.groovy │ │ ├── Listing_07_17_MultiEquals.groovy │ │ ├── Listing_07_18_Traits.groovy │ │ ├── Listing_07_19_Declaring_Beans.groovy │ │ ├── Listing_07_20_Calling_Beans.groovy │ │ ├── Listing_07_21_Calling_Beans_Advanced.groovy │ │ ├── Listing_07_22_Property_Methods.groovy │ │ ├── Listing_07_23_Expando.groovy │ │ ├── Listing_07_24_GPath.groovy │ │ ├── business/ │ │ │ └── Vendor.groovy │ │ ├── snippet0703_Implicit_Closure_To_SAM.groovy │ │ ├── snippet0705_Spread_List.groovy │ │ ├── snippet0705_Spread_Map.groovy │ │ ├── snippet0705_Spread_Range.groovy │ │ ├── thirdparty/ │ │ │ └── MathLib.groovy │ │ └── thirdparty2/ │ │ └── MathLib.groovy │ ├── chap08/ │ │ ├── Listing_08_01_method_missing.groovy │ │ ├── Listing_08_02_mini_gorm.groovy │ │ ├── Listing_08_03_property_missing.groovy │ │ ├── Listing_08_04_bin_property.groovy │ │ ├── Listing_08_05_closure_dynamic.groovy │ │ ├── Listing_08_06_property_method.groovy │ │ ├── Listing_08_07_MetaClass_jdk7_only.groovy │ │ ├── Listing_08_07_MetaClass_jdk8_plus.groovy │ │ ├── Listing_08_08_ProxyMetaClass.groovy │ │ ├── Listing_08_09_Expando.groovy │ │ ├── Listing_08_10_EMC.groovy │ │ ├── Listing_08_11_EMC_Groovy_Class.groovy │ │ ├── Listing_08_12_EMC_Groovy_Object.groovy │ │ ├── Listing_08_13_EMC_Java_Object.groovy │ │ ├── Listing_08_14_EMC_Builder.groovy │ │ ├── Listing_08_15_EMC_static.groovy │ │ ├── Listing_08_16_EMC_super.groovy │ │ ├── Listing_08_17_EMC_hooks.groovy │ │ ├── Listing_08_18_Existing_Categories.groovy │ │ ├── Listing_08_19_Marshal.groovy │ │ ├── Listing_08_20_MarshalCategory.groovy │ │ ├── Listing_08_21_Test_Mixin.groovy │ │ ├── Listing_08_22_Sieve_Mixin.groovy │ │ ├── Listing_08_23_Millimeter.groovy │ │ ├── Listing_08_24_create_factory.groovy │ │ ├── Listing_08_25_fake_assign.groovy │ │ ├── Listing_08_26_restore_emc.groovy │ │ ├── Listing_08_27_intercept_cache_invoke.groovy │ │ ├── custom/ │ │ │ ├── Custom.groovy │ │ │ └── useCustom.groovy │ │ ├── failing_Listing_08_15_EMC_static.groovy │ │ ├── failing_Listing_08_16_EMC_super.groovy │ │ ├── groovy/ │ │ │ └── runtime/ │ │ │ └── metaclass/ │ │ │ └── custom/ │ │ │ └── CustomMetaClass.groovy │ │ └── markup.html │ ├── chap09/ │ │ ├── .gradle/ │ │ │ └── 2.2.1/ │ │ │ └── taskArtifacts/ │ │ │ └── cache.properties │ │ ├── Listing_09_01_ToStringDetective.groovy │ │ ├── Listing_09_02_ToStringSleuth.groovy │ │ ├── Listing_09_03_EqualsAndHashCode.groovy │ │ ├── Listing_09_04_TupleConstructor.groovy │ │ ├── Listing_09_05_Lazy.groovy │ │ ├── Listing_09_06_IndexedProperty.groovy │ │ ├── Listing_09_07_InheritConstructors.groovy │ │ ├── Listing_09_08_Sortable.groovy │ │ ├── Listing_09_09_Builder.groovy │ │ ├── Listing_09_10_Canonical.groovy │ │ ├── Listing_09_11_Immutable.groovy │ │ ├── Listing_09_12_Delegate.groovy │ │ ├── Listing_09_13_Singleton.groovy │ │ ├── Listing_09_14_Memoized.groovy │ │ ├── Listing_09_15_TailRecursive.groovy │ │ ├── Listing_09_16_Log.groovy │ │ ├── Listing_09_17_Synchronized.groovy │ │ ├── Listing_09_18_SynchronizedCustomLock.groovy │ │ ├── Listing_09_19_ReadWriteLock.groovy │ │ ├── Listing_09_20_AutoClone.groovy │ │ ├── Listing_09_21_AutoCloneCopyConstructor.groovy │ │ ├── Listing_09_22_AutoExternalize.groovy │ │ ├── Listing_09_23_TimedInterrupt.groovy │ │ ├── Listing_09_24_ThreadInterrupt.groovy │ │ ├── Listing_09_25_ConditionalInterrupt.groovy │ │ ├── Listing_09_26_Field.groovy │ │ ├── Listing_09_27_BaseScript.groovy │ │ ├── Listing_09_28_AstByHand.groovy │ │ ├── Listing_09_29_AstByHandWithUtils.groovy │ │ ├── Listing_09_30_AstBuildFromSpec.groovy │ │ ├── Listing_09_31_AstBuildFromString.groovy │ │ ├── Listing_09_32_AstBuildFromStringMixed.groovy │ │ ├── Listing_09_33_AstBuildFromCode.groovy │ │ ├── Listing_09_34_GreeterMainTransform.groovy │ │ ├── Listing_09_35_GreeterMainTransform2.groovy │ │ ├── Listing_09_38_AstTesting1.groovy │ │ ├── Listing_09_39_AstTesting2.groovy │ │ ├── Listing_09_40_AstTesting3.groovy │ │ ├── Listing_09_41_AstTesting4.groovy │ │ ├── Listing_09_42_AstTesting5.groovy │ │ ├── Listings.txt │ │ ├── build/ │ │ │ ├── reports/ │ │ │ │ └── tests/ │ │ │ │ ├── classes/ │ │ │ │ │ └── regina.CompiledAtASTTransformationTest.html │ │ │ │ ├── css/ │ │ │ │ │ ├── base-style.css │ │ │ │ │ └── style.css │ │ │ │ ├── index.html │ │ │ │ ├── js/ │ │ │ │ │ └── report.js │ │ │ │ └── packages/ │ │ │ │ └── regina.html │ │ │ ├── resources/ │ │ │ │ └── main/ │ │ │ │ └── META-INF/ │ │ │ │ └── services/ │ │ │ │ └── org.codehaus.groovy.transform.ASTTransformation │ │ │ └── test-results/ │ │ │ ├── TEST-regina.CompiledAtASTTransformationTest.xml │ │ │ └── binary/ │ │ │ └── test/ │ │ │ └── output.bin.idx │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── settings.gradle │ │ ├── snippet0902_autoCloneDefault.txt │ │ ├── snippet0902_autoCloneSerialization.txt │ │ ├── snippet0902_autoExternalize.txt │ │ ├── snippet0902_fieldEquivalent.txt │ │ ├── snippet0902_mapCreation.txt │ │ ├── snippet0902_noisySetDelegateByHand.txt │ │ ├── snippet0902_noisySetInheritance.txt │ │ ├── snippet0902_nonTailCallReverseList.txt │ │ ├── snippet0902_readWriteByHand.txt │ │ ├── snippet0902_readWriteLock.txt │ │ ├── snippet0902_singletonByHand.txt │ │ ├── snippet0902_toStringEquivalent.txt │ │ ├── snippet0903_greeterExpanded.txt │ │ ├── snippet0903_greeterScript.txt │ │ ├── snippet0903_localMain.txt │ │ ├── snippet0903_localMainTransformation.txt │ │ ├── snippet0905_GetCompiledTimeScript.txt │ │ └── src/ │ │ ├── main/ │ │ │ ├── groovy/ │ │ │ │ └── regina/ │ │ │ │ └── CompiledAtASTTransformation.groovy │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── services/ │ │ │ └── org.codehaus.groovy.transform.ASTTransformation │ │ └── test/ │ │ └── groovy/ │ │ └── regina/ │ │ └── CompiledAtASTTransformationTest.groovy │ ├── chap10/ │ │ ├── Greeter.java │ │ ├── Listing_10_01_Duck.groovy │ │ ├── Listing_10_02_failing_Typo.groovy │ │ ├── Listing_10_03_ClassTC.groovy │ │ ├── Listing_10_04_OneMethodTC.groovy │ │ ├── Listing_10_05_CompileTimeTypo.groovy │ │ ├── Listing_10_06_MethodNameTypo.groovy │ │ ├── Listing_10_07_MethodArgsFlipped.groovy │ │ ├── Listing_10_08_InvalidAssignments.groovy │ │ ├── Listing_10_09_AssignmentsWithCoercion.groovy │ │ ├── Listing_10_10_DefField.groovy │ │ ├── Listing_10_11_InPlaceList.groovy │ │ ├── Listing_10_12_Generics.groovy │ │ ├── Listing_10_13_ListStyleCtorRuntime.groovy │ │ ├── Listing_10_14_ListStyleCtorTC.groovy │ │ ├── Listing_10_15_MapStyleCtorBad.groovy │ │ ├── Listing_10_16_ListStyleCtor.groovy │ │ ├── Listing_10_17_ListStyleCtorFixed.groovy │ │ ├── Listing_10_18_CodeAsData.groovy │ │ ├── Listing_10_19_ClosuresBadReturnType.groovy │ │ ├── Listing_10_20_UserValidation.groovy │ │ ├── Listing_10_21_UserValidationTC.groovy │ │ ├── Listing_10_22_UserValidation_ExplicitTypes.groovy │ │ ├── Listing_10_23_UserValidation_SAM.groovy │ │ ├── Listing_10_24_UserValidation_ClosureParams.groovy │ │ ├── Listing_10_25_UserValidation_DSL.groovy │ │ ├── Listing_10_26_UserValidation_DelegatesTo.groovy │ │ ├── Listing_10_27_UserValidation_DelegatesToTarget.groovy │ │ ├── Listing_10_28_Category.groovy │ │ ├── Listing_10_29_EMC.groovy │ │ ├── Listing_10_30_Builder.groovy │ │ ├── Listing_10_31_MixedTypeChecking.groovy │ │ ├── Listing_10_32_Skip.groovy │ │ ├── Listing_10_33_FlowTyping.groovy │ │ ├── Listing_10_34_FlowTypingOk.groovy │ │ ├── Listing_10_35_LUB.groovy │ │ ├── Listing_10_36_Condition.groovy │ │ ├── Listing_10_37_ClosureSharedVar.groovy │ │ ├── Listing_10_38_LubError.groovy │ │ ├── Listing_10_39_LubOk.groovy │ │ ├── Listing_10_40_FibBench.groovy │ │ ├── Listing_10_41_JavaGreeter.txt │ │ ├── Listing_10_42_StaticCompileDispatch.groovy │ │ ├── Listing_10_43_MonkeyPatching.groovy │ │ ├── Listing_10_44_BookingDSL.groovy │ │ ├── Listing_10_45_MultiValidation.groovy │ │ ├── Listing_10_46_RobotExtension.groovy │ │ ├── Listing_10_47_SQLExtension.groovy │ │ ├── User.groovy │ │ ├── extra1004_JavaDispatch.java │ │ ├── extra1004_RuntimeGroovyDispatch.groovy │ │ ├── markup.html │ │ ├── snippet1003_GroovyGreeter.groovy │ │ ├── snippet1005_RobotMainTC.groovy │ │ └── snippet1005_SqlMainTC.groovy │ ├── chap11/ │ │ ├── Listing_11_01_SquaresFactors.xml │ │ ├── Listing_11_02_SquaresFactors.java │ │ ├── Listing_11_03_MarkupBuilderPlain.groovy │ │ ├── Listing_11_04_NodeBuilder.groovy │ │ ├── Listing_11_05_NodeBuilderLogic.groovy │ │ ├── Listing_11_06_MarkupBuilderLogic.groovy │ │ ├── Listing_11_07_MarkupBuilderHtml.groovy │ │ ├── Listing_11_08_StreamingMarkupBuilderLogic.groovy │ │ ├── Listing_11_09_ExampleBuild.xml │ │ ├── Listing_11_10_PW_SwingBuilder.groovy │ │ ├── Listing_11_11_Swing_Widgets.groovy │ │ ├── Listing_11_12_Swing_Layout.groovy │ │ ├── Listing_11_13_Table_Demo.groovy │ │ ├── Listing_11_14_Binding.groovy │ │ ├── Listing_11_15_Plotter.groovy │ │ ├── Listing_11_16_Groovyfx.groovy │ │ ├── Listing_11_17_CalorieCounterBuilderSupport.groovy │ │ ├── Listing_11_18_CalorieCounterFactoryBuilderSupport.groovy │ │ ├── Listing_11_19_CalorieCounterByHand.groovy │ │ ├── markup.html │ │ ├── snippet1103_MarkupBuilderOutput.html │ │ ├── snippet1103_MarkupWithHyphen.groovy │ │ ├── snippet1106_AntBuilderIf.groovy │ │ ├── snippet1106_AntIf.xml │ │ ├── snippet1107_Printer.groovy │ │ └── snippet1107_binding.txt │ ├── chap12/ │ │ ├── Listing_12_01_info_jdk6_only.groovy │ │ ├── Listing_12_01_info_jdk7_only.groovy │ │ ├── Listing_12_01_info_jdk8_plus.groovy │ │ ├── Listing_12_02_properties.groovy │ │ ├── Listing_12_03_File_Iteration.groovy │ │ ├── Listing_12_04_Filesystem.groovy │ │ ├── Listing_12_05_Traversal.groovy │ │ ├── Listing_12_06_File_Read.groovy │ │ ├── Listing_12_07_File_Write.groovy │ │ ├── Listing_12_08_Writer_LeftShift.groovy │ │ ├── Listing_12_09_File_Transform_jdk7_plus.groovy │ │ ├── Listing_12_10_File_ObjectStreams.groovy │ │ ├── Listing_12_11_Temp_Dir.groovy │ │ ├── Listing_12_12_Threads.groovy │ │ ├── Listing_12_13_Processes_UnixCommands.groovy │ │ ├── Listing_12_14_Processes_ZipUnzip.groovy │ │ ├── Listing_12_15_SimpleTemplateEngine.groovy │ │ ├── Listing_12_16_GroovletExample.groovy │ │ ├── Listing_12_17_HelloWorldGroovlet.groovy │ │ ├── Listing_12_19_InspectGroovlet.groovy │ │ ├── Listing_12_20_HiLowGame.groovy │ │ ├── Listing_12_21_NumberTemplate.txt │ │ ├── Listing_12_22_TemplateGroovlet.groovy │ │ ├── Number.template.html │ │ ├── data/ │ │ │ └── example.txt │ │ ├── objects.dta │ │ ├── snippet1201_SlowTyping.groovy │ │ ├── snippet1201_UseCategory.groovy │ │ ├── snippet1202_base64.groovy │ │ └── web.xml │ ├── chap13/ │ │ ├── Listing_13_01_Connecting.groovy │ │ ├── Listing_13_02_ConnectingDataSource.groovy │ │ ├── Listing_13_03_Creating.groovy │ │ ├── Listing_13_04_DbUtilClass.txt │ │ ├── Listing_13_05_Inserting.groovy │ │ ├── Listing_13_06_Reading.groovy │ │ ├── Listing_13_07_Updating.groovy │ │ ├── Listing_13_08_Delete.groovy │ │ ├── Listing_13_09_Transactions.groovy │ │ ├── Listing_13_10_Batching.groovy │ │ ├── Listing_13_11_Paging.groovy │ │ ├── Listing_13_12_Metadata.groovy │ │ ├── Listing_13_13_MoreMetadata.groovy │ │ ├── Listing_13_14_NamedOrdinal.groovy │ │ ├── Listing_13_15_StoredProcBasic.groovy │ │ ├── Listing_13_16_StoredProcParam.groovy │ │ ├── Listing_13_17_StoredProcInOut.groovy │ │ ├── Listing_13_18_DataSetBasics.groovy │ │ ├── Listing_13_19_DataSetFiltering.groovy │ │ ├── Listing_13_20_DataSetViews.groovy │ │ ├── Listing_13_21_DbHelper.txt │ │ ├── Listing_13_22_DataAccessObject.txt │ │ ├── Listing_13_23_AthleteDAO.txt │ │ ├── Listing_13_24_AthleteApplication.txt │ │ ├── Listing_13_25_AthleteAppMain.groovy │ │ ├── Listing_13_26_AthleteAppTest.groovy │ │ ├── Listing_13_27_MongoAthletes.groovy │ │ ├── Listing_13_28_NeoAthletes.groovy │ │ ├── Listing_13_29_NeoGremlin.groovy │ │ ├── extra_NeoGremlinGraph.groovy │ │ ├── layering/ │ │ │ ├── AthleteApplication.groovy │ │ │ ├── AthleteDAO.groovy │ │ │ ├── DataAccessObject.groovy │ │ │ └── DbHelper.groovy │ │ ├── marathon/ │ │ │ ├── active_tx_log │ │ │ ├── index/ │ │ │ │ ├── lucene.log.active │ │ │ │ ├── lucene.log.v0 │ │ │ │ ├── lucene.log.v1 │ │ │ │ ├── lucene.log.v2 │ │ │ │ ├── lucene.log.v3 │ │ │ │ ├── lucene.log.v4 │ │ │ │ ├── lucene.log.v5 │ │ │ │ ├── lucene.log.v6 │ │ │ │ ├── lucene.log.v7 │ │ │ │ └── lucene.log.v8 │ │ │ ├── messages.log │ │ │ ├── neostore │ │ │ ├── neostore.id │ │ │ ├── neostore.labeltokenstore.db.id │ │ │ ├── neostore.labeltokenstore.db.names │ │ │ ├── neostore.labeltokenstore.db.names.id │ │ │ ├── neostore.nodestore.db.id │ │ │ ├── neostore.nodestore.db.labels │ │ │ ├── neostore.nodestore.db.labels.id │ │ │ ├── neostore.propertystore.db.arrays │ │ │ ├── neostore.propertystore.db.arrays.id │ │ │ ├── neostore.propertystore.db.id │ │ │ ├── neostore.propertystore.db.index │ │ │ ├── neostore.propertystore.db.index.id │ │ │ ├── neostore.propertystore.db.index.keys │ │ │ ├── neostore.propertystore.db.index.keys.id │ │ │ ├── neostore.propertystore.db.strings │ │ │ ├── neostore.propertystore.db.strings.id │ │ │ ├── neostore.relationshipgroupstore.db.id │ │ │ ├── neostore.relationshipstore.db.id │ │ │ ├── neostore.relationshiptypestore.db.id │ │ │ ├── neostore.relationshiptypestore.db.names │ │ │ ├── neostore.relationshiptypestore.db.names.id │ │ │ ├── neostore.schemastore.db.id │ │ │ ├── nioneo_logical.log.active │ │ │ ├── nioneo_logical.log.v6 │ │ │ ├── nioneo_logical.log.v7 │ │ │ ├── nioneo_logical.log.v8 │ │ │ ├── schema/ │ │ │ │ └── label/ │ │ │ │ └── lucene/ │ │ │ │ ├── segments.gen │ │ │ │ └── segments_1 │ │ │ ├── store_lock │ │ │ └── tm_tx_log.1 │ │ ├── snippet1301_ConnectingWithGrab.groovy │ │ ├── snippet1301_ConnectingWithInstance.groovy │ │ ├── snippet1301_ConnectingWithMap.groovy │ │ ├── snippet1301_ReadEachRow.groovy │ │ ├── snippet1301_ReadEachRowList.groovy │ │ ├── snippet1301_ReadQuery.groovy │ │ ├── snippet1301_ReadRows.groovy │ │ └── util/ │ │ ├── DbUtil.groovy │ │ ├── MarathonRelationships.groovy │ │ └── Neo4jUtil.groovy │ ├── chap14/ │ │ ├── Listing_14_01_Plan.txt │ │ ├── Listing_14_02_DOM.groovy │ │ ├── Listing_14_03_DOM_Category.groovy │ │ ├── Listing_14_04_XmlParser.groovy │ │ ├── Listing_14_05_XmlSlurper.groovy │ │ ├── Listing_14_06_SAX.groovy │ │ ├── Listing_14_07_StAX.groovy │ │ ├── Listing_14_08_XmlBoiler.groovy │ │ ├── Listing_14_09_XmlStreamer.groovy │ │ ├── Listing_14_10_StreamedHtml.groovy │ │ ├── Listing_14_11_UpdateDomCategory.groovy │ │ ├── Listing_14_12_UpdateParser.groovy │ │ ├── Listing_14_13_UpdateSlurper.groovy │ │ ├── Listing_14_14_XPath.groovy │ │ ├── Listing_14_15_GroovyPlansTemplate.txt │ │ ├── Listing_14_16_XPathTemplate.groovy │ │ ├── Listing_14_17_JsonParser.groovy │ │ ├── Listing_14_18_JsonBuilder.groovy │ │ ├── Listing_14_19_JsonBuilderLogic.groovy │ │ ├── Listing_14_20_JsonOutputAthlete.groovy │ │ ├── UpdateChecker.groovy │ │ ├── data/ │ │ │ ├── GroovyPlans.html │ │ │ ├── GroovyPlans.template.html │ │ │ ├── StreamedGroovyPlans.html │ │ │ ├── XPathGroovyPlans.html │ │ │ ├── plan.json │ │ │ ├── plan.xml │ │ │ └── style.css │ │ └── log4j.xml │ ├── chap15/ │ │ ├── Listing_15_01_RSS_bbcnews.groovy │ │ ├── Listing_15_02_ATOM_devworks.groovy │ │ ├── Listing_15_03_REST_jira_url.groovy │ │ ├── Listing_15_04_REST_jira_httpb_get.groovy │ │ ├── Listing_15_05_REST_currency_httpb_get.groovy │ │ ├── Listing_15_06_REST_currency_httpb_post.groovy │ │ ├── Listing_15_07_REST_currency_jaxrs.groovy │ │ ├── Listing_15_08_REST_currency_jaxrs_proxy.groovy │ │ ├── Listing_15_09_XMLRPC_echo.groovy │ │ ├── Listing_15_10_XMLRPC_jira.groovy │ │ ├── Listing_15_11_SOAP_wsdl.groovy │ │ ├── Listing_15_12_SOAP11_currency_url.groovy │ │ ├── Listing_15_13_SOAP12_currency_httpb.groovy │ │ ├── Listing_15_14_SOAP11_currency_wslite.groovy │ │ ├── Listing_15_15_SOAP12_currency_wslite.groovy │ │ └── data/ │ │ └── conv.templ.xml │ ├── chap16/ │ │ ├── HelloIntegrationWorld.java │ │ ├── Listing_16_01_HelloIntegration.groovy │ │ ├── Listing_16_02_HelloIntegrationJava.txt │ │ ├── Listing_16_03_MultilineScript.groovy │ │ ├── Listing_16_04_UsingEval.groovy │ │ ├── Listing_16_05_Binding.groovy │ │ ├── Listing_16_06_BindingTwoWay.groovy │ │ ├── Listing_16_07_ClassInScript.groovy │ │ ├── Listing_16_08_Payment_calculator.groovy │ │ ├── Listing_16_09_MethodsInBinding.groovy │ │ ├── Listing_16_10_ShapeInfoMain.txt │ │ ├── Listing_16_11_SpringConfig.txt │ │ ├── Listing_16_12_BeanToString.groovy │ │ ├── shapes/ │ │ │ ├── Circle.groovy │ │ │ ├── MaxAreaInfo.groovy │ │ │ ├── MaxPerimeterInfo.java │ │ │ ├── Shape.java │ │ │ ├── ShapeInfo.java │ │ │ ├── ShapeInfoMain.java │ │ │ └── Square.java │ │ └── spring/ │ │ ├── common/ │ │ │ ├── Shape.java │ │ │ └── ShapeInfo.java │ │ ├── groovy/ │ │ │ ├── Circle.groovy │ │ │ └── MaxAreaInfo.groovy │ │ ├── java/ │ │ │ ├── MaxPerimeterInfo.java │ │ │ ├── ShapeInfoFactoryMain.java │ │ │ ├── ShapeInfoMain.java │ │ │ ├── ShapeInfoSpringMain.java │ │ │ └── Square.java │ │ ├── lib/ │ │ │ ├── commons-logging.jar │ │ │ ├── spring-beans.jar │ │ │ ├── spring-core.jar │ │ │ └── spring.jar │ │ └── resources/ │ │ └── beans.xml │ ├── chap17/ │ │ ├── .classpath │ │ ├── .project │ │ ├── Converter.groovy │ │ ├── Counter.groovy │ │ ├── Farm.groovy │ │ ├── Listing_17_01_Celsius.groovy │ │ ├── Listing_17_02_CounterTest.groovy │ │ ├── Listing_17_03_HashMapTest.groovy │ │ ├── Listing_17_04_GroovyTestSuite.groovy │ │ ├── Listing_17_05_AllTestSuite.groovy │ │ ├── Listing_17_06_DataDrivenJUnitTest.groovy │ │ ├── Listing_17_07_PropertyBased.groovy │ │ ├── Listing_17_08_Balancer.groovy │ │ ├── Listing_17_09_BalancerStub.groovy │ │ ├── Listing_17_10_BalancerMock.groovy │ │ ├── Listing_17_11_LoggingCounterTest.groovy │ │ ├── Listing_17_12_JUnitPerf.groovy │ │ ├── Listing_17_13_SpockSimple.groovy │ │ ├── Listing_17_14_SpockMock.groovy │ │ ├── Listing_17_15_SpockMockWildcards.groovy │ │ ├── Listing_17_16_SpockMockClosureChecks.groovy │ │ ├── Listing_17_17_SpockDataDriven.groovy │ │ ├── LoggingCounter.groovy │ │ ├── MovieTheater.groovy │ │ ├── Purchase.groovy │ │ ├── automation/ │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── groovy/ │ │ │ │ └── Calculator.groovy │ │ │ └── test/ │ │ │ └── groovy/ │ │ │ └── CalculatorTest.groovy │ │ ├── cobertura/ │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── groovy/ │ │ │ │ ├── BiggestPairCalc.groovy │ │ │ │ └── BiggestPairCalcFixed.groovy │ │ │ └── test/ │ │ │ └── groovy/ │ │ │ └── BiggestPairCalcTest.groovy │ │ ├── extra_ParameterizedTestNG.groovy │ │ ├── extra_TestNG.groovy │ │ ├── snippet1701_JUnit4.groovy │ │ ├── snippet1704_listPropertyCheck.groovy │ │ └── test-output/ │ │ ├── Command line suite/ │ │ │ ├── Command line test.html │ │ │ └── Command line test.xml │ │ ├── emailable-report.html │ │ ├── index.html │ │ ├── junitreports/ │ │ │ ├── TEST-extra_ParameterizedTestNG.xml │ │ │ └── TEST-extra_TestNG.xml │ │ ├── old/ │ │ │ ├── Command line suite/ │ │ │ │ ├── Command line test.properties │ │ │ │ ├── classes.html │ │ │ │ ├── groups.html │ │ │ │ ├── index.html │ │ │ │ ├── main.html │ │ │ │ ├── methods-alphabetical.html │ │ │ │ ├── methods-not-run.html │ │ │ │ ├── methods.html │ │ │ │ ├── reporter-output.html │ │ │ │ ├── testng.xml.html │ │ │ │ └── toc.html │ │ │ └── index.html │ │ ├── testng-reports.css │ │ ├── testng-reports.js │ │ ├── testng-results.xml │ │ └── testng.css │ ├── chap18/ │ │ ├── Listing_18_01_ConcurrentSquares.groovy │ │ ├── Listing_18_02_ConcurrentSquaresTransparent.groovy │ │ ├── Listing_18_03_ConcurrentSquaresTransitive.groovy │ │ ├── Listing_18_04_MapFilterReduce.groovy │ │ ├── Listing_18_05_SquaresMapReduce.groovy │ │ ├── Listing_18_06_Dataflow.groovy │ │ ├── Listing_18_07_DataflowStreams.groovy │ │ ├── Listing_18_08_Actors.groovy │ │ ├── Listing_18_09_ActorsLifecycle.groovy │ │ ├── Listing_18_10_ActorsMessageAware.groovy │ │ ├── Listing_18_11_Agent.groovy │ │ ├── Listing_18_12.txt │ │ ├── Listing_18_13_YahooForkJoin.groovy │ │ ├── Listing_18_14_YahooMapReduce.groovy │ │ ├── Listing_18_15_YahooDataflow.groovy │ │ ├── YahooService.groovy │ │ ├── snippet1801_startThread.groovy │ │ ├── snippet1803_java_parallel_streams_jdk8_only.groovy │ │ ├── snippet1804_deadlock.groovy │ │ └── snippet1804_nondeterministic.groovy │ ├── chap19/ │ │ ├── FetchOptions.groovy │ │ ├── FetchOptionsBuilder.groovy │ │ ├── Listing_19_06_Binding.groovy │ │ ├── Listing_19_29_OrderDSL.groovy │ │ ├── Listing_19_30_WhenIfControlStructure.groovy │ │ ├── Listing_19_31_Until_failing_.groovy │ │ ├── Listing_19_32_UntilControlStructure.groovy │ │ ├── Listing_19_39_GivenWhenThen.groovy │ │ ├── Listing_19_43_FetchOptionsScript.groovy │ │ ├── Listing_19_44_RubyStyleNewify.groovy │ │ ├── Listing_19_45_PythonStyleNewify.groovy │ │ ├── Listing_19_46_Terms.groovy │ │ ├── Listing_19_47_NewifyInjected.txt │ │ ├── Listing_19_48_No_IO.groovy │ │ ├── Listing_19_49_ArithmeticShell.groovy │ │ ├── Listing_19_50_TimedInterrupt.groovy │ │ ├── Listing_19_51_SystemExitGuard.groovy │ │ ├── Listing_19_53_QueryCustomizer.groovy │ │ ├── Listings.txt │ │ ├── Query.groovy │ │ ├── extra_FetchOptions_traditional.groovy │ │ ├── v01/ │ │ │ └── Listing_19_01_SelfContainedScript.groovy │ │ ├── v02/ │ │ │ ├── Listing_19_04_MainSimple.groovy │ │ │ ├── Listing_19_05_MainGroovyShell.groovy │ │ │ ├── Listing_19_07_MainBinding.groovy │ │ │ ├── Listing_19_08_MainDirectionConstants.groovy │ │ │ ├── Listing_19_09_MainDirectionsSpread.groovy │ │ │ ├── Listing_19_10_MainImplicitMethod.groovy │ │ │ ├── Listing_19_12_MainBaseScript.groovy │ │ │ ├── Listing_19_13_MainImportCustomizer.groovy │ │ │ ├── Listing_19_14_MainCustomBaseScriptClass.groovy │ │ │ ├── Listing_19_16_MainMethodClosure.groovy │ │ │ ├── Listing_19_19_MainLowerCase.groovy │ │ │ ├── integration/ │ │ │ │ ├── CaseRobotBaseScript.groovy │ │ │ │ ├── CustomBinding.groovy │ │ │ │ └── RobotBaseScript.groovy │ │ │ ├── model/ │ │ │ │ ├── Direction.groovy │ │ │ │ └── Robot.groovy │ │ │ └── snippet1901_MainFileRunner.groovy │ │ ├── v03/ │ │ │ ├── Listing_19_27_SimpleCommandChain.groovy │ │ │ ├── Listing_19_40_Robot_With.groovy │ │ │ ├── integration/ │ │ │ │ ├── DistanceCategory.groovy │ │ │ │ ├── RobotBaseScript.groovy │ │ │ │ └── SuperBotBaseScript.groovy │ │ │ └── model/ │ │ │ ├── Direction.groovy │ │ │ ├── Distance.groovy │ │ │ ├── Duration.groovy │ │ │ ├── Robot.groovy │ │ │ ├── Speed.groovy │ │ │ ├── SuperBot.groovy │ │ │ └── Unit.groovy │ │ └── xform/ │ │ ├── BusinessLogicScript.groovy │ │ ├── CustomControlStructure.groovy │ │ ├── Listing_19_36_WhenTransformation.groovy │ │ ├── WhenUntilTransform.groovy │ │ ├── extra_WhenTransformationWorksWithoutBraces.groovy │ │ └── snippet1906_WhenUntilXform_Structure.groovy │ └── chap20/ │ ├── Listing_20_01_Grapes_for_twitter_urls.groovy │ ├── Listing_20_02_Scriptom_Windows_only.groovy │ ├── Listing_20_03_ActivX_Windows_only.groovy │ ├── Listing_20_10_SquaringMapValue.groovy │ ├── Listing_20_11_Synchronized.groovy │ └── Listing_20_12_DbC_invariants.groovy └── test.groovy