From 282b849b727a2d35428cd99005803faefdae52b4 Mon Sep 17 00:00:00 2001 From: li-fujian Date: Wed, 26 Dec 2018 00:28:11 +0800 Subject: [PATCH 01/30] =?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97=E6=9B=B4?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/JVM-SANDBOX-USER-GUIDE-Chinese.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/JVM-SANDBOX-USER-GUIDE-Chinese.md b/doc/JVM-SANDBOX-USER-GUIDE-Chinese.md index abdcc29b..1ec70736 100644 --- a/doc/JVM-SANDBOX-USER-GUIDE-Chinese.md +++ b/doc/JVM-SANDBOX-USER-GUIDE-Chinese.md @@ -261,7 +261,7 @@ EVENT_POOL_KEY_MAX : 2000 - `-a` - 激活模块,模块激活后才能受到沙箱事件 + 激活模块,模块激活后才能收到沙箱事件 - `-A` From 38f8c348ad2a038dc4b8936e4a57699524df44d1 Mon Sep 17 00:00:00 2001 From: luanjia Date: Thu, 27 Dec 2018 23:56:45 +0800 Subject: [PATCH 02/30] init --- .github/ISSUE_TEMPLATE/----.md | 30 - .gitignore | 6 - .travis.yml | 15 - bin/sandbox.properties | 6 - pom.xml | 4 +- sandbox-agent/pom.xml | 2 +- .../jvm/sandbox/agent/AgentLauncher.class | Bin 11307 -> 0 bytes .../sandbox/agent/SandboxClassLoader.class | Bin 3827 -> 0 bytes sandbox-api/pom.xml | 5 +- .../jvm/sandbox/api/annotation/Command.java | 34 + .../alibaba/jvm/sandbox/api/http/Http.java | 2 + .../http/websocket/TextMessageListener.java | 1 + .../api/http/websocket/WebSocketAcceptor.java | 1 + .../http/websocket/WebSocketConnection.java | 1 + .../WebSocketConnectionListener.java | 1 + .../listener/ext/AdviceAdapterListener.java | 34 +- .../sandbox/api/resource/EventMonitor.java | 3 + .../jvm/sandbox/api/LoadCompleted.class | Bin 165 -> 0 bytes .../jvm/sandbox/api/ModuleLifecycle.class | Bin 346 -> 0 bytes .../api/ProcessControlException$State.class | Bin 1358 -> 0 bytes .../sandbox/api/ProcessControlException.class | Bin 1753 -> 0 bytes .../jvm/sandbox/api/ProcessController.class | Bin 1876 -> 0 bytes .../api/annotation/IncludeBootstrap.class | Bin 461 -> 0 bytes .../api/annotation/IncludeSubClasses.class | Bin 463 -> 0 bytes .../jvm/sandbox/api/annotation/Stealth.class | Bin 443 -> 0 bytes .../jvm/sandbox/api/event/BeforeEvent.class | Bin 1392 -> 0 bytes .../sandbox/api/event/CallBeforeEvent.class | Bin 947 -> 0 bytes .../sandbox/api/event/CallReturnEvent.class | Bin 685 -> 0 bytes .../sandbox/api/event/CallThrowsEvent.class | Bin 778 -> 0 bytes .../jvm/sandbox/api/event/Event$Type.class | Bin 1577 -> 0 bytes .../alibaba/jvm/sandbox/api/event/Event.class | Bin 545 -> 0 bytes .../api/event/ImmediatelyReturnEvent.class | Bin 790 -> 0 bytes .../api/event/ImmediatelyThrowsEvent.class | Bin 802 -> 0 bytes .../jvm/sandbox/api/event/InvokeEvent.class | Bin 709 -> 0 bytes .../jvm/sandbox/api/event/LineEvent.class | Bin 711 -> 0 bytes .../jvm/sandbox/api/event/ReturnEvent.class | Bin 1307 -> 0 bytes .../jvm/sandbox/api/event/ThrowsEvent.class | Bin 1341 -> 0 bytes .../jvm/sandbox/api/filter/AccessFlags.class | Bin 865 -> 0 bytes .../filter/ExtFilter$ExtFilterFactory$1.class | Bin 1840 -> 0 bytes .../filter/ExtFilter$ExtFilterFactory.class | Bin 1373 -> 0 bytes .../jvm/sandbox/api/filter/ExtFilter.class | Bin 365 -> 0 bytes .../jvm/sandbox/api/filter/Filter.class | Bin 340 -> 0 bytes .../sandbox/api/filter/NameRegexFilter.class | Bin 1288 -> 0 bytes .../sandbox/api/filter/OrGroupFilter.class | Bin 2073 -> 0 bytes .../jvm/sandbox/api/http/Http$Method.class | Bin 1156 -> 0 bytes .../alibaba/jvm/sandbox/api/http/Http.class | Bin 685 -> 0 bytes .../ConcurrentLinkedQueuePrinter.class | Bin 4966 -> 0 bytes .../sandbox/api/http/printer/Printer.class | Bin 451 -> 0 bytes .../http/websocket/TextMessageListener.class | Bin 284 -> 0 bytes .../http/websocket/WebSocketAcceptor.class | Bin 311 -> 0 bytes .../http/websocket/WebSocketConnection.class | Bin 332 -> 0 bytes .../WebSocketConnectionListener.class | Bin 308 -> 0 bytes .../sandbox/api/listener/EventListener.class | Bin 257 -> 0 bytes .../api/listener/EventListenerFactory.class | Bin 245 -> 0 bytes .../jvm/sandbox/api/listener/Sentry$1.class | Bin 1156 -> 0 bytes .../api/listener/Sentry$WrapData.class | Bin 874 -> 0 bytes .../jvm/sandbox/api/listener/Sentry.class | Bin 2284 -> 0 bytes .../listener/ThreadSafeEventListener$1.class | Bin 1256 -> 0 bytes .../listener/ThreadSafeEventListener.class | Bin 1485 -> 0 bytes .../jvm/sandbox/api/listener/ext/Advice.class | Bin 5015 -> 0 bytes .../ext/AdviceAdapterListener$1.class | Bin 1300 -> 0 bytes .../ext/AdviceAdapterListener$2.class | Bin 2982 -> 0 bytes .../ext/AdviceAdapterListener$3.class | Bin 1272 -> 0 bytes ...viceAdapterListener$BehaviorCacheKey.class | Bin 2444 -> 0 bytes .../AdviceAdapterListener$CallTarget.class | Bin 983 -> 0 bytes .../ext/AdviceAdapterListener$OpStack.class | Bin 2592 -> 0 bytes .../AdviceAdapterListener$WrapAdvice.class | Bin 1178 -> 0 bytes .../listener/ext/AdviceAdapterListener.class | Bin 9659 -> 0 bytes .../api/listener/ext/AdviceListener.class | Bin 1681 -> 0 bytes .../sandbox/api/listener/ext/Attachment.class | Bin 277 -> 0 bytes .../ext/Behavior$ConstructorImpl.class | Bin 2537 -> 0 bytes .../listener/ext/Behavior$MethodImpl.class | Bin 2338 -> 0 bytes .../sandbox/api/listener/ext/Behavior.class | Bin 1049 -> 0 bytes .../listener/ext/EventWatchBuilder$1.class | Bin 4080 -> 0 bytes .../listener/ext/EventWatchBuilder$2.class | Bin 1213 -> 0 bytes .../listener/ext/EventWatchBuilder$3.class | Bin 2705 -> 0 bytes .../listener/ext/EventWatchBuilder$4.class | Bin 957 -> 0 bytes ...ventWatchBuilder$BuildingForBehavior.class | Bin 7892 -> 0 bytes .../EventWatchBuilder$BuildingForClass.class | Bin 6163 -> 0 bytes ...ventWatchBuilder$BuildingForWatching.class | Bin 4293 -> 0 bytes .../ext/EventWatchBuilder$Group.class | Bin 2123 -> 0 bytes ...entWatchBuilder$IBuildingForBehavior.class | Bin 2297 -> 0 bytes .../EventWatchBuilder$IBuildingForClass.class | Bin 1434 -> 0 bytes ...tWatchBuilder$IBuildingForUnWatching.class | Bin 654 -> 0 bytes ...entWatchBuilder$IBuildingForWatching.class | Bin 1156 -> 0 bytes .../EventWatchBuilder$PatternGroupList.class | Bin 2351 -> 0 bytes .../ext/EventWatchBuilder$PatternType.class | Bin 1357 -> 0 bytes .../ext/EventWatchBuilder$ProgressGroup.class | Bin 2309 -> 0 bytes .../api/listener/ext/EventWatchBuilder.class | Bin 9484 -> 0 bytes .../listener/ext/EventWatchCondition.class | Bin 236 -> 0 bytes .../api/listener/ext/EventWatcher.class | Bin 382 -> 0 bytes .../resource/EventMonitor$EventPoolInfo.class | Bin 486 -> 0 bytes .../sandbox/api/resource/EventMonitor.class | Bin 355 -> 0 bytes .../api/resource/LoadedClassDataSource.class | Bin 543 -> 0 bytes .../api/resource/ModuleController.class | Bin 272 -> 0 bytes .../ModuleEventWatcher$Progress.class | Bin 438 -> 0 bytes .../ModuleEventWatcher$WatchCallback.class | Bin 355 -> 0 bytes .../api/resource/ModuleEventWatcher.class | Bin 1862 -> 0 bytes .../sandbox/api/resource/ModuleManager.class | Bin 803 -> 0 bytes .../api/util/BehaviorDescriptor$Type.class | Bin 5826 -> 0 bytes .../sandbox/api/util/BehaviorDescriptor.class | Bin 1265 -> 0 bytes .../CacheGet$CacheLoadUnCaughtException.class | Bin 554 -> 0 bytes .../jvm/sandbox/api/util/CacheGet.class | Bin 1418 -> 0 bytes .../jvm/sandbox/api/util/GaArrayUtils.class | Bin 909 -> 0 bytes .../sandbox/api/util/GaCollectionUtils.class | Bin 783 -> 0 bytes .../jvm/sandbox/api/util/GaStringUtils.class | Bin 2492 -> 0 bytes .../qatest/api/AdviceListenerTestCase$1.class | Bin 1460 -> 0 bytes .../qatest/api/AdviceListenerTestCase.class | Bin 3138 -> 0 bytes .../api/EventWatchBuilderTestCase.class | Bin 6115 -> 0 bytes .../MockForBuilderModuleEventWatcher.class | Bin 4851 -> 0 bytes .../api/mock/MockForBuilderProgress.class | Bin 1518 -> 0 bytes .../qatest/api/util/ApiQaArrayUtils.class | Bin 813 -> 0 bytes sandbox-api/target/test-classes/logback.xml | 14 - sandbox-common-api/pom.xml | 2 +- .../jvm/sandbox/api/resource/ConfigInfo.java | 16 + .../jvm/sandbox/api/Information$Mode.class | Bin 1167 -> 0 bytes .../alibaba/jvm/sandbox/api/Information.class | Bin 903 -> 0 bytes .../com/alibaba/jvm/sandbox/api/Module.class | Bin 121 -> 0 bytes .../api/ModuleException$ErrorCode.class | Bin 1456 -> 0 bytes .../jvm/sandbox/api/ModuleException.class | Bin 1207 -> 0 bytes .../jvm/sandbox/api/resource/ConfigInfo.class | Bin 1084 -> 0 bytes sandbox-core/pom.xml | 2 +- .../jvm/sandbox/core/CoreConfigure.java | 60 -- .../jvm/sandbox/core/CoreLauncher.java | 5 - .../core/enhance/annotation/Interrupted.java | 2 +- .../enhance/weaver/EventListenerHandlers.java | 588 ++++++------------ .../core/enhance/weaver/EventProcessor.java | 200 ++++++ .../SeparateImmediatelyEventListener.java | 122 ---- .../enhance/weaver/SingleEventFactory.java | 200 ++++++ .../core/enhance/weaver/asm/EventWeaver.java | 5 +- .../core/manager/impl/DefaultConfigInfo.java | 16 +- .../impl/DefaultCoreModuleManager.java | 12 +- .../manager/impl/DefaultEventMonitor.java | 13 +- .../core/server/jetty/JettyCoreServer.java | 12 +- .../jetty/servlet/ModuleHttpServlet.java | 70 ++- .../servlet/WebSocketAcceptorServlet.java | 5 +- .../jvm/sandbox/core/util/EventPool.java | 446 ------------- .../core/util/SandboxReflectUtils.java | 16 +- .../util/collection/ThreadUnsafeGaStack.java | 12 +- .../resources/com/alibaba/jvm/sandbox/logo | 1 + .../qatest/core/enhance/AdviceTestCase.java | 126 +++- .../core/enhance/CalculatorTestCase.java | 21 +- .../core/enhance/EventStreamTestCase.java | 269 +++++++- .../qatest/core/enhance/EventTestCase.java | 35 +- .../listener/TracingEventListener.java | 63 ++ .../manager/CoreModuleManagerTestCase.java | 10 +- .../sandbox/qatest/core/util/JvmHelper.java | 210 +++++++ .../qatest/core/util/QaClassUtils.java | 74 --- .../jvm/sandbox/core/CoreConfigure.class | Bin 9146 -> 0 bytes .../jvm/sandbox/core/CoreLauncher.class | Bin 2290 -> 0 bytes .../core/classloader/ModuleClassLoader.class | Bin 6595 -> 0 bytes .../classloader/ProviderClassLoader.class | Bin 1444 -> 0 bytes .../RoutingURLClassLoader$Routing.class | Bin 2290 -> 0 bytes .../classloader/RoutingURLClassLoader.class | Bin 3614 -> 0 bytes .../jvm/sandbox/core/domain/CoreModule.class | Bin 3264 -> 0 bytes .../jvm/sandbox/core/enhance/Enhancer.class | Bin 559 -> 0 bytes .../core/enhance/EventEnhancer$1.class | Bin 2131 -> 0 bytes .../sandbox/core/enhance/EventEnhancer.class | Bin 3269 -> 0 bytes .../core/enhance/annotation/Interrupted.class | Bin 460 -> 0 bytes .../core/enhance/weaver/CodeLock$Block.class | Bin 265 -> 0 bytes .../core/enhance/weaver/CodeLock.class | Bin 370 -> 0 bytes .../weaver/EventListenerHandlers$1.class | Bin 1054 -> 0 bytes ...ListenerHandlers$EventListenerWrap$1.class | Bin 1450 -> 0 bytes ...dlers$EventListenerWrap$EventProcess.class | Bin 1725 -> 0 bytes ...ntListenerHandlers$EventListenerWrap.class | Bin 4551 -> 0 bytes ...andlers$InterruptedEventListenerImpl.class | Bin 1776 -> 0 bytes .../weaver/EventListenerHandlers.class | Bin 20038 -> 0 bytes .../SeparateImmediatelyEventListener$1.class | Bin 1374 -> 0 bytes .../SeparateImmediatelyEventListener$2.class | Bin 1705 -> 0 bytes ...eparateImmediatelyEventListener$Step.class | Bin 1560 -> 0 bytes .../SeparateImmediatelyEventListener.class | Bin 4457 -> 0 bytes .../core/enhance/weaver/asm/AsmCodeLock.class | Bin 2215 -> 0 bytes .../weaver/asm/AsmMethods$InnerHelper.class | Bin 1319 -> 0 bytes .../core/enhance/weaver/asm/AsmMethods.class | Bin 1683 -> 0 bytes .../enhance/weaver/asm/AsmTryCatchBlock.class | Bin 696 -> 0 bytes .../core/enhance/weaver/asm/AsmTypes.class | Bin 860 -> 0 bytes .../enhance/weaver/asm/CallAsmCodeLock.class | Bin 617 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$1.class | Bin 2127 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$2.class | Bin 1890 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$3.class | Bin 1781 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$4.class | Bin 1801 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$5.class | Bin 2242 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$6.class | Bin 1777 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$7.class | Bin 1777 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1$8.class | Bin 1995 -> 0 bytes .../enhance/weaver/asm/EventWeaver$1.class | Bin 8176 -> 0 bytes .../core/enhance/weaver/asm/EventWeaver.class | Bin 6247 -> 0 bytes .../enhance/weaver/asm/ReWriteMethod.class | Bin 2621 -> 0 bytes .../manager/CoreLoadedClassDataSource.class | Bin 449 -> 0 bytes .../core/manager/CoreModuleManager.class | Bin 840 -> 0 bytes .../ModuleLifeCycleEventBus$Event.class | Bin 1498 -> 0 bytes ...ventBus$ModuleLifeCycleEventListener.class | Bin 548 -> 0 bytes .../manager/ModuleLifeCycleEventBus.class | Bin 660 -> 0 bytes .../ModuleResourceManager$WeakResource.class | Bin 1113 -> 0 bytes .../core/manager/ModuleResourceManager.class | Bin 878 -> 0 bytes .../core/manager/ProviderManager.class | Bin 277 -> 0 bytes .../core/manager/impl/AffectStatistic.class | Bin 2984 -> 0 bytes .../core/manager/impl/DefaultConfigInfo.class | Bin 3848 -> 0 bytes .../impl/DefaultCoreModuleManager$1.class | Bin 1114 -> 0 bytes ...leManager$InnerModuleJarLoadCallback.class | Bin 1749 -> 0 bytes ...oduleManager$InnerModuleLoadCallback.class | Bin 3688 -> 0 bytes .../impl/DefaultCoreModuleManager.class | Bin 21600 -> 0 bytes .../manager/impl/DefaultEventMonitor$1.class | Bin 1663 -> 0 bytes .../manager/impl/DefaultEventMonitor.class | Bin 1214 -> 0 bytes .../impl/DefaultLoadedClassDataSource$1.class | Bin 1734 -> 0 bytes .../impl/DefaultLoadedClassDataSource.class | Bin 5545 -> 0 bytes .../impl/DefaultModuleController.class | Bin 1208 -> 0 bytes .../impl/DefaultModuleEventWatcher.class | Bin 13701 -> 0 bytes .../impl/DefaultModuleLifeCycleEventBus.class | Bin 3179 -> 0 bytes .../manager/impl/DefaultModuleManager.class | Bin 3526 -> 0 bytes .../impl/DefaultModuleResourceManager.class | Bin 5399 -> 0 bytes .../manager/impl/DefaultProviderManager.class | Bin 6463 -> 0 bytes ...oduleJarLoader$ModuleJarLoadCallback.class | Bin 378 -> 0 bytes .../ModuleJarLoader$ModuleLoadCallback.class | Bin 503 -> 0 bytes .../core/manager/impl/ModuleJarLoader.class | Bin 7842 -> 0 bytes .../impl/SandboxClassFileTransformer.class | Bin 7204 -> 0 bytes .../jvm/sandbox/core/server/CoreServer.class | Bin 424 -> 0 bytes .../sandbox/core/server/ProxyCoreServer.class | Bin 2402 -> 0 bytes .../core/server/jetty/JettyCoreServer$1.class | Bin 1368 -> 0 bytes .../core/server/jetty/JettyCoreServer$2.class | Bin 2268 -> 0 bytes .../core/server/jetty/JettyCoreServer.class | Bin 12462 -> 0 bytes .../jetty/servlet/ModuleHttpServlet$1.class | Bin 1532 -> 0 bytes .../jetty/servlet/ModuleHttpServlet.class | Bin 8709 -> 0 bytes ...etAcceptorServlet$InnerOnTextMessage.class | Bin 1624 -> 0 bytes ...cketAcceptorServlet$InnerWebSocket$1.class | Bin 1923 -> 0 bytes ...SocketAcceptorServlet$InnerWebSocket.class | Bin 3343 -> 0 bytes ...rServlet$WebSocketConnectionResource.class | Bin 1507 -> 0 bytes .../servlet/WebSocketAcceptorServlet.class | Bin 4421 -> 0 bytes .../jvm/sandbox/core/util/BitUtils.class | Bin 627 -> 0 bytes .../jvm/sandbox/core/util/EventPool$1.class | Bin 1222 -> 0 bytes .../core/util/EventPool$EventFactory.class | Bin 4666 -> 0 bytes .../jvm/sandbox/core/util/EventPool.class | Bin 14235 -> 0 bytes .../sandbox/core/util/ExceptionUtils.class | Bin 1127 -> 0 bytes .../sandbox/core/util/FeatureCodec$1.class | Bin 1422 -> 0 bytes .../FeatureCodec$ESCAPE_DECODE_STATE.class | Bin 1331 -> 0 bytes .../FeatureCodec$ESCAPE_SPLIT_STATE.class | Bin 1381 -> 0 bytes .../jvm/sandbox/core/util/FeatureCodec.class | Bin 6660 -> 0 bytes .../core/util/Initializer$Processor.class | Bin 313 -> 0 bytes .../sandbox/core/util/Initializer$State.class | Bin 1275 -> 0 bytes .../jvm/sandbox/core/util/Initializer.class | Bin 2549 -> 0 bytes .../jvm/sandbox/core/util/LazyGet.class | Bin 1025 -> 0 bytes .../sandbox/core/util/NamespaceConvert.class | Bin 1261 -> 0 bytes .../jvm/sandbox/core/util/NetworkUtils.class | Bin 1083 -> 0 bytes .../jvm/sandbox/core/util/ObjectIDs$1.class | Bin 243 -> 0 bytes .../ObjectIDs$IdentityWeakReference.class | Bin 1538 -> 0 bytes .../jvm/sandbox/core/util/ObjectIDs.class | Bin 4256 -> 0 bytes .../core/util/SandboxReflectUtils.class | Bin 4580 -> 0 bytes .../core/util/SandboxStringUtils.class | Bin 1971 -> 0 bytes .../jvm/sandbox/core/util/Sequencer.class | Bin 614 -> 0 bytes .../jvm/sandbox/core/util/SpyUtils.class | Bin 1771 -> 0 bytes .../sandbox/core/util/UnCaughtException.class | Bin 422 -> 0 bytes .../jvm/sandbox/core/util/UnsafeUtils.class | Bin 830 -> 0 bytes .../core/util/collection/GaLRUCache.class | Bin 1026 -> 0 bytes .../core/util/collection/GaStack.class | Bin 424 -> 0 bytes .../sandbox/core/util/collection/Pair.class | Bin 572 -> 0 bytes .../util/collection/ThreadUnsafeGaStack.class | Bin 2439 -> 0 bytes .../core/util/matcher/ExtFilterMatcher.class | Bin 6699 -> 0 bytes .../core/util/matcher/GroupMatcher$1.class | Bin 268 -> 0 bytes .../core/util/matcher/GroupMatcher$And.class | Bin 2078 -> 0 bytes .../core/util/matcher/GroupMatcher$Or.class | Bin 1636 -> 0 bytes .../core/util/matcher/GroupMatcher.class | Bin 1097 -> 0 bytes .../sandbox/core/util/matcher/Matcher.class | Bin 287 -> 0 bytes .../core/util/matcher/MatchingResult.class | Bin 1696 -> 0 bytes .../util/matcher/UnsupportedMatcher.class | Bin 5635 -> 0 bytes .../core/util/matcher/structure/Access.class | Bin 351 -> 0 bytes .../matcher/structure/AccessImplByAsm.class | Bin 1612 -> 0 bytes .../structure/AccessImplByJDKBehavior.class | Bin 948 -> 0 bytes .../structure/AccessImplByJDKClass.class | Bin 889 -> 0 bytes .../structure/ArrayClassStructure.class | Bin 993 -> 0 bytes .../structure/BehaviorStructure$1.class | Bin 1837 -> 0 bytes .../structure/BehaviorStructure$2.class | Bin 1917 -> 0 bytes .../matcher/structure/BehaviorStructure.class | Bin 5013 -> 0 bytes .../matcher/structure/ClassStructure.class | Bin 1254 -> 0 bytes .../structure/ClassStructureFactory.class | Bin 2042 -> 0 bytes .../structure/ClassStructureImplByAsm$1.class | Bin 1527 -> 0 bytes .../structure/ClassStructureImplByAsm$2.class | Bin 2022 -> 0 bytes .../structure/ClassStructureImplByAsm$3.class | Bin 1638 -> 0 bytes .../ClassStructureImplByAsm$4$1.class | Bin 1915 -> 0 bytes .../structure/ClassStructureImplByAsm$4.class | Bin 1897 -> 0 bytes .../ClassStructureImplByAsm$5$1$1.class | Bin 4888 -> 0 bytes .../ClassStructureImplByAsm$5$1.class | Bin 1786 -> 0 bytes .../structure/ClassStructureImplByAsm$5.class | Bin 1895 -> 0 bytes .../structure/ClassStructureImplByAsm.class | Bin 10032 -> 0 bytes .../structure/ClassStructureImplByJDK$1.class | Bin 1893 -> 0 bytes .../structure/ClassStructureImplByJDK$2.class | Bin 2750 -> 0 bytes .../structure/ClassStructureImplByJDK.class | Bin 8172 -> 0 bytes .../structure/EmptyClassStructure.class | Bin 2326 -> 0 bytes .../structure/FamilyClassStructure$1.class | Bin 2316 -> 0 bytes .../structure/FamilyClassStructure$2.class | Bin 2232 -> 0 bytes .../structure/FamilyClassStructure$3.class | Bin 2283 -> 0 bytes .../structure/FamilyClassStructure$4.class | Bin 2021 -> 0 bytes .../structure/FamilyClassStructure.class | Bin 4557 -> 0 bytes .../matcher/structure/MemberStructure.class | Bin 1233 -> 0 bytes .../matcher/structure/ModifierAccess.class | Bin 1243 -> 0 bytes .../PrimitiveClassStructure$Primitive.class | Bin 3120 -> 0 bytes .../structure/PrimitiveClassStructure.class | Bin 1990 -> 0 bytes .../classes/com/alibaba/jvm/sandbox/logo | 5 - .../classes/com/alibaba/jvm/sandbox/version | 1 - .../core/enhance/AdviceTestCase$1.class | Bin 1397 -> 0 bytes .../core/enhance/AdviceTestCase$2.class | Bin 1669 -> 0 bytes .../core/enhance/AdviceTestCase$3.class | Bin 1678 -> 0 bytes .../core/enhance/AdviceTestCase$4.class | Bin 1469 -> 0 bytes .../core/enhance/AdviceTestCase$5.class | Bin 1574 -> 0 bytes .../core/enhance/AdviceTestCase$6.class | Bin 1573 -> 0 bytes .../qatest/core/enhance/AdviceTestCase.class | Bin 4121 -> 0 bytes .../core/enhance/CalculatorTestCase.class | Bin 2134 -> 0 bytes .../enhance/CoreEnhanceBaseTestCase$1.class | Bin 305 -> 0 bytes ...eEnhanceBaseTestCase$TestClassLoader.class | Bin 3168 -> 0 bytes .../enhance/CoreEnhanceBaseTestCase.class | Bin 5169 -> 0 bytes .../core/enhance/EventStackTestCase$1.class | Bin 2222 -> 0 bytes .../core/enhance/EventStackTestCase$2.class | Bin 2492 -> 0 bytes .../core/enhance/EventStackTestCase$3.class | Bin 2555 -> 0 bytes .../core/enhance/EventStackTestCase$4.class | Bin 852 -> 0 bytes .../core/enhance/EventStackTestCase.class | Bin 3078 -> 0 bytes .../core/enhance/EventStreamTestCase.class | Bin 3664 -> 0 bytes .../qatest/core/enhance/EventTestCase$1.class | Bin 2422 -> 0 bytes .../qatest/core/enhance/EventTestCase$2.class | Bin 1897 -> 0 bytes .../qatest/core/enhance/EventTestCase$3.class | Bin 1993 -> 0 bytes .../qatest/core/enhance/EventTestCase$4.class | Bin 2134 -> 0 bytes .../qatest/core/enhance/EventTestCase$5.class | Bin 1959 -> 0 bytes .../EventTestCase$LineEventChecker.class | Bin 2228 -> 0 bytes .../qatest/core/enhance/EventTestCase.class | Bin 5991 -> 0 bytes .../core/enhance/NamespaceTestCase$1.class | Bin 1716 -> 0 bytes .../core/enhance/NamespaceTestCase$2.class | Bin 1750 -> 0 bytes .../core/enhance/NamespaceTestCase.class | Bin 2595 -> 0 bytes .../enhance/ProcessControllerTestCase$1.class | Bin 1692 -> 0 bytes .../enhance/ProcessControllerTestCase$2.class | Bin 1769 -> 0 bytes .../enhance/ProcessControllerTestCase$3.class | Bin 1919 -> 0 bytes .../enhance/ProcessControllerTestCase$4.class | Bin 1769 -> 0 bytes .../enhance/ProcessControllerTestCase.class | Bin 3436 -> 0 bytes ...ntStreamCheckerListener$EventChecker.class | Bin 546 -> 0 bytes ...reamCheckerListener$EventTypeChecker.class | Bin 3439 -> 0 bytes .../listener/EventStreamCheckerListener.class | Bin 2473 -> 0 bytes .../InterruptedAdviceAdapterListener.class | Bin 726 -> 0 bytes .../listener/InterruptedEventListener.class | Bin 789 -> 0 bytes .../core/enhance/target/Calculator.class | Bin 972 -> 0 bytes .../CoreLoadedClassDataSourceTestCase$1.class | Bin 1143 -> 0 bytes .../CoreLoadedClassDataSourceTestCase$2.class | Bin 1290 -> 0 bytes ...eLoadedClassDataSourceTestCase$Human.class | Bin 349 -> 0 bytes ...dClassDataSourceTestCase$InnerWorker.class | Bin 1163 -> 0 bytes ...oreLoadedClassDataSourceTestCase$Man.class | Bin 450 -> 0 bytes ...ase$NameRegexWithSubClassesExtFilter.class | Bin 1244 -> 0 bytes ...eLoadedClassDataSourceTestCase$Woman.class | Bin 456 -> 0 bytes ...LoadedClassDataSourceTestCase$Worker.class | Bin 562 -> 0 bytes .../CoreLoadedClassDataSourceTestCase.class | Bin 6721 -> 0 bytes .../manager/CoreModuleManagerTestCase$1.class | Bin 2407 -> 0 bytes .../manager/CoreModuleManagerTestCase$2.class | Bin 2422 -> 0 bytes .../manager/CoreModuleManagerTestCase$3.class | Bin 2414 -> 0 bytes ...eManagerTestCase$AnotherNormalModule.class | Bin 716 -> 0 bytes ...ManagerTestCase$BrokenOnActiveModule.class | Bin 929 -> 0 bytes ...eManagerTestCase$BrokenOnCInitModule.class | Bin 856 -> 0 bytes ...ManagerTestCase$BrokenOnFrozenModule.class | Bin 929 -> 0 bytes ...gerTestCase$BrokenOnLazyActiveModule.class | Bin 978 -> 0 bytes ...TestCase$BrokenOnLoadCompletedModule.class | Bin 971 -> 0 bytes ...leManagerTestCase$BrokenOnLoadModule.class | Bin 971 -> 0 bytes ...ManagerTestCase$BrokenOnUnLoadModule.class | Bin 929 -> 0 bytes ...tCase$EmptyCoreLoadedClassDataSource.class | Bin 1777 -> 0 bytes ...ManagerTestCase$EmptyInstrumentation.class | Bin 3246 -> 0 bytes ...ManagerTestCase$EmptyProviderManager.class | Bin 1381 -> 0 bytes ...erTestCase$ModifyAnotherNormalModule.class | Bin 734 -> 0 bytes ...reModuleManagerTestCase$NormalModule.class | Bin 737 -> 0 bytes ...gerTestCase$NormalOnLazyActiveModule.class | Bin 815 -> 0 bytes .../manager/CoreModuleManagerTestCase.class | Bin 13712 -> 0 bytes ...MockLoadedClassesOnlyInstrumentation.class | Bin 3380 -> 0 bytes .../core/manager/ModuleLifeCycleAdapter.class | Bin 851 -> 0 bytes .../sandbox/qatest/core/util/JarBuilder.class | Bin 4530 -> 0 bytes .../core/util/ModuleTests$TestModule.class | Bin 614 -> 0 bytes .../qatest/core/util/ModuleTests.class | Bin 1253 -> 0 bytes .../qatest/core/util/QaClassUtils.class | Bin 3971 -> 0 bytes .../core/util/SandboxModuleJarBuilder.class | Bin 2064 -> 0 bytes .../ClassStructureTestCaseByChildClass.class | Bin 12266 -> 0 bytes .../asserts/AccessAsserter$AccessIsEnum.class | Bin 1924 -> 0 bytes .../util/matcher/asserts/AccessAsserter.class | Bin 3073 -> 0 bytes .../core/util/matcher/asserts/Asserter.class | Bin 315 -> 0 bytes .../asserts/BehaviorStructureAsserter.class | Bin 4936 -> 0 bytes .../BehaviorStructureCollectionAsserter.class | Bin 3451 -> 0 bytes .../asserts/ClassStructureAsserter.class | Bin 6245 -> 0 bytes .../ClassStructureCollectionAsserter.class | Bin 2719 -> 0 bytes .../asserts/MappingAsserter$Mode.class | Bin 1398 -> 0 bytes .../matcher/asserts/MappingAsserter.class | Bin 4263 -> 0 bytes .../target/ChildClass$InnerClass.class | Bin 692 -> 0 bytes .../target/ChildClass$ProtectedEnum.class | Bin 1308 -> 0 bytes .../ChildClass$ProtectedInterface.class | Bin 300 -> 0 bytes .../ChildClass$ProtectedStaticClass.class | Bin 535 -> 0 bytes .../target/ChildClass$PublicEnum.class | Bin 1287 -> 0 bytes .../target/ChildClass$PublicInterface.class | Bin 294 -> 0 bytes .../target/ChildClass$PublicStaticClass.class | Bin 683 -> 0 bytes .../core/util/matcher/target/ChildClass.class | Bin 6030 -> 0 bytes .../util/matcher/target/GrandpaClass.class | Bin 459 -> 0 bytes .../target/IGrandpaInterfaceFirst.class | Bin 272 -> 0 bytes .../target/IGrandpaInterfaceFirstFirst.class | Bin 191 -> 0 bytes .../target/IParentInterfaceFirst.class | Bin 398 -> 0 bytes .../target/IParentInterfaceFirstFirst.class | Bin 476 -> 0 bytes .../target/IParentInterfaceFirstSecond.class | Bin 191 -> 0 bytes .../target/IParentInterfaceSecond.class | Bin 181 -> 0 bytes .../target/IllInheritedAnnotation.class | Bin 484 -> 0 bytes .../matcher/target/InheritedAnnotation.class | Bin 517 -> 0 bytes .../util/matcher/target/ParentClass.class | Bin 628 -> 0 bytes .../lib/sandbox-spy-1.1.0-for-qatest.jar | Bin 7002 -> 0 bytes sandbox-core/target/test-classes/logback.xml | 14 - sandbox-debug-module/pom.xml | 2 +- .../com.alibaba.jvm.sandbox.api.Module | 7 - .../module/debug/DebugRalphModule$1.class | Bin 3179 -> 0 bytes .../module/debug/DebugRalphModule$2.class | Bin 2786 -> 0 bytes .../module/debug/DebugRalphModule$3.class | Bin 1584 -> 0 bytes .../module/debug/DebugRalphModule$4.class | Bin 2340 -> 0 bytes .../module/debug/DebugRalphModule$5.class | Bin 2801 -> 0 bytes .../module/debug/DebugRalphModule$6.class | Bin 926 -> 0 bytes .../DebugRalphModule$ExceptionFactory.class | Bin 342 -> 0 bytes .../DebugRalphModule$ExceptionType$1.class | Bin 922 -> 0 bytes .../DebugRalphModule$ExceptionType$2.class | Bin 933 -> 0 bytes .../DebugRalphModule$ExceptionType$3.class | Bin 929 -> 0 bytes .../DebugRalphModule$ExceptionType$4.class | Bin 940 -> 0 bytes .../DebugRalphModule$ExceptionType.class | Bin 2484 -> 0 bytes .../module/debug/DebugRalphModule.class | Bin 9796 -> 0 bytes .../module/debug/DebugTraceModule$1.class | Bin 4617 -> 0 bytes .../module/debug/DebugTraceModule.class | Bin 4829 -> 0 bytes .../module/debug/DebugWatchModule$1.class | Bin 1556 -> 0 bytes .../module/debug/DebugWatchModule$2.class | Bin 4246 -> 0 bytes .../module/debug/DebugWatchModule$Bind.class | Bin 1025 -> 0 bytes .../debug/DebugWatchModule$Trigger.class | Bin 1345 -> 0 bytes .../module/debug/DebugWatchModule.class | Bin 6374 -> 0 bytes .../debug/ExceptionLoggerModule$1.class | Bin 1424 -> 0 bytes .../module/debug/ExceptionLoggerModule.class | Bin 2307 -> 0 bytes .../debug/HttpHttpAccessLoggerModule$1.class | Bin 1991 -> 0 bytes .../debug/HttpHttpAccessLoggerModule$2.class | Bin 3806 -> 0 bytes ...ttpHttpAccessLoggerModule$HttpAccess.class | Bin 948 -> 0 bytes ...tpAccessLoggerModule$HttpProcessStep.class | Bin 1555 -> 0 bytes .../debug/HttpHttpAccessLoggerModule.class | Bin 7186 -> 0 bytes .../module/debug/HttpSupported$1.class | Bin 930 -> 0 bytes .../module/debug/HttpSupported$2.class | Bin 969 -> 0 bytes .../module/debug/HttpSupported$3.class | Bin 975 -> 0 bytes .../module/debug/HttpSupported$4.class | Bin 978 -> 0 bytes .../debug/HttpSupported$Converter.class | Bin 409 -> 0 bytes ...HttpSupported$HttpErrorCodeException.class | Bin 713 -> 0 bytes .../sandbox/module/debug/HttpSupported.class | Bin 6724 -> 0 bytes .../module/debug/JdbcLoggerModule$1.class | Bin 2117 -> 0 bytes .../module/debug/JdbcLoggerModule$2.class | Bin 3624 -> 0 bytes ...$MonitorJavaSqlPreparedStatementStep.class | Bin 1631 -> 0 bytes .../module/debug/JdbcLoggerModule.class | Bin 4064 -> 0 bytes .../module/debug/ProgressPrinter.class | Bin 2719 -> 0 bytes .../module/debug/SpringLoggerModule$1.class | Bin 2504 -> 0 bytes .../module/debug/SpringLoggerModule.class | Bin 3294 -> 0 bytes .../module/debug/textui/TComponent.class | Bin 188 -> 0 bytes .../sandbox/module/debug/textui/TTree$1.class | Bin 3077 -> 0 bytes .../module/debug/textui/TTree$Callback.class | Bin 417 -> 0 bytes .../module/debug/textui/TTree$Node.class | Bin 2332 -> 0 bytes .../sandbox/module/debug/textui/TTree.class | Bin 4028 -> 0 bytes .../debug/util/Express$ExpressException.class | Bin 750 -> 0 bytes .../debug/util/Express$ExpressFactory$1.class | Bin 1000 -> 0 bytes .../debug/util/Express$ExpressFactory.class | Bin 1115 -> 0 bytes .../debug/util/Express$OgnlExpress.class | Bin 2251 -> 0 bytes .../sandbox/module/debug/util/Express.class | Bin 829 -> 0 bytes .../module/debug/util/GaEnumUtils.class | Bin 1686 -> 0 bytes .../debug/util/SimpleDateFormatHolder.class | Bin 1328 -> 0 bytes .../target/classes/logback.xml | 79 --- sandbox-mgr-module/pom.xml | 8 +- .../jvm/sandbox/module/mgr/ControlModule.java | 19 +- .../jvm/sandbox/module/mgr/InfoModule.java | 55 +- .../sandbox/module/mgr/ModuleMgrModule.java | 87 +-- .../com.alibaba.jvm.sandbox.api.Module | 3 - .../com.alibaba.jvm.sandbox.api.Module | 3 - .../sandbox/module/mgr/ControlModule$1.class | Bin 1822 -> 0 bytes .../sandbox/module/mgr/ControlModule.class | Bin 7124 -> 0 bytes .../jvm/sandbox/module/mgr/InfoModule.class | Bin 4539 -> 0 bytes .../sandbox/module/mgr/ModuleMgrModule.class | Bin 9307 -> 0 bytes sandbox-mgr-module/target/classes/logback.xml | 19 - sandbox-mgr-provider/pom.xml | 2 +- ...sandbox.provider.api.ModuleJarLoadingChain | 1 - ...vm.sandbox.provider.api.ModuleLoadingChain | 1 - .../mgr/EmptyModuleJarLoadingChain.class | Bin 621 -> 0 bytes .../mgr/EmptyModuleLoadingChain.class | Bin 903 -> 0 bytes sandbox-module-starter/pom.xml | 2 +- sandbox-provider-api/pom.xml | 2 +- .../provider/api/ModuleJarLoadingChain.class | Bin 246 -> 0 bytes .../provider/api/ModuleLoadingChain.class | Bin 334 -> 0 bytes sandbox-spy/pom.xml | 2 +- .../java/com/alibaba/jvm/sandbox/spy/Spy.java | 12 +- .../jvm/sandbox/spy/Spy$MethodHook.class | Bin 1787 -> 0 bytes .../com/alibaba/jvm/sandbox/spy/Spy$Ret.class | Bin 1289 -> 0 bytes .../spy/Spy$SelfCallBarrier$Node.class | Bin 1518 -> 0 bytes .../jvm/sandbox/spy/Spy$SelfCallBarrier.class | Bin 2850 -> 0 bytes .../com/alibaba/jvm/sandbox/spy/Spy.class | Bin 5958 -> 0 bytes 483 files changed, 1613 insertions(+), 1483 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/----.md delete mode 100644 .gitignore delete mode 100644 .travis.yml delete mode 100644 sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/AgentLauncher.class delete mode 100644 sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/SandboxClassLoader.class create mode 100644 sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/LoadCompleted.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleLifecycle.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException$State.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessController.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeBootstrap.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeSubClasses.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/Stealth.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/BeforeEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallBeforeEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallReturnEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallThrowsEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event$Type.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyReturnEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyThrowsEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/InvokeEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/LineEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ReturnEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ThrowsEvent.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/AccessFlags.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory$1.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/Filter.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/NameRegexFilter.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/OrGroupFilter.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http$Method.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/ConcurrentLinkedQueuePrinter.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/Printer.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListener.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$1.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$WrapData.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener$1.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Advice.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$1.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$2.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$3.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$BehaviorCacheKey.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$CallTarget.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$OpStack.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$WrapAdvice.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceListener.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Attachment.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$ConstructorImpl.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$MethodImpl.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$1.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$2.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$3.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$4.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForBehavior.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForClass.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForWatching.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$Group.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForBehavior.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForClass.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForUnWatching.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForWatching.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternGroupList.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternType.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$ProgressGroup.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatcher.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor$EventPoolInfo.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/LoadedClassDataSource.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleController.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$WatchCallback.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleManager.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor$Type.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet$CacheLoadUnCaughtException.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaArrayUtils.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaCollectionUtils.class delete mode 100644 sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaStringUtils.class delete mode 100644 sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase$1.class delete mode 100644 sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase.class delete mode 100644 sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/EventWatchBuilderTestCase.class delete mode 100644 sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderModuleEventWatcher.class delete mode 100644 sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderProgress.class delete mode 100644 sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/util/ApiQaArrayUtils.class delete mode 100755 sandbox-api/target/test-classes/logback.xml delete mode 100644 sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information$Mode.class delete mode 100644 sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information.class delete mode 100644 sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Module.class delete mode 100644 sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException$ErrorCode.class delete mode 100644 sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException.class delete mode 100644 sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.class create mode 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java create mode 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreConfigure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreLauncher.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ProviderClassLoader.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader$Routing.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/domain/CoreModule.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/Enhancer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock$Block.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$EventProcess.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$InterruptedEventListenerImpl.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$Step.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmCodeLock.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods$InnerHelper.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTryCatchBlock.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTypes.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/CallAsmCodeLock.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$3.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$4.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$5.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$6.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$7.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$8.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/ReWriteMethod.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$Event.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$ModuleLifeCycleEventListener.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager$WeakResource.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ProviderManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/AffectStatistic.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleJarLoadCallback.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleLoadCallback.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleJarLoadCallback.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleLoadCallback.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/SandboxClassFileTransformer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/CoreServer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/ProxyCoreServer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerOnTextMessage.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$WebSocketConnectionResource.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/BitUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$EventFactory.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ExceptionUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_DECODE_STATE.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_SPLIT_STATE.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$Processor.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$State.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/LazyGet.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NamespaceConvert.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NetworkUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$IdentityWeakReference.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Sequencer.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SpyUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnCaughtException.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnsafeUtils.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaLRUCache.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaStack.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/Pair.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$And.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$Or.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/Matcher.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/MatchingResult.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/UnsupportedMatcher.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/Access.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByAsm.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKBehavior.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKClass.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ArrayClassStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureFactory.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$3.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/EmptyClassStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$1.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$2.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$3.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$4.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/MemberStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ModifierAccess.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure$Primitive.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure.class delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo delete mode 100644 sandbox-core/target/classes/com/alibaba/jvm/sandbox/version delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$3.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$4.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$5.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$6.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$TestClassLoader.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$3.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$4.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$3.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$4.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$5.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$LineEventChecker.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$3.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$4.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventChecker.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventTypeChecker.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedEventListener.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Human.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$InnerWorker.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Man.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$NameRegexWithSubClassesExtFilter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Woman.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Worker.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$1.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$2.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$3.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$AnotherNormalModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnActiveModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnCInitModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnFrozenModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLazyActiveModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadCompletedModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnUnLoadModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyCoreLoadedClassDataSource.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyInstrumentation.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyProviderManager.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$ModifyAnotherNormalModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalOnLazyActiveModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/MockLoadedClassesOnlyInstrumentation.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/JarBuilder.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests$TestModule.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/SandboxModuleJarBuilder.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/ClassStructureTestCaseByChildClass.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter$AccessIsEnum.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/Asserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureAsserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureCollectionAsserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureAsserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureCollectionAsserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter$Mode.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$InnerClass.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedEnum.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedInterface.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedStaticClass.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicEnum.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicInterface.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicStaticClass.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/GrandpaClass.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirst.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirstFirst.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirst.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstFirst.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstSecond.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceSecond.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IllInheritedAnnotation.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/InheritedAnnotation.class delete mode 100644 sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ParentClass.class delete mode 100644 sandbox-core/target/test-classes/lib/sandbox-spy-1.1.0-for-qatest.jar delete mode 100755 sandbox-core/target/test-classes/logback.xml delete mode 100644 sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$2.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$3.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$4.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$5.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$6.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionFactory.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$2.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$3.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$4.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$2.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Bind.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Trigger.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$2.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpAccess.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpProcessStep.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$2.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$3.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$4.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$Converter.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$HttpErrorCodeException.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$2.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$MonitorJavaSqlPreparedStatementStep.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ProgressPrinter.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TComponent.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Callback.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Node.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressException.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory$1.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$OgnlExpress.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/GaEnumUtils.class delete mode 100644 sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.class delete mode 100755 sandbox-debug-module/target/classes/logback.xml delete mode 100755 sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module delete mode 100755 sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module delete mode 100644 sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule$1.class delete mode 100644 sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule.class delete mode 100644 sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/InfoModule.class delete mode 100644 sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.class delete mode 100755 sandbox-mgr-module/target/classes/logback.xml delete mode 100644 sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain delete mode 100644 sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain delete mode 100644 sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleJarLoadingChain.class delete mode 100644 sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleLoadingChain.class delete mode 100644 sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleJarLoadingChain.class delete mode 100644 sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleLoadingChain.class delete mode 100644 sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$MethodHook.class delete mode 100644 sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$Ret.class delete mode 100644 sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier$Node.class delete mode 100644 sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier.class delete mode 100644 sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy.class diff --git a/.github/ISSUE_TEMPLATE/----.md b/.github/ISSUE_TEMPLATE/----.md deleted file mode 100644 index e4063178..00000000 --- a/.github/ISSUE_TEMPLATE/----.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: 问题报告 -about: 描述清楚问题和当前环境 - ---- - -**操作环境** - -|...|...| -|---|---| -|操作系统|Linux| -|JVM版本|OpenJDK-8.0.5| -|沙箱容器版本|1.1.0| -|沙箱API版本|1.0.16| - -**问题描述** - -简明扼要的描述清楚遇到的问题 - -**重现步骤** - -描述通过怎样的操作重现你的问题和疑惑 -1. 第一步 -2. 第二步 -3. 第三步 -4. ... - -**附件(如有)** - -在这个环节添加上可能的附件 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 331306b5..00000000 --- a/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -## for IDEA -.idea -*.iml - -## for maven -pom.xml.versionsBackup diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e3b9aa8e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: generic - -jdk: - - openjdk6 - - oraclejdk6 - -cache: - directories: - - "$HOME/.m2/repository" - -script: - - mvn clean cobertura:cobertura -Dmaven.test.skip=false - -after_success: - - bash <(curl -s https://codecov.io/bash) \ No newline at end of file diff --git a/bin/sandbox.properties b/bin/sandbox.properties index a1e9f2fe..65555b0e 100755 --- a/bin/sandbox.properties +++ b/bin/sandbox.properties @@ -24,9 +24,3 @@ user_module=~/.sandbox-module; # switch the sandbox can enhance system class unsafe.enable=true -# define the sandbox event pool arguments(min/max/total) -event.pool.enable=true -event.pool.max.total=6000 -event.pool.min.idle.per.event=50 -event.pool.max.idle.per.event=100 -event.pool.max.total.per.event=2000 diff --git a/pom.xml b/pom.xml index d03352bd..5f263e92 100644 --- a/pom.xml +++ b/pom.xml @@ -5,14 +5,14 @@ com.alibaba.jvm.sandbox sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT pom sandbox ${sandbox.version} UTF-8 - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT diff --git a/sandbox-agent/pom.xml b/sandbox-agent/pom.xml index 6037e4a7..5ce9c8c8 100755 --- a/sandbox-agent/pom.xml +++ b/sandbox-agent/pom.xml @@ -6,7 +6,7 @@ com.alibaba.jvm.sandbox sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-agent sandbox-agent ${sandbox.version} diff --git a/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/AgentLauncher.class b/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/AgentLauncher.class deleted file mode 100644 index 241b74a2cceb3fadae069f0d25b2f4497b1e1a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11307 zcmbVS3w%`Nl|Lt$$-SA}5Hb)*f=EHY}! z-tTpVy2vRsVL5YUhqXw>$>1uf_m&Xc?SIWXq z2$NNLT*Is7QLAyCkCt-14AyA8R^AN)X%wk0md84co8;Xrj}{-T;MP34gxh3zi9FhM z4*F;rcj&xc;|&^b^wCl3N_bsms+SmO3Sf5uKwV3pqxUMGm3l&?>TCIdQe*ZI>jzFy}WbiPr9zRAZo^DREUm2dO$XZUte{~hwU z)5o9XyL7(W$DiYSbiP;T&ue_2k8a{Zrs;L{Yiiavb#w)5TIyD}UfR{r+FZ}%Z`u?Z z4OI??BK?)YL@XTXuVyNCaMlOw+q;@u>()2bceT}YG%yu5)vRx+Z4h96SIye`mJX); z+Gr%62t^VbLW3iw&~)Q;bkx*hVV(=fG_}1xD8j61Oj0h2ha$b*(XF+Ep?JJ08tOG; z&7onY0!zY?M0l_g0Em|x4EIMuiIEt1txum_K6yJ$J<*}c&|tVb)E%naG&)pi^QjE= zn~_9ia1z(*mEbY6wy7o<>}p-pRomKLk4MXz#FrJdG1^t7SAoyn+g zZtLjm3U;(NwyecA*VSW?rto|LwbV4%2it0DL9WoTiwmZ3ERtP~ZA?A~M+OCorsCJt z*4hsJ8_u*f%oT)=)^+tQFpV>1kBemva<|pDcQn=q-TKd29*%?)E19wvEZo54sg3qR zzXeUg2^^qI2i2=sy(5FBMXe|Wu8qdbi$gIB?m`a^ zZ%cxUQ|N86=&%_}gw43MVn*83Xc+!!O=!b0b0`#!FjZ#|-6eS#Q4$*&60d7aeufg^ zXrx*+p5JFGr?$cn77%>s7zZH%|uOaZ_JFxl@1t|EV7Wo(aOfw z`mH_Yu+k7yR^JwwIXSr|JZNqdImD52BcUNPJ{;=7dT%1S*@QK`gW{-6r=5%`)Z7O` zOjFVbgJgaX+uIBUDi=rXL(xDfKvhGXLUBNj7(|w8jn$cbh!I!XVp?%Z%5ZzNYdLu5 z^`w#@(~^&gDkp+cYd}KlvD_Wi6A2`#M+E5M<}0S_BNrD^R$ z_38`vt7=j>5gBMj(e6!VPeSlwrVH0yIa?J9ko`7IB#*7zf@W;gi~;DT-~e;N@zvo- zFB4w|SM3Rn#NmYg;bhVg_qOs&p;&TFdTy}8Kmieal+a;Vfm^HbM8N z7~n1?{QoU9H5_k=CRRhj%}zoq%H(I*eGbwh8V`gVbmCqx6`qRd3L(KbG?rzc;gZ)* zGj8v-L7?87PRd9`ZLO*-c~%C>Hl3vJB6v2B2F-rS;We>XXdBbC%O|r3bn|FiC>*m< z9pU|HP(?ta_n8_$p7kl34xygX8Pi&uaB>5aWt|MksJ!eU>BX`)o7l2pE7ETFh9)pM zMNua+o(#z-isUal^$j6>rR`tM`utMx`eB{;-0Q6QsdN(_(!xDavLXdg!YUjrXg{1gd1<>Hf_(6jo=O;AYWAKyw z6@#DRr-j8c27i?x=(A#xX$}WhgC{JWGw3e58)eMkz5Kkv`*=UoIVZQcoe5l}T`0X^ z@QXZ#;++!Fjll$%@;4BAM1sqISi8F!HH?tVxDSATa9yItRK4j2WWcVF= zohbnED(vHB1&)^$j_s9~r1cC2zs#?oKS@MgZA8HY3DeYSg^0n2`H03x4gMN`o$0)j za*V5{qXIc->o(!;^c#6dOmgZ7MWjbAOmSTujY>mj@HfPVJl(1(nVXtFaSPxWGQ9&s z>)C6@6R{{Ng(OCG_;8#vW9QE_!&X|E6#v@OKa-^auJQHaLLeqCvMv5d9w=Q_`vq zgNZOJ5o^%X62&?5;w#|oOr6z84DuP@7EhQ%T~=-o0KQB$VO=7032hmpnTxs5oXD4{ z|K4C)If>FhG<;15U{hf49cir+n5%cjgf@eFGmP%RIb)q z`w%J%8r}SC3~Vr`FB%&P!8I<*use5?dP1o|B;Z~v+7Fu7jF?Cnj=`{xK+deIy|6({XS?}X=08Ex zkv%*D!f9s*o62OmZtW&n<=~1ZI*L6OsJ%A!wMFCcu(}T`w54z?EZaTPa{Z1dl4}CF zFf{C{K0z}S>w(%z?S&I7j=BiRmAeJCh-qGieY&MoXyW2fU$dDQh~iYaD#IGL6Ig59 zRAOe|AkMj!76p(iPSt?)If;zODEi$AzGiF7&Bg|~`6P8}bX%3jK1QUu-eha0`%})K z8R?hXLJcmD%S6PiH$FTVhLtmU#X`4CHf^j8$LoiN6L83B5`wX40{h2pTwT<o&^$c@X+K_50GNMgz=txan z-`<3^R-j0}{Cj|ZuM58poC60HQt2r7hL0BjKAm__hbAe*LVQq`(5KW#t*p035<8R z#-kYTbd9%Q{Ge+b#u$f-$7_%H>@Z5zRR^p9Dg}i|Sl=ZyY@|W?z3phxL3jC^t;0c01x>!46sTzZJII}ea2Fh<^elru(}U&rSd8tdtO>rH>%z_yU z{QmtkEig{g%g3o`W6GDNP&TF$ruLqMG;7~VG9^C|@HzOb1LNhUzY#`2DW|2%X zo@F!kQ6cR|+-K1Xz!I0YATI(EkW;g@TmBtFLpbd{M5UekXx0Hbt!42T&E7%h;&u8C z^5HdSC!KYO$~tYs`Oko60Y1}zmZjnYH1`Nsc@ELM&c&VsG{4GI;_;uYy+R8*vjf3S zPkFG@yJ(CS20L@`f=bJSl$LU=8tlUEjtGs(?Zk1Q~m3R-(xksvU z6hgj@;H}b1a*jN&G;=Gm;5k%F*I}pDdnfj?8-DT>#&;ug$k@`TWDY{E%0oVyh8!e$ zrwqAf74k_f@<$6&KnN*e00|)q8^kakMJQi~gU1ap;;k^~?a=d`c;Ail?LFYJ6LY&U zw+FDNF!v1J&(Vv@GAp6kd!Y4kItW>7X^>u`LvR7;nqIcuWG}sfFG)Fj=`bCEZSuhV zD18kwe;v?uq#vU)jlMDGI5m)0qgU0>Yk+9Qn;3earFH<{q90hEOBaHSXfEF+>9UFW`CY}^%J}&<$A$F6B#}N4 z5owAoA{S*r@}*5&{y1snV^me1+Mi#U?$?mNlr5W^|qHRTfu}wQ427DVkWMw{` z_!!NQEd=BO3!HYLd^`(H88}NzZkgGPM|BGx%d0%)hiC<2th5uumE-gY#Nq*3b&zVZ zXpse4Jx;Y%-V(3BZj9=ya!PXiYrL<}+Rki$1HufCF=}K$5O*aWKo$dVG2+GRUndLn z65ZdFjRk^+_X3&C1+du$mgL&dqtr4+trz%;d^@QD2yGUdk{n@kiLfcjwfSfOl?$JZ zduVo59*~0*sckIDI|6veMEFr!zt@U%{|1TmjS>M*!p3jI)>CoI=f&Hj^5J%x12g>r zk@QEz)PK=b`T!C9AzbPMDyP5DVmc0Y`wRYp#X~iSi(b|#%y|^!DReCt(2YEmZsTe6 zD9@xPxrAQgQhI}D(OW!+-saPAyEvQPKS zsF;3CKY^K-!EN8ApF*M?Bh^no<_gc=r>MoKnnS-M!(bOJ?n{n32CC_ILZnVOd6(|u^Y#KgW7Sc zWC!0B5Ke+`76%@undp-)eVC>O{GDTT*-p|td&rah45qErphAc1DTmik0k6eh;?%ps zau)pu_GL-zrL2-wQmSx4Wpi4Mw+eGaz~z%^=g1_lbJ5FBraoD$6=UpokB{&Il}#LC7udwI|C=hSAbpjm@#OuU|Sz7&e@q(Z)u ziuo#<&0REyyYUxdJ@`woURuR{NC^GZ!2@&^hY>uRsGkRE6gZ#cs8YuHaMnhI*`Mfr zYBP5Khu;C!O=Rj{4cbOt4K@BIPPS@v53wP-qKpKqQTz)Wy}NB#uA`dE;)p|XfgO&y{A`o z^p<;A{OW>I~9NFS3rq#*@rj2lq6!;`N~Nohs;+_lAZK&3(N6xSZbba#5|D3 zuTX3;-$Ve3-(4=cXp*MdADL=(%Qy!Vh@j&XMbEsCrlDm<_pI%s;b5l@@HN5CsX16T zQ+9EHV$F*J{2|6`zRw1LOezO9hB+}697HlVqcq*q5Xl`h;NAy{r(=$xNCh(D^fNEDTZ#t-6K$7tIa zT{}kCp|2UEPma;2_LFHJDaL8L|I=f1JgO#72gfoCTbu0)GvPUqyLFteRzz&duOtlCF=v`$)36Qo^#LJ@0>I9 zkN^DjJpc#swuU(kRuT=EPvD|_+LA0JA>bs@4!03qSd`>alEjl|CAligRYk6rBzaMi z%Nnl86|nCU8x|^(1!SMiQ^!a~eLMz^iiqg(SX+FC~%2mlODk zhOai^F?=n7uWNWMiM{xShHnZqI>v%oS~Lo#Kq^0PEEzf5aAtGkWzTYE2Lz&vMtM#k zK4>{s`LMvguFX=LPrA?Y=8#*Y)|R~Gn4^`2Y12DnOxwziTQKaihG)rra2PGmStWsk z`GUKUGi+Y?srBdECil#>&+X9&(*E3HV-mqnx zW6JB~@yi8sv23|cNyE1Unr6-NX|v>3JQ;6iolv^{SRAvQd;WA@#xD~j5UF^!z(e

1M2zTMk-~?&K-9u3#MmCAEh;#;ic`qojL+-`I_8aSzOQG zzWP@NYdtN{A&6!a+_I?KNwNdhWuo9ouMh3+WzgIO8ybym8DZ?lIqd`F=Bfqax# z1rlY~?*xHuUEw&Y{n1je-I94?X3Q;>ELGl-E?NCe>U_j3&$&f`9U;#=bH+9c<($u> zk+f{PDGBz}yx~m+63Q0dhU#8p zXd4a;xwdqU)yPT0QKR9z0?BdJF|x1d)#eu5FYmMR)%XZnhk|MwnkGjpmd%FM(F;Ns zo1waX9XIhk9WUVH^7#9b{6I%HvO0Ps`5``}1MlfQr2#qIUwknq8=7uEJ{t)w{3xZV; ztfxMvkmumrP^kDiet}yWeyQVE_;rojXXZTjMPF^CQdrdS8~j$o?{xegf6%dv+bnxk z=pJW-0xPFR!vI+W=3-pbsQs!_K*>{gs&=vM2wPzzNnI&Lg3nhqPRuTE2M?$@9K zWh>N^XWOQ_0z2z(0NKm>jO7$J-W$!~EfHyvdxie`Alg$;d&qxP5A>o@-c%bJ2?krR z-4<5i%S%_{GXF+d;HfY_m_~I{v^fXTEMHOUlj)iJ=m|`RoZmFR+BeXv<as~~ToyT{CeZFpvJ*fQ-0fP38!CC-RLv#5r}mZ9={-dlm;aO$eQBq$yr z)LQdG@bkn*ExXTpo^eH%Sa+QWk>U4TJ3kT|kdkwbtCSpde8&0fMISl)xq1l+MEE?A zjoyKnh`dYkE*d6Q5lKZ?5bNb{1@TpAjNRTH@QFFs}P-7-ThqkVrztd9v=!Iu8$&YJ|NgUD^|h%Wa>vpqXk(Yj1i zI&+m#U`f#SqLK6oy8k4S1VCr}tvG`1bng*5l)(@>aZH7Cm{P3_@B~g0u1;w9DDn#Q z?rMg+gACItj9`>5$BD-&-iWAR+j!#Z7~@T!H%6Ysp%an2&^3JQF1C=aQ8cRIw1#oP zElAE(6Y_kJkh6@4Z*x+K*-@rL@Y$Z)7Q2J=L?rt*zdR?Rd?d&Jj5b*{ezC@t+({Le z1V9$9U!VdLnDq6DSLs=Tyc^lSVf#(&O0}mtB6qN31rO(YvRtKCu=9mmh~{sTwQB{t zvn$BtiNK?&PVTtKjP$;b$NqxH1xEYcI~0u^ilt-e=$q*4OUDlO$2;Oucn^i;D)T<} z_G=y53ijPXtY3R2CT^|$QyHKu8X?K>H;EFK`0T`0zGWXFM?yJ_t)%BEHN_NP;CX@4 z23w*?$%{;o%@TKc`w|>@)KQ_95-#)XD*OK$SJ&}!2b^kkAk#k0Rf9}akVFaRNi<&2=mXZ+8gT_=Q3L-?!F;cAE@`!gWJ-_=|AttT RK$1&Hl?s6wYHYyle*q@vtvdh! diff --git a/sandbox-api/pom.xml b/sandbox-api/pom.xml index 038bf51d..0efc41f5 100755 --- a/sandbox-api/pom.xml +++ b/sandbox-api/pom.xml @@ -6,7 +6,7 @@ com.alibaba.jvm.sandbox sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-api sandbox-api ${sandbox.version} @@ -21,10 +21,13 @@ com.alibaba.jvm.sandbox sandbox-common-api + + javax.servlet javax.servlet-api + diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java new file mode 100644 index 00000000..b103c9a8 --- /dev/null +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java @@ -0,0 +1,34 @@ +package com.alibaba.jvm.sandbox.api.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 模块命令注解,拥有此注解的模块方法将能接收到从{@code sandbox.sh -d} 发出的命令 + *

+ * 有这个注解的方法只能接收四类型的参数: + *

    + *
  • 命令参数: {@code Map}
  • + *
  • 命令参数: {@code Map}
  • + *
  • 命令参数: {@code String}
  • + *
  • 文本输出: {@code PrintWriter}
  • + *
+ * + * @author luanjia@taobao.com + * @since {@code sandbox-api:1.2.0} + */ +@Target(METHOD) +@Retention(RUNTIME) +public @interface Command { + + /** + * 命令名称 + * + * @return 命令名称 + */ + String value(); + +} diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java index 39badc2d..699c165b 100755 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java @@ -9,9 +9,11 @@ * HTTP服务请求 * * @author luanjia@taobao.com + * @deprecated 请使用 {@link com.alibaba.jvm.sandbox.api.annotation.Command} */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) +@Deprecated public @interface Http { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java index 3181020c..3ce92aa6 100755 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java @@ -5,6 +5,7 @@ * * @author luanjia@taobao.com */ +@Deprecated public interface TextMessageListener extends WebSocketConnectionListener { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java index 4b09cb3a..38f72f61 100755 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java @@ -7,6 +7,7 @@ * * @author luanjia@taobao.com */ +@Deprecated public interface WebSocketAcceptor { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java index e1017804..9839562a 100755 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java @@ -7,6 +7,7 @@ * * @author luanjia@taobao.com */ +@Deprecated public interface WebSocketConnection { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java index 22e19918..e8801e08 100755 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java @@ -5,6 +5,7 @@ * * @author luanjia@taobao.com */ +@Deprecated public interface WebSocketConnectionListener { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java index 57378215..4a547f42 100644 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java @@ -33,6 +33,23 @@ protected OpStack initialValue() { @Override final public void onEvent(final Event event) throws Throwable { + final OpStack opStack = opStackRef.get(); + try { + switchEvent(opStack, event); + } finally { + // 如果执行到TOP的最后一个事件,则需要主动清理占用的资源 + if (opStack.isEmpty()) { + opStackRef.remove(); + } + } + + } + + + // 执行事件 + private void switchEvent(final OpStack opStack, + final Event event) throws Throwable { + switch (event.type) { case BEFORE: { final BeforeEvent bEvent = (BeforeEvent) event; @@ -50,7 +67,6 @@ final public void onEvent(final Event event) throws Throwable { bEvent.target ); - final OpStack opStack = opStackRef.get(); final Advice top; final Advice parent; @@ -78,11 +94,12 @@ final public void onEvent(final Event event) throws Throwable { case IMMEDIATELY_THROWS: case IMMEDIATELY_RETURN: { final InvokeEvent invokeEvent = (InvokeEvent) event; - opStackRef.get().popByExpectInvokeId(invokeEvent.invokeId); + opStack.popByExpectInvokeId(invokeEvent.invokeId); + // 修复#123 + break; } case RETURN: { - final OpStack opStack = opStackRef.get(); final ReturnEvent rEvent = (ReturnEvent) event; final WrapAdvice wrapAdvice = opStack.popByExpectInvokeId(rEvent.invokeId); if (null != wrapAdvice) { @@ -91,7 +108,6 @@ final public void onEvent(final Event event) throws Throwable { break; } case THROWS: { - final OpStack opStack = opStackRef.get(); final ThrowsEvent tEvent = (ThrowsEvent) event; final WrapAdvice wrapAdvice = opStack.popByExpectInvokeId(tEvent.invokeId); if (null != wrapAdvice) { @@ -101,7 +117,6 @@ final public void onEvent(final Event event) throws Throwable { } case CALL_BEFORE: { - final OpStack opStack = opStackRef.get(); final CallBeforeEvent cbEvent = (CallBeforeEvent) event; final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(cbEvent.invokeId); if (null == wrapAdvice) { @@ -125,7 +140,6 @@ final public void onEvent(final Event event) throws Throwable { } case CALL_RETURN: { - final OpStack opStack = opStackRef.get(); final CallReturnEvent crEvent = (CallReturnEvent) event; final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(crEvent.invokeId); if (null == wrapAdvice) { @@ -147,7 +161,6 @@ final public void onEvent(final Event event) throws Throwable { } case CALL_THROWS: { - final OpStack opStack = opStackRef.get(); final CallThrowsEvent ctEvent = (CallThrowsEvent) event; final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(ctEvent.invokeId); if (null == wrapAdvice) { @@ -170,7 +183,6 @@ final public void onEvent(final Event event) throws Throwable { } case LINE: { - final OpStack opStack = opStackRef.get(); final LineEvent lEvent = (LineEvent) event; final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(lEvent.invokeId); if (null == wrapAdvice) { @@ -208,6 +220,12 @@ void pushForBegin(final Advice advice) { adviceStack.push(new WrapAdvice(advice)); } + WrapAdvice pop() { + return !adviceStack.isEmpty() + ? adviceStack.pop() + : null; + } + /** * 在通知堆栈中,BEFORE:[RETURN/THROWS]的invokeId是配对的, * 如果发生错位则说明BEFORE的事件没有被成功压入堆栈,没有被正确的处理,外界没有正确感知BEFORE diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java index 48943dc6..21971d3a 100644 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java @@ -7,7 +7,9 @@ * * @author luanjia@taobao.com * @since {@code sandbox-api:1.0.9} + * @deprecated 后续不再支持事件池 */ +@Deprecated public interface EventMonitor { /** @@ -15,6 +17,7 @@ public interface EventMonitor { * * @author luanjia@taobao.com * @since {@code sandbox-api:1.0.9} + * @deprecated 后续不再支持事件池 */ interface EventPoolInfo { diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/LoadCompleted.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/LoadCompleted.class deleted file mode 100644 index e0c8a17b73569217b51938bc8461a4c6367bbb4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmY+8Jqp4=6olu+n5ZC#r!Y+(cm=^qun_Fu{vf+-vO#0;Y!)8CLy4PCo8c?wW9I#N zz5r}7FHx455tbo}*~O*{wzq~b*;Hr3;uP;!ZTBu%!us%Asl5zBsB~;tf>WY|{m}4D nTBG8FrE~lz5LTnYLD~x+mAASt2!t#h0Vq$K$Vb97WrpGlVQ(s3 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleLifecycle.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleLifecycle.class deleted file mode 100644 index bca614917987172fcd26a1b444c21066198ae89a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmaKnOHRW;3_$HRWJ>uJ!6B%S7>OGoL{~*D`0PCs0~1ZgQJRLr(O7T*4ux>KK~RZ> zW&6p`vOmAxKLFqy4h`%X*f(&1kV~2i6$rzV=>x*}YUR0ZgQSIl3BpLyeTwS=EiZf< zI$qORBX68kxRqt&c^0Db<7+9Fk>}x&{i~0BR#Ha@r(P;cF*tH$%dWBuN`;e^r8?L@ z3c{q9Y^3yLZ(PZ~MVS7#pg;dosycGZ`p40ae)rtS3%STS0>VIJsQ+gfLIzvf<$b5w UC>d>#?F};iP1M}c4FlNy2EQ>+8UO$Q diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException$State.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException$State.class deleted file mode 100644 index a6be8d6900f4361f92bbb66ae138e83e609b9a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1358 zcmbtT`%lwQ6#g#j)~%F>1yLTpr*5EBUOuvgK%mAYV>9c3ESi|RQn93KN!JnnEFFm$ zjfS87qm1X4MYgEFur|3T=brDL?>pz7`}5b=9{?8dJOv3^1+$owF(Kozf?>>yMNeWx zp`b1hPm&lDb|HyzVHagAF=!Q|x?L%~D{O5Un}zkNQLHh<&5(ySgIe%BJJ@h}vuQUO zaz)E;=-hScyw3H5qlVt(-d^25*7>2MzYcuMZZR(bUeG%YSitZ%Ihxe z$Pq>PJwrKDJm5!Mce%H(n_=L1`?+ji^0lIGad(FYj^OGLN*-?zul6??Ln7~ZPPoc2 z@eeJ9><)tzesHKCDbv~ac-RUkQ!FC_$-L!u4sUg(HoR6N-$xOvbnS}iw*t$4>4<*K z{AWn!MekHx72`XhVi_wko-(|+^t`E<#xoVSaYw}nG!FAUalY5R!9XbT|xxIO7|T^FDTcQ{Lg^&YRRoF(8C<2S1qkg3f%x%k{(%74~$NU zE(ruuxQ6Rsm?ZBmS@9`tu+JDcL+m4Y3{$iwqF9CS)0pYtmoX6SDw;I=1@SXT0zc4$ zzd<|dISMy%D~eM?2_+a85ThTEXXj>4k@ysayXh{D%OsDa<6eYGBZ>P+cZAqfi1^mO zL8@tT>=elpq#{R=B4;pi)Oh3!CB73b)}|S*No@?8wRjst<_VY(a9*z#rQF33-cmgl a9-=}@&&eNeU)4!IrQT_~$oLsksErqmR9XTKpkidnB&2ePuO z%d57fYL2sDnXYXa#RFB_b#==e@i+?%Nn3MvEwj#$F7GJ&ifkz6mb_Bi(NvdSXLP5u zWm>it@D%qo(`8_r42cK2sk`$GtJ!m8@ULiYogubh)v4l+vTkb2dySfASCyJUo^;t# z6=Pkob$$+G_<--BQ!oRbZ5f> z3Cn9agK#_}D#@p*axSNZrmvaCd(Zn(;Jr(E(tf+To5W6{7^2x6O|WfCbA!9}Fq=C^ z4=8J*s{Fl486pe0OPz0Z!zh`gsJ^S(ib~_`ZHa8oP*}6}Y*ky-`P2vhbBo8hiiivb z_;OD~8eJkTqC-R{E-_4<;h!O5j^i`v7I7aP3|%Ls9FK-!?hMrajq$oqb4pi=)mN3} zH>IVe;?vUOYO%aQ&g!$u%ImdeCno5NAkfz%O65^)WTkm|-cAM6-bN2447xC6Jx7dU z$ty)i^G9Hx$&R3xR)Kbql|&!?fMGul{kTjg&cpecXK@7{P0bB>4LZlTM>;}88aPB$ z${!*ojU6I>qS1pm#ayAtt4Lvp7>6mxYo4CujCF@M0)92PpvOY3FH2 d*lFa8CS)YYIf79yxjZh=E)cSvnkqi({{spDbz1-c diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessController.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessController.class deleted file mode 100644 index e86fe45674242a41e05a2c5a52e6aa8119984f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 zcmb_cTT|0O6#ll9-b@9GARyq4OF+vwAjvwgV`{ig)zs_qZ>NURw{f?RV=Q3&YYC_k);|s!(6UxRAfa{OG-(R505Ky zRnhlK#)+&Psq&_2lzFwfX6Tk_Xiiv)Vaf-&qgn^qecdp5BPMgqb<2rh2&GkBwU!uK zl4IKp!8K!#GqmMYo#$(n5;u!VNh3=lXOtCfTQOC!Zy1Btfm&sdZ$MV#CeiFLxm7cD zSMCg5$=soGtjL<8@5>vdLteI0f>Ow^*MdURIYZ3Jg@|-m2d43<>VfTX!xqK4NWeyp z+V1uIx?JEFUJRp6OfQ#|Jew}R%CpT^B!*$1<*LX?x~w(o727guW|_ZHMRmHp9YG>b z39Te_AR*y7dL_(bkYV;Ox+;tp5>iMDu$K~+#OgNMB(#fRxqh(1FnN7!;>XbLuO_8o zOIT>`jrxII7jJbJu79c1C_`Ho{ca4cjaka-IycuerCR0GM2SMC_`Z<;m|b7byw0u` zGr3)c)D2qPcM-MwyX1#|h$gZ0-xfA@w!Adk^Beh$*R+}Z&sSrbUb8qoe*yG~ zMxa%n=mnZ1pnnhv8artx)68gY9X|*ALW=*qRCho(?$R!b9`urz2%dF< zzanrE9HV2PpI*@c4?rL8*>=zgyP$8#+T&C|zezFWNFS%PV3!LiPY@ QzDRS7JSM0D3oE^U026DzsQ>@~ diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeBootstrap.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeBootstrap.class deleted file mode 100644 index 9c5e5fd740d3a5f47f6ba77dca8583ceed420307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmaixJxc>Y5Qg8?#MAf{1q%y_Sfq5p#=gn%C*o`P7-U52<}Z#UfS9p5xPiCE0e&dkHR%)1|-Z|?xkupePJLNmgiLgU_-dCFJDvcf^nrM4XMrT3u-IZaN- zRFT5rpmf1x{Adc3SnfFI0|nz

T9PW3(kV()2UXG36r;7Yg-?Y$@6&%ek)Qj9rMQ z6Bf7@KlQr`$IICP2SMdoA>02TeQ!-V6)+k++{V3|zg2tgg>w^lDDZjeGfmbcl#m`* znJ&l;6aT7dVivdi?UO=t?!sL%<}@g@=B))|=H|5(6jmfwuUX~9t00k@zA3IPl6|r3I#t(y9(lIc6X>*vf0vPi~VaJ`~m(b zaq7VqtazAAX6E4y^XB98?H#}w_9N^@XhzsmXbj3~obt7?tZ>kEsjV^|RLPYk@7bT` zG$Dn5 zI%0uq@l&s(aJ-!Da}ZRX6|(&g(krb=rvgU(hr76Y`?qS>z3|us&ICSB%R-Yi2_>ZS zNufQtEGb_#jm+Y9zl>67&TY6)a!!LnYu;LLX6{~FL19H=RsIEXt9_q!tVwQ3H!|cq?{P>pn_T%&I9l#|{0vrYC1UOb`jq|EV_{LaPXpcRU^|O9TH7T5imGdU! zCsUf(^0jlhCvS3BDxBRe8Ewf;HT@2BM8%Z-l|r*7TZ!bwW^Q0PW9OsAoCR(~&!d6D z`DQj`FQ_~#WbYqjlv|T51PsE*`)GLgx9ZT%xGez9{ z2VZ>iM>*czb}-I3BYnB|?(W%p?mc&tpTE9+2e5$025w_Iha6@M7?_o2P8wU9JJJ-S zDe9Ql;V|Tnc#E&sc@$LwUK1h1SVe9*b?zTHiGwAEfivtjZwQ8w1adbHJ^z3}gA%kQ z;=`cUK_xaeMC3ALVjdod`0x8W)g$4?l7tSM4dKTx!jPXbjJ`>*oS`zyp6|sg3?F98 zYvNrHijs^;592rtToFa(8UrgcWIewX zyccqrcMoYu;uQ~R9I>3;#%xlIZvAsTbEZANCQcaoI|Tc@-lV>AyFoK_#il2l97`8@l;mb-ErJ9aM42AzwDDc$Y z=`r=Ab(~rDeG#fxBxqcjwbJI!>k`BKIW+u}j>fhq-(@c)EXg-DbIu#MLEmtWzW5A@ zN>WoaEY((?1XrFkSDs{7o|Gq_0;36CB0EN_AJ8ZhP_)MQESwnPNWxPoVx#0sYI90jbxBE;Jc37w78 zis&$bt5kxFu2Gayk!++-MY0u5MY5T+iex((70HHl70H⪙=7zb{cv~8DtK_{(|gy yVb}ghixgzBIYm>Ut6Qq5$qw+WD1%h(6lG9jBZN-jmbyKKMRlLi&-E@AR;}MTAWxY9 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallBeforeEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallBeforeEvent.class deleted file mode 100644 index 79e59670bd2b9c6e61f588aa3ccd9559771303a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmb7C+iuf95IvhZc9I%O(sFUyLIb527h>8xQXy!R3QJazXw_G=c9ycOvySXEz_;)f zAVo+#@Bw@jVs?u_f`_IrGiPRJX3w74A3wi+2e5;!DwdSDSmn zxX(~ar4k3{gIMGYEMzEW@0G@l=#-CnkaBer9FB6SPM$JYiVp<2z9(kV^=ns`69;cLPL|MYqW1dSL|4v$?cd}sUL`gOXcq(Ha^Wbzm z2nw$HarPnLLm7y%P@|yB({xX~&2rJxF+HF<%(FxkMc8MkNHxyRgod@l>^x7zzSOra z{L|LfLO57;v5pNFbJ%oIMa{)5To>20xek|M`^tnE9$(%Q8kXh(4t$13m$#VW)uWF? zy{il7hKknOO?goWQg62VB8uMZ_4Z%A?lH8d(DLt0lCeVzzgmyp^ZJy`(V`z(pT4$COzk;00GvW8WL%!Tyi_>v)gV48rVnl+(`9u`H!?d;1Sob zu45Bb9ck1UPUkkjaPq&#j2*>>HEb~)|1XIT?{%L?;8<+v5O>q5H+YPRNM@$8X=3=B*pwuwe|}3hQte@ u1hR^w2rNPUuN-AN)04y(2&sJ?3v`dl7AZ^6ED}nPrV_J^lxx_ys(b^ke6-jA diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallThrowsEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallThrowsEvent.class deleted file mode 100644 index 412cd19ccf13db0c47400f25fa0b6387de5b998e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmb7C(MlUZ6g`uySrb>IF>Oqfwkm=ej7#;=QY=B~!eXHb_EBaxgN|-ymfcNiKTDw$ zeCP-Cqe}0r1))9|cVX^1ckh`wd++@IbN36t9@fjK<3$BCcv*&phK&^)O@@W+BGKQD zu0s)LQY(gvWp0m0(ZHBY zj|?X_DSZr=>>IX(`|a5tw^V2$q93|%;eCDYm*(ST5UC|R;a3uS7;wL F{{pl_%BKJT diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event$Type.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event$Type.class deleted file mode 100644 index f9d632f2bb14fe5a345ef3064cf9bb77f67f136d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1577 zcmb7DYflqV5Iswm?si$E)F+52FKJO(QN%|PTX2!;LQS_~Hky!aU2#dfHKir^ue2s& zFd9DlgZyZmxox#XKiD>zvuEzynK^Us{r>at8-N>l8i94YADny7@4Z&YPCA)ebr4Y)2}S zn`!HrNkxnoT{pVtmg+2VE}rOmv%FGyMZ+4f{J`6&mkVAs?-okrQAF14YYEG7YscMl zjglK|8+NVg2iwU+w@t>ZO3^KCx>cXkw`$0NTc%R6zw^`77yZDmElD`@kMfzsCLKrZ zjZdm0w!a;?wR)8@h2p%RE*49z&8d#mW>7CLcGve3-2=_8)T>2r)#s^b;)=}jJakO+ zosR3Uu&#hE%GGXen2u}6>hwr%>Nt;49T(YLVl&2OoXrHANj6h#E@M=}i9d(IiX`+F zOO=3nI~7lKsLd93ykd>|pZ?FTB;4wpw0Jnlj)cEY{&@XlYL1@ZFuivzHN;8)LJ}j8 z^avzL0!fuX5+;ze2_$&}Ng)s&=Fw6{84)Bf0|{4%jT7=uYe4#ho+E_b6Qi+{4U4rA ziob^0R{T7Agjb8nGoR6W1exP|j>Q|~(VJ1YjybVTM?z6taSkE+1Io;mkpqN3h~>_5 zf3_=_=hksc#4JF?Z7j4J`9VVXclZUe6H`J5P(LCfh$aitCy3rFNWUN_!h#G45>*5l z6eOk!a#D~}(PrFf!OpY-&kA-f+Ke2EM!r(zP=nrzBR9}zJG~9`+fKNF0ozd;7_=R= zfs?iqCD&;J@|`6h=aBso5-V>GdIlPOkD;F~<1h_rnuauwRix<^Y#@i1aIk|d>|=yR Y*PO;3+@(D|xQ7db8fB8Pgpt(HFA{`QyZ`_I diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event.class deleted file mode 100644 index b9297c594ce5313c1392bd5b09c3adb452f23c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmb7>-%7(U6vn@Fb#=A6Kf29b3WD2|1-(^77!HJ@7mnViUC@j!9c@?ivAht$3m?FT z5>JBgsHmkjkQrB!~-a6bGWItu90X|kXw zOxzDF$3CB8>wpERg4r_n@<6mh02BezY;LI;j<8McV7-wb{Mw5)_> diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyReturnEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyReturnEvent.class deleted file mode 100644 index 142201af2df0626da7461ca9bac4e7285c6b99fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmbVK*-FDe6g^XGV;8r&RIMurE~o*YL`4*h5Qqx3Dn7|19dv3kDM?!Nv-Cyq!4L4G z#5*b|sJP6-+b*W^s!BCpDZKuv#-1NCR zHxJyp@RGH;V}|s0SQ8B0j#Og58Mq>v(?t7OXtFc!$&t!4x{^&XENM$(E2MZ~irvaGns6 jP(UXY(q0#NIy;YU^iZ=DdI_aaM44=kvidNDkW8lSs_Xo^9-r7%d!eovO*Y~vMl>dG=%Ai;KX!J zqwrF=o?MzfAf(sBnk01CDv&!DzAGa~zYz*{SQXxZh?K@}#&mM3V#1VN3Wa?2^m2qs<2xJjjRnQ2}rG}a0 zy*EP7mn{>r`{6}Ym77X8S^B!loSxReKpsOF&Z8M4goXdMOep^x`e{T1qlDR?Ltglp zaIWh-NBULdtss!mx+mgTGR*~Rd%Ln>tvMC@=-AoX+dbST%>9D1)TD1`z_EVJxYL_Y>s2c7|tVcb;! diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/InvokeEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/InvokeEvent.class deleted file mode 100644 index 0ced220528261ffd777e034408bc879c8abab022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmb7CO;5r=5Pe&U1+4PnC-PxTOavk{>Jej1h$c;l7YX+*Y~mucq=iO*mIq?u!5`p{ zGS03ZxPh0Md9yR`&1~lD`{NV9C8`-Dagc_ILuHB)h$wQ049sOnNk0yr zg@PN`(wDOv3uOkg_c|2}w(I*M?2LI7iHPB<=DOWMFmd=;dfemAD4sYG_lI8a;_#_- zL@fN7bEoX7VrbX<#MKFg#FgzzUp&kwo(Ox~8&jsx4F-JN=b=>iFKN!6BuP1I=(u`x zt=1-)nI5^dM&r_e44KDZ9uCC4R3qh@$L diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/LineEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/LineEvent.class deleted file mode 100644 index adcc939ce60bb811788462944fdf3f87be5653cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmb7CO-sW-5PjRmrirn&tsm94YC%w|HlRmEgrX1#y;ypcO}pUMG$~12^k*rE;K3i@ zj}m92)T1_moi}gi%?va9@%i=+-~@F8C9IfOz^VZaYdY3-lo?E42BJL~dLm+A4nyW# z26B8sVBc|^gD!*C3j2Z~@6IAS-1CVkx?zv|T^>p0|B%}FPR0z!ZZ90#+?O8rxILH- z?U)CBFMP21NZMj5g0Zadg5BDdbydPIp9;S zW79$nTNbj|wvd6&a5zU*YVz-BCut?=QpXO%(ch9Jc(?O7qL#I9V>v+}qL$C&SkQ1Z z*J)odH2*Q9-()nTQ(DP<8nwT@f3}P|J&Xl>alU=U-HcT4vg*?gl?eFl3) zs!@AE`iZC%7U|3(P3Ia3)(Mwkk=OW^V2K#@<>}Wcp+d`qQVCM!(u51-rBFnbtVvNN JY@l+v@dXe5vAO^N diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ReturnEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ReturnEvent.class deleted file mode 100644 index 03c9b1f605f36cf3acfcf65e29abb72f62354f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 zcmb7EVNVl55PeHqj+R29f>@zi5u~)x13{(M7zx(ol7b1XB#j@)wq5JN^{%nfLb1?0x(G@e6?acpSzJ%tbJa`7k25CzlHv(nDC( zkcl9Rr3gY;){xVnGYmSl15x)G;-v%L<+{b~rv6gJ3bgygv`zmh!&KTZ{yea_#}M3d z8iFBKGHtQbY1M>V;WdjQ@sd;L)*g3FxjqjD{kNvapqJ`SOXrqZ<29}ybX&T|?MBTx z(s|p|MOWCqzAOBWYZs+YOu}u~sSD3D8Vt-}7&7gyb1004hE*a_dDkY$sA1c}-Lkmn z2|_8RF9D+f=45{1pI7u%_1x8}F^rUbUO(LCZFPC2_$oDlAyRfaZe6@ErA}jg7tP5Y zM5&F*C`PdsMHC}ZtRu-Vd(j@lvP6?xn{KnyB6W&KbmiB=>r&;XxD+@kqjKFf3oG9hW+9sQxH*HRKtV{tt1{3Yxs#V&&ED4#S$9ysP9E zQkZYyQbYFm^Y5w;xzvGbl-UQb_=ijLg!Cnu`hIfid6qg zt|YN=N!qwWFLjunFT=R(IC%r)k0M5Pj8^*y(hrDbre{vT&M=T!K1JZYIyg>t6algc zgmIJnX~b!j>80QrCTK;;n8bA|D7`8229zh^WUkEWft^C54+N0U%p|iCDiI{C> F_zA4hKB)iz diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ThrowsEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ThrowsEvent.class deleted file mode 100644 index 0785487191b2909109a17a7cdd55cfdfba3ba96c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1341 zcmb7EZBNrs6n-w-C>!H#fI4705oBzz@}@Fpj09(BG9+;eX7K~L>*^?U?b3D=e-J-F z6N1sG-~CbQxh=4LAj-1j?3~kk&hy;ooc7o6uRj2+As@ya%tbJW`7k1QD8dB^sR1lX zNJo&tQUoC^OUO!)8N%+NZGGTXLt~gM9`QDp4Q|%u@?|>D(Em&~b@w^LR7z2SdX-nXeAI5p4mWF6 z>qO>FUDn!~>H1Whg7AqreKZ2C)spj0 z(z3}CMyGhMdZekYgvU`l!KQ%8F)a5qksF;?yb*Z|E??L ziqNG#ltHty5AJV-A%!koa0R0+_7QYA?F(iaSzBm7g)3eZhJAfi#48fFM4 zOAssAq@5S^HhhpPdO6G>;nB-^LT$*^6=~=IZST9X8&+r^mC@qGz zNV6T+7z?3W`W)A@rnX_qV!hJmlFgUOD+W#YjM2=S8m1?#pBP#~v)q$6#56fNGRJi% zqT$3PRUuX7VHoAPo$xtB<3*gt#YuKdhtHa8J>>AY^n1k4tT)z#o1ENd3qXTA9emA*5AcR5v_FNZ`b@eZ8?vM3x%Q9 zAJ9dsvuwQzBRduyyBG2NXu;1o!_ois(QpfoHQYpls)-7E!qd4v2^LXU$euoK(~Z>W z`ZVle0}Y}kk%AU>(f)_k3U5+etMC?ar^4IB-3nhK-l_0q;wu%tN_?%t*NJabc$avu z!uwQ>7L&6w+Vg-WKP0kgc7;xL_#Mh{{~KywWKNI19f*f=K>HrjZavx^)Kg~T4(<|> qPgWJL=N|5tHFY`}#WsdtQTt3k3Yj5?0og0S0F3R2T<_hdMrN(*VIV+euP{|Ky7^ zGLAm@1N>2rCrOP!iK7Wf-bx zhPvHq)Kqhi*L3ovDnjAOclPUncnV~i+$1SzOV_cQw2w^j z(YkIqwkukuq7r4&GwvUXIR}W2=_cJOVNnx3Pzf(lln}#!1j!i&5tlH8l_*vvOyZ7& zM|jNes)y_3V|6)-bl(4VcBgi%DmKH+O^PzC-Xy$(1KrdH|3I3&&-HSzyp|WM)qF3} z{?_Tr(dD9NA>RX84+Hb`9QJ{sAHhVzX$3$tb;F&hA@qKR=^H|VqLO5l5I~6LkwW?$ ztT1_wKw#fGM%Y5a)TH~2rx;=!Su}RL}()X4dDo`7Fu@;mAv3K3rfRXWL)Y= zOyM5!c6|5A3cA(5BIzXm6FSlf{r11mIUhPtFdlT_3Um9nXH=@0xb-ikmJ)N=@J5?hX%}*dGSd(Y`|%kD8X>)w%1K+~j)au&amM zYn%R&&U=o&EBN)Kl5%1VYuY5*ExRnfG0bg-)p1}{tU+hEcUBJfJU`-*<9qt45zDBnSjPs#-SHrj zyHIfvvkVW;N*_q#40+NkiU+B?+}qP%m>t`S80wl~jG>|UY326pNQj37rB$0Jm?B8( zEdCb~!h4(y=w)DswnyAE+NtEKfhBtPdHO{FDUb?Kr0*1YI<1V>OzjKUXEG#Qpl?F5xomQv&92MZo4U zPnINL7lyDd(qgYt`-SueD7BwRf5cp^c8p9Zdkk3^IWoRtA|_0UnrEpRz@p0b3ErWW pcTpz)q=(9|fU9&)hE#Yh;~H^aCs)EECTT5^r4YYL6-nd+xxZcrYa9Ro diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter.class deleted file mode 100644 index 1f8a7a46a2fe8c36286dcbe79ffdd4472e6e8da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcma)2%T7Wu5IqA(<%&r37g$JQY~tRH1`<{-*twgQO72Z*N!v^C*If7kew3l0>6*pN znas>N^Z5Dw`UdcXvA|H^T3{q_Lm1EYXr z*{YK5-cR2Nx25*teTpgYmQXEy8??!)hA=Anj}7mb@Sy!hvaJ;>md$P>BfFLId&%2c zew;Rug_HL?vZQ6VmT#&tIuWL4DEys7cs`@IOq-PG{}+7%p_8qfU)Sjo1TKM$gCpij Qb@Er}XRLBxFWUtM2Zp?6+5i9m diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/Filter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/Filter.class deleted file mode 100644 index 16f3de36eca163a006364c6b06427edc3acb5d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcma)&!3u&<5Jm5lX(>gYk((a0Z5aeX<-%R9MtzlHzEG3CtwkTuM@3pli(I%GI1F>< z-skK705F4PU|_%`365;Fgecu$-Wh`cZ5-(HZnh{ zpf)&7hIaQFwkn0`s%z@YQXmP|*E6j`5Nuza1;?Ss9*d|ri;R=NQ#ZkvP#iv)Mg7?L fm)r3o>E}9u&?)-@IvSx14Jc<1dPxXI#nFEQH$`Rk diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/NameRegexFilter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/NameRegexFilter.class deleted file mode 100644 index 6e141be2b701fa1b8ded2e451fb46eb47a0b8f94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1288 zcmb7D?@!ZE6g{sSn;rXs1ylsx5R|P0KIpXdCCY6AIs$*nbn{WVqDv_8lGsF~HESA0$mBkqgs^O+z8Wr`ZI z6z@^IPum|5wt@;FwRjsAaF;S7h-6swC503c(6Bg`5tQesrZ)92P`)DjiIP}A`UE+a zqB_B;B9}|5nSxrdR I$clpX-;p6V82|tP diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/OrGroupFilter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/OrGroupFilter.class deleted file mode 100644 index ec2c4152ebd135cf2e6629589ec387c0895e3678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2073 zcmb7_PjlNu7{;HqY{_^xyET6>K=AiyV`yCd4BI|_2<*y9|Ks# zwKOugq~UT3IzF9149ntaMO3Sz`b<=7qWU~dRYgo$*KkF{2E)W{w;4LYdJyn?4CPzf zw%@XN)2;J5w+`>NtPb}Yb^m*dw_PimYkeV?tT1RbZre_$!@xEfvb95gmv1zAr?bOb z4#VkfF<>>hcgNZb1J}DlYi4SlZrcguw43+Z&eqX2b2Zl^J-4~-9DCardFIxrxaVrz z^Zby9uJ4_+QeAaDH(X<|3a?|dxX%#Z@Ec@la@+Nsoo=h{1UGrTDNXt|Z|?KJ75)BT zJUnoT%HlXQtHGCn-)#?|X7)mEe|v+sWh|MeNrp_rm&l@N3_FF*;}njMj6gMFsQ3+o z8YP#ZG>+(jTJ^;V$h?&N{QstT_LW(ldv!XqwU?kQ6kbESFr97qH=OXmZ@j=-9ffrS zvGIoF7J^H(N%U3Bws}CG2OaX0j_FKz5cuD9PI{f*^SgoVkYsWEjvSu_u^B`9s?!b} zn}<$=!PxD3q1$ry-HuBqbbauZ&;iX2otXdDtmt?fR~d?9-vv6dnAGtu&g(dZH*}oF z869tmY6>|WZ;7gevW|HyFkBcT@DX1Or-ZZUDyh~F9Xn)D3dMbVL^oOnjIK15HYF8w zC&q*Z*^&&|k`mdH7}=5@YUB8Uj2g6hntCCvi%~mmJ_2K_{M%kxIuNc@Jliu;%|^F1WYau2FG z--Biv@gC_l5|?%N$I@E1^quPT*3vc63HvnyN-+4LK$CU zNxHcXjoJmghxf@TX&d<3#Ro*0$*~WKuW-GK0zE16sYsOK^2wCEg#Rp*r^u3Z##a6% zhB0v{`tGabUc|_k$bN!~N=2iRq>_?ug^id@fGRg$9s-^p2+K>c^iProqvZb8M_Zv- z$IzDhXiX#a2v6#gzP6uNF>Z0f+Nn=%E4ROWnwEa-xB2@Vq`$>P&3R46I!QVQ{BDNCHu zX!h)nGM-zAW6=j`lY4sZ`R@6?bI$G0UtfO!*u`E9G9IdUgp7h!1vwQOcEpm8Vo{}F zULYPvu_A0ifzBWuR!7G^QMT5xIGl)#Y}eY!}5XKHW`*{ zmSY|d`-bVAaKok@CCFNT&+sBs>+uoSZSHjRhVNNUr<9#nWTNJ_xZUKQCDKnhWQX^O zD)D!I>Tua|EPtQj=0E6;owA`|%hbuFwtIn`ro=^8a zO-OCHL$77Nv_w~8VtNJ94h;!$XI3>lK~cdjLw=soYgorq4R>%?!y@7uRuE@cx@xpg z%Mfnau0yfq>tn=+@duS#L|RcM{aq1eO1Y;2ry?~P2*|V;DmM=0rb30sJMH4lCOKa_Dc z67gW79@^PXe>3x+>AtG|Dz))pfLO9C29K4?8IA)~@SOD3#HH3Y2X1LK!Rj5JXQ>wY6+I*Or&O zZGTqc;OvRDkyB1b_KY4?*EoUw|0Wr_DEb2F+j5mnrW$oSbvoCEC66W5_7l+pxk}eM z9n!sybzo>vm|I-`)|mQIBz@IskYkx!Ki?M(g=C%o+@@p@rJ{dXJ`>pdnXZsym^)=Q z{|j;(8C`#7(5u|t_*bQ(z|NmWD=;&7qjJ!qI!|o&0vv;zF6k!6B$u`B{bb?|AS+=YEHOrt^gCNXd9t+8du!tp$Fpy+P J^BO+ReE{-r!L9%R diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/ConcurrentLinkedQueuePrinter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/ConcurrentLinkedQueuePrinter.class deleted file mode 100644 index 84e88d8cf74d52fe93d9b219dd83a4e651989d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4966 zcmb_g3wsph6@Di>$z&&!kZhAEpxnh|Bdl^&p&EmMCQU$-kO+!0*$l~$&F*$~mWyq* zR?%9~wu-GFB6v%yUT9xkNW)$o=V6x&`%3Y!%=_i!5g86> zcvOTQ)Nu%p$*sp_^@JGsq->uGV;EmA!#D7>(4G<6VV$%iI-bQhh50#g;HZvccwUAV zgk?kyMrAc7!*LBS%Gn7GCx!cz=>C@Qyrg3;Ue@r6hHqCecMf)T^%iJ*C>dz zZ8f)mZ&91ET5<*i^r! zEuI>RnF+hs>@{Osw++QIX0oq0wIgPx?bv|prekR-0Lv+yR6-Dub~7EARP1R|usV>GUz+tF-p)yrN-|zuE6_a22`0US?he_m z0-Dgx231hJC6UbxC|FYWk#s~TFr9U+t0l1$8KZEf)ks>~b7Z!mf=b8ASZ+9E4Q1h(`5hZl;c;Mg1L3Ag^Nwpu4jp?kf??SEYoqDER#+u%>FF@ zju*@pNu-layH;OL7gMLY6u>D<8470p7bOg$@Qd-4c1CokvM&3@by5kcqzPKar3vjB zA`_W=y=Gw>P4o?&jwezXYAjtDPXx8Ccc!vV+*)l*#m+7WAwgmn3T_$b2D`7$!>|tm zP=Vez(27qQcn#k%(1vye^#yMhYFknDT?5zPS_4<3nTS*HYC)3?ti~Dx9q2UBCBu3d z)?%H4Do;u-E&Y}wih2xu53d`z5jPol1K(G0&Lp1?(@j}B(I?z*;s=bkZs3P_%fQ=m z<41UhS^3}%15H?^;j{r0KQ>@ti-7?dT4mUZK@IO3_z8Auc+bF3kumTyIdNq5bNoWX zFAe+(g9d&rN`8ZzH2l`U@9=vAe-KJaxc`VhiCEh}62#>hlU5WeI|F}~1b%Fit82hX zZ5MzDq>= z1h*a^u;PQwj+5fIPN?6a(7cmsy}P8{>-L@{qB zn0Pbs$(xBa-b}dR+$4y@xso!7E*!7p?scgAQUuzgV^E?eQM6$Up%JLj=nGIsQ9ObY zQnd}CF_exV9BmkZPC^;kj1iPaXN{mDTC0v=iYzOmH6*uZfizd&VFQG+R{ zrBl-|A2BrGVl2ZYSivv%tFV~ZxP)N56dTFC1oFwq7BuERHHg_&KS;}v`W6QB_QPtuxPCHxpNvT0*yrizJbgZ@`w%9 z3{3ebrgEw}1Wg@=8ahmR$n#h10KE~ZhR+{J-Aqa`iXx2!YJzVsM~QzA#fmWz#(&yA z7$Uu46w`a6&yng2t>6siT4RVR`D9F*9Lbp+L7dJg*zDa>B*}d_B{l_!l6k(88KUGQ z&SMVGr>+^1nH)wjtDxFWs_nuYmdvEuc{#Q7&Q?2zYWSuEzTF@Aw%8BZ?0snPS94y$ z+%~1*Db~vi(2rr>C@vUAnQUm!1;gW~C0D-lGpHZbr?VPru!;3^BQB(yF?zR%+9#~4 z;fWstu%7(d+02{etdcXBuc7~aXp%y{OM!h?a+Y+JGc5B(`6w>*!tU3uANGFUA7B;R zc{wc)aFNW+i{h2yv+-P;ADJjQ{s(qbY( zmo~51L@UGs-)+BycjmdP=iKG%PA;k22N)J9spaBDc+VqHk8(xCsN+<^fYu*F^hGqN z=<(?n4Wqm*ST?+Tl)a(xTJxRtrSji86*C%JYJE$+%QX?dRO zr3mS!hIE*r0?krzDgQgUG+*Y?!1@Z)rco^Ld&~FMhl1TydvBijvOv6u$xs+QR>mks zr-FkE*e(l~tF>x)&w&5{mX*|$>_zxEVuXY6axJthOjlV?7w^LjT!lw*$v$)($D&az z-iH?9t|E7>X4R@Jlw$QTxd_hKf4x1=U~M_8$>eq#J&ASyJ9rNiS#X#TPuGAzGt zc>LfnYA&Zv%Dl{@52N_d6MLo z=9%s%eWk)#f0ECYS2G`H4Yf&w$b&gGm#t~^9e9g=zs-|(c=j$&Pcv)p<*A#V*BE>R vH!uRU6Q9rNj(TGF;GD$V4eF`V4WUri7_N98^8|C1yjLv3-R-0m;f{X+A(Vqp diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/Printer.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/Printer.class deleted file mode 100644 index 64113ec1db167c519ab0a242647b4df534c2a7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmbVIF;c@Y5Znu~9YO#DPoQxc#4vR3C|od^ftdgWooqxRBTF7x4!n(m2k*a*_H@~aA6om^3gprRMn2i0W7y}-I0YgMRpZwr<&!+?5!K~-I*z*pAeP2h2 FKLKb8ceVfk diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.class deleted file mode 100644 index 64332b4ebc1fbf7233ecab4843407d4945e5cce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmb7=zfJ-{5Ql$*$O$wyCO!f-PGUFP_kA;&@1L&&fENri+-2xz7!dm2y=n+jD&b)?uVgD+iz_*gt##%2X+;?1e$y5@ zvvmqRE_EOOkhu*}owm;>j4&yD!%|x#M!4EG9K^jFzh_xn{)lnSJ2k-Zjf szc7^+kubZ$`KBiSwNJfsiMHPTU)UoMI;n2b2dGQv;`TJ5mwE@;5jcWY7ytkO diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.class deleted file mode 100644 index 0898c4d0631ecdcb56dae0840067676e8fad20c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmbV|F-`+95JmqaAseWuI0G~pDea~~NQh!3B(|Wo%_#9^V=uO|q~}%?9DqY1yjj5k zXuiHiUvK`**Z0RKfECUQ6a^N9g?G2cNS6rj*Hxo>b>t|aZzb_IrH&u6)Z^euUJnve zd5UqX+=lBEtlN|~mGOI4t<_2^Zu&h(oSki~(P?50y&%R#<;c}pi7d+}FcbF3hll&ThW`rqbgTq=_Jia%_)7JsOBW`otVHi@rU@q z>a9e66<=Mp!c?V>!Sw0jg^-&TtqnrBn?IM0+dFQZuDObR(DlVKt?a$8Wf|J!y8k1n v3_}!^esMl0EdPh~lSY{R;;ej=pfdttl>PyX#)K=3fi$m?B_(w^>zI54ZSq`H diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListener.class deleted file mode 100644 index 2c605dea086589b5390dc7d331ccdd06d113daca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmaKnO>V+45QX0W#T2@z$|a~&)e>9Qu!_W@75lLnwT>JcB_VJ&794;>p*m?%cPvIT zZ}h$Sxm-_Y0CPMkJSvO{Du!hvp(eb|G8+rc-WfKm^QO=hhpmZ6%{!;1rF6$GUN?mC z@@QpOyBI2kNzxy2Us_o?FNBwl%Uo4Ukn%m}h6(d~}Jhxu$Ieh80$;GBa jr~j?b?=l|Pco`B1z4RJD1418zq#u%M^Du=?UnSu_oqNvje@^br?>|3&0eFH(Wt6aO!oVE^J0>*THOX?%zW7QvydGk0L=!JCADZ zfHJQB3qPA?0+y;oDqU|zNvwPb`Sh5_oZ(r$kxM3vB(-u^4t*ZaLLxrThiUar4%>T6 ztPP4E^HXkn+#lNSoUw3YlISfNd!tbBK~iBWPs$gx+JrT`!7OyeE2&OoH9hb>B~K^z z(s#WelK${S#G_zf;DLn|lr5Ne$nZ4B6{=VRP|SmOcQ(ZVnEE zR&VsNLw|)qzYMEXR7Et?s8MR5t4Fi+LMznw-|)m2Yb8ETb!HWs_SlrYfx?qvoTs5A zCXz_P@ktt%k{w3*$519FOiXEYri*aIU&Sd|nmdMWcNGR3m3}@xP-yJshYV+FXfpkF znnt?Vmnh*$dzivK=cS*w>x_`Sn zom{%yuEMy(s_t(6LF9Lng9W=23W+JhxGtGJPhDrPT^UF+W$^K zq4jUS+2RdX;LQqrP7radOR8W%9lWU6&i^%sRm!tT;nq2s9wYqO%X%}tc?gd_^lu5g2P aFmuttGHw#paBH^S<{QVO80ZSF1HS+nOyQ6K diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry.class deleted file mode 100644 index 2d2abaadb6391d868bf2ddf265c58a93eb9326ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2284 zcmbVOYi}Dx6g}fd){hMhCXa^jNFfl%sk82blE$tfO=wzhf`qLiD)C|LEXf8x!g^EE zpTd8r1V~AdKtg=xH&qqq?mD)U_(K;OoSt+G(4`ly6;#*fAZfZ{}n2*|R+udmDZrAQA z#GJO{DP$@K`l+^>y1i$8T|clJUQr=gb@tlYJ92G>Xl7RQz-`GDW%nSw9_FY@= zRyqycq+e~crBrEjT9$4)bzRri!PA!2)$QGS=h)JRj@5L!o=t96)oy$4vl26wSI&qR z%Y+>(3EQ&5RCXvqkMGiBRXwd%H8)Ac4-GCs4%+I3{!Ta0=84kgHk zVMP|x=dqq0p5fgL1LT({HDy_+a5wgBFKE$fb}0?c+o47Dn#++w0E%WnK&uc!~FT)zgh1xAmdlS{?}QUJ+Kb6_(ngeP1CJ3|ib_ z3X>FT#I~O+)z&Vrm$OT?8vB*fjfUOrE))s{h4pM0*2R(OBF6;!zO+3m=VcnNmyb=f z*8P&DQej=~9Jvkqfg^_@9UQO~solhz$e6f_Egpmrr*q+k1U)n{g=qtiOneEJaXSpc z*|s(D0X{VGmGG!w+k}OT!g2^Gg^7!ORJiq80OytBJ(rcUSP0oyhD;3@4BdqUAaJ^SVp1v!L zQhukZ^p{R0r3f}BJ!nqKH{2({#!yp|eWFP@9fTRECAN8jDOw7QmaVYKnUG6Jf)k`K z>c2Ilf8vtEP`~z}}c!F&8kmGEw64;2Zb`}-)`gZTt^eD6=$ S3)zDa{zWlyh2to{{QL*jga`fr diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener$1.class deleted file mode 100644 index a997f999b515de1f219e683af16d765f327d0701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256 zcmbtU+iuf95IvhXF>zg*HfgyPXdx|0kZ{Wb2oXh~(n?4veMr^!wX;n&a@NRpA`m|X z688r_fR94V+LlNwAyxHSyR$o*Idk{#KRf*~E#s8o0qbhrgAMFQZr}5jw}CQ1C&YpNjpNP;oEg zKPRM)R5I=|ylm!!YMn3`d%-|3EcK)kZ>AGhgvZ?ViL=rRJnobHOrn@&Gdwo4R={?s+1juHK=({*bpDFHwL4 z?!`g)o~rQdLh+nwmrR+V=FzCdXXgwXG`uFwHmg>3h3HnKZD9e_t#s?6Kp%1155Iu5 zzoGDnUIi@DStc1^8CU6COQo1938tQu`}P=ao}mQsq+Si-Fa|#2T(8^g3=3HR$&RRB2lTSSCvAFB{xZ Al>h($ diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.class deleted file mode 100644 index ec5c3c4f066135e964ec1148c3883df7591d6ed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1485 zcmbtUYflqF6g{(TSy)z}<>dqLLDjY(i>RMUniv8JN!7#>51r)?t_qB(cKo&47MQH>$s_5sq`%{A?1oBi)dN?yxOt%A?f5c2 z43)r(fA3npf|_cL+%+;6IILpEDP3P~QD zGW7KN6wJoE9_v}_EofSghTK+{>Ph`(;3ts4eD?&Bf~Ut()pBzQAW-hApxsNrT0M5v zLF@&7WWwQEx~__%;^N|>!29m;&pV=1F5QKkyC>QH-B89cC0LE%Fm%p5Up#QcskZQn7IZHwBh^^6Vgn_v+#fy=v|$ zHx?MZfan&yO`9@P(oOLEf6t5@=5KVi;&MZbXydMnv5OX^}9ZT_4# zk6V}`=`?Awv@;|96mW+#9l)U#v^fS4A2>0n59mw4p@h&*H?Trlr-6IPIEz7AU9k); Ge}4cUca2*B diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Advice.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Advice.class deleted file mode 100644 index a06906dd4939791cd4c1b5742bba59c39643b1c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5015 zcmb_fTXY*&72Q|X!;&VpBj@ENq=BYH9=lf35DK+%9Xk$oYsabWCNyawV|i*#B1?)i zc5Pne(eg@pw?G4hKxw-cs~YS@d?m%#UlsAS1iqd^7gpur8)zrM%mYs4{;qXMhyqL3!&YU%8<<2iJ z=4w`Hey+Tdvno!m=+s=hWLI(YEH(RNy$%(QXUG3P`-?fHd3%N4^Guwwic6Bu zEaa2x9fbthQ__4n-e@cGRBsXrN3yrzgSr|Mf2$a(Z_95l+q2yv`OI49+F8HHY@@x9 z9wfXyuj)o4kBulP?7U8?@j>d(>o#mh!2k#9X7|A8{WlsM%y!R?QoXfc)e2r^#qEnr zR*|U^io`Itl%)m6E!|bv`&pCH-I^5qh9xB%Y^VNfg#;~5ZmdQ-DSIVvS6pvVe5vG3 z4utG4u&;nw!>RchFe?pniv-Hc2>pEcRs!B=p&4mkV;=RX(n!H_N(%dfoazibQo7Sm zP=`)VcrK%BJ8t~A2A%Sp(fL z4fKfkzAWj*JqCUtvp$##xlP{*JZcGCG4Mm2Gw>r3FNrvd#|+Ga{5#jl>T;Ig8CXDp zPBc)&n1M1X27Zi}8OY`m<`rf0Y#JAY1YS|-y_sV3k;_ZXI!~dP!yULeKF4LH48L!%lJwc`B4*Geay#ykk9g_P4L_3 znRf9^vxO71Fh%{7+QJS`qhX;<$4@Mb;&>Qt2XVKC;hrJxS>isn0j}f&|03Xn81r#Q zX`UCoNHo;v<(U5gBw9^-3W62e?dNk z2?9$FK141OwIo>@yL)E>4wXM-Km`e0)OcRFk_~4jG09?)Ehce-=^)#kqT@Z_97p*U zBXCmo?B#*C=am4#m=CD%aHw*sS^23@SWd6!hiCaxsPZfx2~jqhm7fb$K84dE z%3GS1Ukp|LP^fZSv+_?ul^?~K5X&9S%D)Iz=Go#a4>C3q>bO)^X1$|$3Ghp1;x&!n zRa3l?0C73!h`~Q*+(ks^Q!wnAW+J~1A>y^n#|iS`M);-lC3jMiJN%{2HRr(Z0!XPw z0(}JMs3&QCi3pO`Io0zrQa!&#=VioNUh8=aos$CE%ik4b1e?>;l^bd^qx;TT>zAU`Dj;Suf=J4RySYlEhvJ=d@; zg44|&{|h_$UjrUD8rI}8@C1>RocuoG13qHfN8BDkv$y^h082N((r|pR^BaQgxDo8{ z8-UfBoy7&8*~5Mi(q_+9>@<6?V%Pdsy#wJNOs;?OK=@a{xj}|rf`JYZc*zQ0b$s{{ z{VWH<>rCB^df|UGve#bQ{Js0_)ff^_E~4ZE26H#ol)I`mfV1ARc;_Mu$+(yNMtbl~ zbnzU&V^TJ~`vs(X&1=}hD4SRDj?2jO3R`~KdkuH;ZLipg>f_)JIgC{Xt*R3pY8!T` z9k^5NM4##kc;{dveh2;dwenEDh$?y1bn5Z)q~ExFBRfqZ@-}uQu(aL3pDgpkll&0D S3f|8##r@xh7x2EJuKxmdtqlMG diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$1.class deleted file mode 100644 index a4487c473117a57b08e51fc3405948b5e0fbe78d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1300 zcmb`G&2G~`5Xb);J25dX4WZ?uKq(MV5~Oa!g+r@|5~u_U?IBepj%$0BY;f$zcA~yO z-v^{ZC6IUk9ttrVTOvZ-jII5c+1=mF&dmP&_3a0M=XhF01@~-NxNl+GhJgn*X?83; zwD5?bl8#l<*kgFv_o68mfpUc__+&BVi3oi+I^$xdc%YJ0hBD^zEaiv(LV5Dg7qe8x z{d{GgSO+RpX_ukbEDCE48O&bfONRBn3gz*9>dN?3xB+SE{m2u+P{c~hxzf}ZVQ}7t z#xZhMJyvW*$8_L?A@IfT=wA?5a0 rl>a`Q`H~$j=f0Tan>KL^x0mA`Y|&_v-$0F8oz^Ne>dzqU4U~QZ-5X-8 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$2.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$2.class deleted file mode 100644 index 1060fb38711bb97333b70d6de66f21eefc591ffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2982 zcmcIm%~RV}5dS@}Q7l9;5J-U1q{OARAqY$YEx2yLKuTkv36wNRzhwCZi^w09WeWFB zk3F}SOs1DylS4_TnaOl|?5+PzPqh2wF98~t4ikB-_jcdv_kO$kcBMZLe|rTWhMfR< z@t%x6ynhb;GI}s8V-9gK`#?qlABx!x3G*@nSP-|Qge4h@5E8g4<0GsH^~Vx!$>eOPi$WP8D>` z+|n#V$W^6JIKrT;Z@{|0cKNO-=v1 zVot{8^nmr$i*U#rg|emdWkVFlfM*WIMHr}-mh!q;C>if-T&Y z@R@>pxUb*=K9}%?f-muvg0FFxVX9e&a6(g~wa81lWfbW!3S><|8oC5JZu89`j)bfR z6>?>NC08`biDMcC91kUIE673@`xy-J|G!TqB9$#%+sXK<*;ghj8HHC^YWQfP95 zUPb(Mbkzp?4cnpupt=bj*HK^O-;_0zUL3t%&E$TAXiN~zyk4TtTa0*iHh4NJh6~%= zUgWx|Sv=#a2I4&&j(BC!Wh5F#HQH0ciD9>=UI#R@4mV!|u*nkLcv7PeZM| z>22=vrE=KFjUjJ0>WA@SBP2D-l{E&5@Yb{(wZb7U&#DlSEnKGWpg#J}V!@#3fi!ES ze?JDmFi5imTIdJJ(a~SPqA$?$oTL`KN%uCgAsvQj-dC~0TZAYs*+HYv22tk~ES4mx zjnR;fqVV_7myFo?$~#{ zgyLvAo_*(IPyhMrDehDt-f%-C>JYwu{{cFkXRo*sgD%7_2eG??_y>DN9DR<5<7g)j zuR>wt7-1^nYy!(PUuV~-!CuEco5l}p20xPgn9Vtnh|;qo6onApfgc7`lHR2m`CX6B z6NC|=s6j59V%LU54+s#35;a;9h$$q7V9 ze@D*&&I{%zb0c;jqw4MxH20BalI}6behSx|@j9lRwHdl!qW>^i^wKD<9?X#3LTneY LOjunsrV#iS2@zjO diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$3.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$3.class deleted file mode 100644 index 34199cbe3f14d4fdd5198bfc6609e2e2cb9ad1ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272 zcmbtU?M@Rx6g^8zw=D%~Mfvaxb>%~m6%bHCq{0##x2ByAxPkcAM?C;y)98 z02AXg_*+ekF@^{5p^SHy);5F~iD~DYd#3l^xpQZxKYx8c05FYo92amgh8|psku@yj zWf@n5xGF#qa81C7fKdTs0>%YgmvKYJO$qZ#@ulS(J6Tpy40lgqwpC_jrtH@Dlqz$~ zvb(Raily*6cYH+)u=J|JC3I|NBt#bt+j1;_NkV9Bd|g6##Wm^2UfptduC`a^UWt`$ znn~%d!R&SBSwc4^yNfNh$YR*goNt{aHHf9r;!#pJtA*#)sZ8hf>YsSu+#cfmb zJl9L$j&Qpx;GTd50gD3e3s@5H0J9R7sX=O^K`J#!Z8S)w2B~(VIF;}F>ak@jGZGRR zhc>Wcvuc%BB_vyA<;%O=@Fgt$-y$-WB~1J+M{tsA`$>im4>VF|c1=_@H8#GfpCrYC zgvdi}Enmt|8x>Bi3Hmj{>(j`rQwpDsm$Zr&nOcu1#(?X8c{9`oT zx>nMY}j6g|%#+wpXgI!>K0N}4nQVms+LNuhv)o5ZCM;iN)AU9jSLJj9bacCeku z?V3MP_J{>tfJ9oU3j|w!6GEIj3xEsTkI7M-aG2By#I5qv`iNa{ z+pp{Pann_}_U8P0robg5vTMg}R~waGeaLmmo^^ZerdQuTzv`abaulNNs@Gb`DQuLS z#-XiiURjs5eQZ^)pqM{({?*;d$V%lIqqgfAGO_PsXN2q(RHux zwF?TJ#X*Dha1S)-8R#a{Kazf^U=$k_CV#c$)!p6W!?N4_N|$TC91Ta;9_pqies|E2 z>=hDQZdIRnjb>3hRrd?`v4XW-XSzPN%N1V^n9#zT2$XBQbdJ&Eqcc|d#h%=J3Ub6f zWB;kZP*u08fePWp^fr&h{q9)Tm_({K?t}7y>$LOfuN73|e6@6^6vB^0is8Msb{_5M zBVRNYu7ar@$8EJ1R&uNychJ-B7bo4HtU{r%@i%f%639bq_&vJ|hOe@TGIWB7^GruAH95FV=a}0gMHYDvc&V_tl5)&$g zD{7paCNROia0)OcyPTAqZ#VYO+$oHTD*GeM?4OALfJpdR_7B8&1a8TPG@oK#Q0Wo* z%2T8Sn;!A$#f+a|goQ>R&kUu7x(-XtP@Y**nL}FL#2q!yXK~J_G#kLalBtMy@GeP> zA&2)UT?mUlal=x7V>O2KhDr=k+-#S)%~nK-2(Mq*2^5IRpo;cn9l?^E1UE0^)&-lx zm)mS#h#b1iW~rBzF7mgmoG96vne5W?l<@*es;ZxRAz1ZF9+O$5{De*Ze+uf!#9FtW iOx*VCiE;5hJ|IR2cl@{?;%&A``f+UHI@=t5{{98c$3_|e diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$CallTarget.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$CallTarget.class deleted file mode 100644 index 609cdf2467846d3c25f053eb8b9653a3f134ff0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmbtSO>fgc5Pjn~apRiSY57VhG(do21V)G(sG(JNXzJ-St z287i}B*{pna(po(P(bMD%D$M3VIqoREM}6hF`9D0PeeNLkIP)8lQ&%aHFzk?vn*ar z{#kr4i-^!F&r~sZNq9GkvY9Uu6^c;!)A`IVL>hM+Ip)}Rqhf#?ksy)@VBb}sXRR;n8Pe)U)C4Sg)%=8VNyGlu>+?fS9-rF znp!`>9{T-~=g4tv#09J6KZ8;OcBP$v)05@<@JAno{qdR=&_L>R=tNgAN`! zXv21}3dg}U9oFDjcuWYEd$Hem5!|a^bQDfy#5Oc`w4J-lU4lM;=@tI=O}JVIBUekQ zGpngH3*xe?74x2Wb+EyClhG#_XmRd)&nl4j1%|g(q2WERV0vA%LeuLuE3`iIjDhPM zdwQM%v}qq}bbw77p-YF@rZH}C|21>r^KcVg&KhZ6MvXMHMvXK#vqqX-llwj18MuSn NoNZ=j;Q?;J_z58?{Eh$s diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$OpStack.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$OpStack.class deleted file mode 100644 index e44f71edd648536b55d0ca8936ab130ee4b83760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2592 zcmcguOK%%h6#lO5dSYjqxFIcl@F>(2$041jv_Nq%N!*0GbrK+`Raqci+gItN&Uj>x zBbPmYf)zV9EI?`#iAo5mLPCfI`~YB6`ZFrNdp&ZZA&VMU%wp!g&UeoF&g0H6Prm;F zzy++QF^;!We7%!K2A3_on??ec^-4jH=Je}53-70q!n~d=q&Qkkql7DZx@2M5!UqDQ zvcB!s)OsLmcLa`9Hs!W-I)U48%u+!hweD_sGU&9FK>B7&`U^%vz%F~9YLyzY-BxXZ z&!Vz(m0EMlkqx&htJ2xr-g4T~t5=&{NBXYQaNB{Ryra5-(}P^7OFvMpO1P8VQ&uR_ zkYsS%ZD-F5%nu2yvF2RQ4T=J#+^}F%Hv|%;W}WnmS6ol6cDAaj^@*%DxH3^`)@0*` zY`Jso}WChg3sx0V&eo(+ISwv^@!w+M|zBnBbc!93SPBw2G=ZH7brio)}fVFY^-3_ z#_PygShMjVKC$R1H~F(7h6JF%prZ|Q0 z5*6x)sT~4d;8*XBxI28Is6CNOSi%_xYU8Hv~dNb8*{?_OFo;+WxqqV1hp;z#kaHpCs%ryuq=iv!{BduX+a4 z+!L7L9^*AVZ{Zw=&VRE*b9j&)k7&o=wBs>#J$h<8m|Z6@8}f05Y{Y33^8Wm9wd zBq}5x_y9f%G3!J$N?saa$==zSGskmgXMg|s`3t~HcqJ5Y*MW_D#@aBS%_1HYQ7_^l z!4}=I3MJu1J52h%h*Tf~;rGUUe<OL=C^@#j zY#DPssh@M3_Dl|gu<9+IgsFeUYb*u`r2};w3q49%$@+HZ^&+O_H98%0+y}`h4dq*9 zM6XRm&6V`b%zz6QS6r0w$i*d;TsXK~#ACwVk|Q=pKBJdVou4+stBcdm%x%sy&1qdc zH=F*s(y+nz$_Al`9I8e&-#!@OK(%W6!Mhy4WmFhdWosW+=BYHFoPnA@U^SnfA@_|# z7OrMcPN0t{(Gkk@2{raz=NOpc8e8V6WWTbQ@&;~BiCc^@DBBR{&-onVrOznPml-bm zAD5k#OU&Zn7Gq73KJSRvLi0QFU)h+HW|V@u8I3yuOlj6K%sS(4XVx98^6D_Afcsd1 F^%oZID_8&k diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.class deleted file mode 100644 index f6ec961829a9e87a83388b2360a4be031c1d2c89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9659 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 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceListener.class deleted file mode 100644 index 458de9cadfc79af6315ec60a361d7bb61871d5dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1681 zcmcgr$!-%t5Pj`<0cSBzAnXvc8V-zDB7}^LkO2{7f`p^oIP{F$cAN1`G&44q5Jx_U z6A}kLfR92{^-M5f4qk+?F&!w^EokQqn-{09yJ|*U`bco(w0_#G_XSH zwQYZF$pdYuGzW9o0-sHOg>I5w?Vjn zh*17*oCxvhzj06N!)k1D^`@M^1V}o>LJ4dyP$i=m+<5$HLR$VXaMTOUZ(!r-^xk2q zSCBd;!r_`-Yx%*f!--{^v%=BqE*nEyZsg73vDte z&^K?4C2|HYkxp4GlO!BxiBl{cZvAriQi>xB}t!9LLS3Z($6O8Rw7Y6Y77xi4DTvN LN`WgBp25{$r;t>7 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Attachment.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Attachment.class deleted file mode 100644 index 54d38acb1fb47e61954928ecd98f02c95f0e6ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmZXPy>7xl5QJy>vH2AgNtG9{8&-l2BBV4_NEBG<*X9Ig*=J-9#IvQ~0eC3H849FO z?P&Dv%5lI#ed!7`PTa3*HUt2kAOorS-I&J)O$v4oExe5VNQ zwcZ-B$5Ii#zN6_oGY`Tjnz^)faV!(H(3wLAKacJzdQ^22CP|UAWIC2uI6dWj5VMJk vGs|9crVmybRkAu;eytLQ{}1;FgqnL4s5J<6Gypf7@SN{gE?Q2tAF6W)5#LDp diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$ConstructorImpl.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$ConstructorImpl.class deleted file mode 100644 index 1741d4b73c20ddcf649bad002d76bc10652d4cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2537 zcmbtUO;a3I6g_VS=PS*JBuvy8gOQj4lC+7R5rPsD;wT|8AV#8#H_gk?*mPregSb%3 zg&Q}zaO1{}8y8xomXa#VvdXPL%JRJKo}p^iy53*Y%bZ@W>t$XqH}rB-FR$z6Rv8OrESB+xKq-`dTZIBA z=GNqvG#%--O<&!0logsYo*RVzrWJbrgg|w{Zo4wv^p(KLgVB>?Q*vgOb+IOkc?S(3i3&xx@oT(twDQxco&8;*d{bY11o zI5G$n0W))!w{A+uZpoH3*S6NpK)Nd}Z`+g`w&~bGs0cUJc4%H!t8&Zs{E-YNGpX;D z@WDn$#;JeEOcz2YSF+tL?_DNyG3{`pwZ<|}+(}g@F^%pw2^787nl8ugMI~q!kGIHd z59d$`)UIw@Y9q9Hn`JDO@n#vfStvW0wk#C{c2wnJV{}=dH&9{P+S6Fp@@q0e&N{L! zAc!loXXfQP6FSmJYh4I^+ikOA4-#-w`hBg6jLNv7TP?-cpD=@wb={!wM&XX0j#bWe;rO;_YzF*P}?Fg8H zup`*j$M@5wMql8NtKM%$3>L59bR*ro_n%Wd&c}HG><<10^+j<%!pFOSA@uQo9Y^{9 zAzE&8FL1Ao-Gdk#{{@8~c`D*zu6^8r57C2yuu;mi(-Kk!h9f|VlYPop5iF{m4)iYG7w-iQkL}g+2x&b>y`e!drvqWU+n@BZ8X diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$MethodImpl.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$MethodImpl.class deleted file mode 100644 index 024fc7e63c57fa31d026669fe3021d0ec0ca9ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2338 zcmbtV?^7F96g`_nLe_7u6BFZDsbCEEOsrx} z%$H*Bi>ZrwAm%GE4KeFtHpFa-c_`*<^A_PUO`etUtaMaOfZB?H&1=fh@p43t* zN7nt#Qq*-q17;GZ-rIK#Sar|S!HTQGQ1fi5(eit?a-F7XDtqs+XNSsbH~k}9?K`&X zgpnrP)<={URcIX8Q+%i9VI&9a;v4o(1}Y^tj_Ej7zuTh-Yr#krJ$yY zk!!B%7%+${^R_lrkAf~$)46U%f#Y>3c$|QTDj+0c^?%xzDiWH`FRm`3l`W^^spude z+vOa{;_MPpqa#g5ChZCLe=S+J%G{AqTjmTcAh#qU=Ea7PqMqGTP_>H>%@7m zcFzboNpAA&Zj#Rkc^_$J?TNaC^0dx5%^MK)KwT$mtBZ z5_8Kx2wHm0kp><)X|J2o1QsUn*uq6zDr48e>v+RL6*CrQQL}IpwuKKcXW=7!Y~d4p zYT+~7vald#Q4Vg)!IB(&fjb5kU!=|?M29T3i zqRs(p#l5i|za=Sjn$Qa)RzjBpu4iO7ps&Gvus1(-}GnR7`Z{clvO!N0JQSabgyvGxE39ZDK=eHn- zCB`vIzwmcD!a^LuN-+HhhBR2;f0<~}T@n9l$9QQV+l&wHFz|9pa^*D53U1*2I6Pam zPnSt&C@Xk1Hyw64W97&xXZ;`K_|M0ZKV$|Rl>9t~vpkzQJci6zzJDcK*6mz>j%U6O zGaLVLj(?)#b7sH^&*ynL%k%yJ^6-(!=drRpt#f&#u6$?m>oSt%>E`h8|L=Kq9nIFY wm+Q~htsnn3^_;eA?HCub1VK!YOlP`PlZh&@m1REe;x&GoBpu_Ma1E9J0P#1t#sB~S diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior.class deleted file mode 100644 index 98169437f81c952bde4e79e3a08c3cd4a11e7152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1049 zcmb7DO>Yx15Pfb!wn-EENy;~+4X|k?EV!XoNTGlfi2@=OhjMZ@ZtCE8Bio6>k-x=( zAHa`7Om=CqO-{Y+XlCBLc{85<^Y_j}sD4j@u5qHvbL77qfT{651KlH>%a4k%ie`@z+{79UK!+4Ty-&;>ZuU#7fGtkWV)1cy4L>#R|%80 zk)4?+Qc-HfLmSEWYO?6c8+jo{Dz?uj56bW&iu+t>)fR2Rd!s&g!gSj4n2UkpS~)N2 zK)4)xep$${Hh&8Yjce1?7LM`g`W)F~-I=LsYAw4$r>8XC6T`s_V&%D}E9OnQ@F;oZ zQ(CUs%+)`h)Dzck^4-G?vK!>*h$TvI!T6#w0A+AYbJh5~_Fw4g=O2W-om7E7VF(2|yFk;+5yCfSlL>2BQJ6i|5x z5&hsl&>3gs8(;Y13}ErW_{AA@#`iem-y)8B?(XIx2@EzhGr4=txp&Xwcg{Wc?stEE zb|1i2e6S2_uwM)Zf>?{eAX@OE7>0t_hhZ@s6zriOMldRc}$44O%ep)sZ#+IV(0 zu31NUJWZ0On3>?|W8BgO?+XJ04Tk<|+~^@R8j_})zF|G>XcohGbR;&z=eU~Y#u;_e zu_(oT<&u+6Bx*lFaPve$v&mI9Le_+8*WNgvbwew&#n57BGkzT%y^zsH|NTm6r16r4p`!7NM}83k{`QeeYW;2u$O%W@6V!EFqs~-?xgP4N#m#UeKBFZZhW5v4oObuDny=2ok6Zg6`z>`H z*O{!Nr_~Xv3+{*t?OnVHhSiQ)tcpR?Na|uUG7Lo97gOQ|4OGxIQPDwzUaM)_*-fX! zL^a*LLWidAmDj&Z=;uqUzr3Lq4fb?*%Xpto;R)_gF5CvjaJ?E2`WA(G{&+6&gV4|8 zvRmL{M$03qAX$7NwUruod#IoGJ;Hq0pFL=q*-VTs84Mp)gHwe{SWK}#1YE&8La&-_ zTOMpM7|CN*hoY^^2d+rwiYi#vThH}W*j=Z zX(N++^?IS>M5s9w734b+DUnm$9;eGAU7QT}u`0jPy}5V|l-3o3+bV*aT&m#mM?zma zHHLzXZNf%!>1~v6pc13oh0%}y2cy;R(b75(`IR}PJE;=ycL?tb0J^PvxO&6lo`UuC znY0!R&5*)jakT*GN%su;l&Ycs20Tl%&k;2U$(1yAblw5$=(+=`<5SdpLQ@jjXsn}! zkZxlm(GijXjd&iL=qV_nk}kN2qTN^cHL0tkxmZibZAc3UT=Jhc(A(vawe(;Ms9S(M zkBy$JzBzCg%jOaB*kE(5%gTY92-MsneKoE(5!8}5pJT1`1-hg!(I?%xJ%%kr2?%0P(T#vh^$=A{-bLuL`d7P-3y6rq8I9EGUxdg zx(9_}9M3W5f@A=EY3-NSM*b4pN+3|}GKE4MVu3s`Z<9dDq&OAt-;VgZ3pAz8Wk zE>_K>RnV(_ESdxp@sX$v+`9SqjS?ufAVg4ngGT9FtdPFP4(SIRlzzl<=_hE?&#^!i}sPz0+HffawE zK}O#Loc_Ztq`kCQ!V8oO5Vrd;fTxM-Aaq-ZTSs$ih!?*w@jHo6(NiC2rtj~4Fd+Q{ D`n1Z@ diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$2.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$2.class deleted file mode 100644 index 6bd7c98654c8280d4695737cadc238e50a0748e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1213 zcmbtTU60a06g^Xr?m`82b@5wQMJ+5+!=sRmO4h^#mj})Iuus!6!jRH2?LgLlrHLD( ziNSJ8$Fpye;~q`ry~QYHyQf&X^4&|SleO9cGW;I zlzK7{+tZ0F!k66jX=k;kJnrxCP{w|`nT-o#u$~2!ZrA5gB*@)7MN-uk)mI)0-4CB8 zoqQaI{4GP%uI(7UWf5EWcV3EPCB2&~jUz{q?-_7lz+_=em&+B9%L`7@!k c=HQevgNq635-yX?;tHV%GK)tq)% zVHj9)njQ~3fzUC{(Eljj&R|qMPXu!=@19-WcXp~~`x_Q_ojR{`YkhOWYICnq_g`4N zz{%pr_8zLa&)Rf~nA?Y+zR8su{P_?wekeu@yf?=@cc;Z24qb`DFUUz9G zU-ND5uJFK-<9ISDHDH)NhSjV{AF$+KvHr{K_y~jZ}8L=7JwQ z^&%tFfZ-3d+K2K`={PDJOpNsE--$_vS*3tOab!5L6mt9bMc#_-pYgre5Ta{1@?d%? zipK>njF4Sa>K4Gdw}zz9r+Q@e?DD+u^Y znN0?=7}POuU;%dw+(p&EJuK>YVBjGhQ9!FQMjeKQ3Ci9`rpvvi^{~D!?2uvd2#6w} zlu(^JjMW()t02Ch%)ybtaP#Px41IN(`Z}Iax-P$Lk()oNGoVK@iU#RHSx+j*kI3JY z5JJ|%ZpA7{o|PjdSybY(yHP0VQ<2~eiuj>ow^r{7l}hP3)mm=bbQ2V=-6&Ie-8!Uo z4z90i(uxq0buH#GSuX2XqWs+{XmYZ5q}%gKrgP)p^N=92Uu!5P|dmU>UZ(2=Yl)hw!9 zq3IEfBu*P*7>4g~F+RLXyQPRc8+(N;A*9CMK~G@S{EKF_h*Vb6*9`P&Cy>(y_YlkX zh~;q!mkF~NonkramSDz0?vX_#flY1e8NqRKqQ}Q|4{e4fX1sc!dG3I7QaG%CCB>o3nfEE-0 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$4.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$4.class deleted file mode 100644 index 973aad962bc18991a164bb940471bcfe4ae8612e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 957 zcmb_bU2hUW6g>kA3v_E&v@NY4t-2!k;3mc=ZH!7mNukx!6q7#9?oP_!uuFCqtiQ-- zH8IAR{s4cJ@eaY5rf*G?xpVKiGxsBB?)?7q^Ax~iJS<@at3{Zo6vLuDk~(PRTn~?ie99?*GxSxI$ndx;(m@oM*fep+ z!aX<^iYQsQkE(?Ss4=YT5LfZ=*xikK6MxW>LIuq@j$#XSR2jC26L-#uOPsiKPF&)| z{l|$*oVe%uah@<(?T|QYD4rxDVX*(#+w+FPPZ^$GyZ}S%;=yNMY~jrN<)>UtbiX^b z`cda{YCNNf=(juDjhFk|3~w$ks~N?C47r+(8O>d8zxlfP-rl6KFVHt&c16Fswg@l4 zBE3jxh%8w^?FZQDuhKVUzUr0z4#U{{3}a^o^8|A<_yrlta~-S5p+dt{C7s0;%8=K2 uSQkrVXGm-k3r63>Rdn@6_sX-gYZMO{Sf>3pNty1Oq+u86OD^N?i?zQjZvzwn diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForBehavior.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForBehavior.class deleted file mode 100644 index d314b40c812772f687d42b0495a490056adb548a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7892 zcmcgxi(4Gk7608?*x4N>5ebkcF*c^FS(b!N0x>EC0|_K3FIh;srmdOXoxtLMnF!?T%?=ks4 zlOOPeH)Z@###=Jp7LXHH&SbQi85utksO_FjXHx0xcyBImwhE|y*{p6=^cjJH{$y?{ zs%6p%Eulpx=cb}FS~iu)%}2HAbTpHmF?1Rp)#r_9&zzn$E^0<{!bH{cp;GjAVn3}J zhMvy~)b&qlb6PZ`Wyhm2BTqt5xAIKdnCMC-^%>$V`e+n43~PC9N~dX~3)3uA?XU%M zE}xs7?k5?_l(Q6$1i5=co9UTP>eEI#m$li}QCn9wn=>?5qu-cF&xDQ&bd+H!V(9Nk zXVXTfz+2&RfXbM=cDdHBP}2p0sx!HiE^t?WI;#)PP9iTm@EptK3r@3x7 zRinMQs#&VLw7H|JLw;UEjfyQFzqd;LhV8fcx z9g$92x*ah?OFliIP21ywvGjOWGiLMT$rEdJ;z`?~mXgal-pjW9|17GU%bIqR@nZ^g zZr?VW1rpmSh_hsxn~Bv}F$+69s*@S*>Qz$GWmu=LzO>D9jMN&jD!TR#cUt(a?1EXN zKv=mT;lei$V>(!6{G=o>Iz0jv3{MUyZ7y;!vnG(=#BtV@noB2jKF~R-*xGiZc>+7N zA|!!_Hy#;FgrM_|kAHzTH>il21{HL;v@T5RNi4?IeZ1$)@7V=61QS$ z$#NzP%hHw4YYPI=O==)eW1WeiW5$q*gm$HwPT(s} zb5~nCH_XNgK3yqonr=JJW@dBTlCdIics(F<=emN4ia+236}OrEk;xqIBP>gP0$qCBkLxdEvUn@fN zS`o5eD?;>I5pw)3ME(|96YWBF@U%{Q=@OkXigS{gp|hy}rLrtqR+{UQgHoN|GHmBU z;*>2mka5=C6RtT{T1PWS zdPc`a2I*t;{K(M77~Nv~1_pZ0_H~W+^v9oadW#yJk&am?3P zny>Nr4Q_06o^uwhKZk@eGm7XyE;XCcS2@ySpd)nqCKJjn?G^JDP)=AmCgYz1r`Pk0 zjVLQ{a*Gf+K(D{|L*N0(sN-CS-ka+<`=V0f1k9{cN@kXnpP3~kYd~!+=VnxIp#PJ2 zh)^D;uXj+5Dk}RT%}ek{Zb6RtmQWqJjX*qd6Mk_E!6o=g>QYHvL=G=Oi5yu%)%ye{ z;Sr(-=}8;XUIe9j?35aCuhfVZX*W8heK;fCgY(jUw9~i)@UZ~sKqr;_#fnMh7pvwY zQCo1@7WgdHxlfJ6Z=!nN^DOKQs#`o2?vw6=A{{ib8?CVgY!zK(Bzi_hH_q6I?KDOZ z!Vc2c=evWNWdbjSJcJr4Y(lEmU>ou}r<68OHvzF|3IjEJp&UU#YHa6 zymN%YYx9PUcWTj;&A)=3%ebrMUFsqaV3lFY;(YIoG_Rm`1$Qr_?uPlzA2g`ST#ub> zXQ>ro=>*!Ohg@QuDu{6k=gIy8kI^hkQEqvhTKY{KDO`gA`jRk6qEaGFJuIqQb;(op zPE!3*7f&zMTPvaZE=ToUrK+DL)q6?xK9?9J6*A#!o{aU3Rex7Mv_-Ml9ZhboKIp z@)J~JDU|+^P-7$w`{IyGDu&w4P(E`DSW->?52y>cNYbpjeh?S%NouhiK2BeBLA2#P zP9+D800+rse5_R5oXNx5LIGQIfluKnd;Uq#eX+Q_h=Z{ee4>=qg3BhY zg_UYW0!dAOX zl|j**!uorJZv}K~#cExKs78hl3Yt8HtjFZ4Qq{aC=P>Ot*|)LDpY@z9ZESMhbF$dL zWU|SOX&D0%Diaib6SW7ZJVs@RO5T diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForClass.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForClass.class deleted file mode 100644 index d9b5c5d31d0cf14d24090e3d0001b57b295d6a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6163 zcmcIoU2q#$75=Uyd+qfmb>t>>6CebZRF+#S2}zn(PN?lBsaq#;aGH<=C@XnmuPd+2 zYUL(CY0FPr{(lP;+Va8-KkY++*a__nba;Vb28I`SffsmTnBj?Gh9?-lvs%e(NdZq+ zc*ghc-o59X@BG|z&egB}{pwEv?8CQvu@eOuiZaZ~V9RhxhB+DLWpH%76$=_lI&>^* zaCI11(D|h-!;&n2uooUGIv$0uql#r6kKwYsUXd*ylHtP|KB8j~kL&m-p3v}Q51x|s zkM-c=8a|=nlNz2@(3ULUw>?)OJ+)vhTe*_u&gEu&&vEDS3i@M?KR;G1+Lelenp7BY zDwA%pRGqbFs)dP?RjJtWp3`3(JeSisjB0%9nH2l9MZu#OC&#ec8_)UAA5S zoaGni$E!|h*7nS1?$jbp6l1Pi_ATEjyCICe!liM0-dc9bo`9-pU-g|*PB4+GcgC4> zEx+p7R6F2Kn;a{9bt;8I6VYfK+-)S}j}S(;Kkrn`JqmHS3!hQPb^Id=r!z5N=3Ap= z=&V9&qC878-7@94_Q~pE!S>Erg%VfNQ{|#nI%|23yoZY^QHeH>s2uoSA(rQx*-`0! zrxvWykeqDZr!buvieVG8g(D@O&Rpm?&rLJFRebb>wG`TMOQ>D+D4xztc3f_^6=r~9 z=3*QFciMD4VNPO*478EQbGHsg5IXseE3Fml*)1IfQIn>yZGB)fwS`XE+Om5zE9cm5 z1uY*sj$1FgYZ>a+XlSl2+nN8P8|z}I^QN*p=3c2UD9m*3oYk39ie3v(^WYw4$>})R z&1_B$`61T4#AWiW3%Of_SREG9>Wwvl_lUq3IxVoX1-38rz}`Iqw(-VSg-1FKJ!n&+ zg}Nax@J*)!fUQkKz#&mcpD9?ldqY!`tw7 z118>K;GNiS-~gV{@T|f^9rTEB{WO#3nx)1(&$=Rgje)~>mw|B^K7-F{_?&^y;|m79 zh%amSih-}PJ^#eoMm(g5*VoQ!%)=PjiWp ztbvo5W`mlIXWy}Ry7VILs*pAjgg=9uLt9#$LRW!V$@OYf#mye^;-n`&X zTC=k}ChLk{c)gI%qi_`~Gw+i^i(=5ge?0$70wn!ikr_vN!9vRw;-%DnIhy z7zdg6xK;Dv!@MuCP1`zW`wueh1!v==wP*+VM&XWiZm+dYL(%?d?V=f0kbRP2GwaCe z(bAUgrC8306W+}!A>UfWCBXM>z?Ku`Qi&Oachk_GqhWs**m~`2R75T5uzhUKLkx^K zhiWf>eb~u=g z131Vpck}5*bRo%kGCRD2p6qq>W|J$>WJt)MvadlupS^}2bsc>x=xTaT@!dFo9h+8= z%-*?z?jMp_0*5&6MlYa#j9&F!Y*ydHfcicL)en$SFXNDU1rzET9#AW|hkLh?h9Gb+ zMmfuqD4QTi*2oa*f#4kkml9l8xveHh7h?4jbg5SZW(EnkEo8%{!?2(G>cu0Cld$YhL6l2E;TWc?1guLGE90r(37{AF8! zyKf5cmR5kjCcxhi;BRjNP@-ZTKob)o!25|=)Hkx{uR+`Kq&T|SjK71fejj0NG;}v` zKLbzUDQQDOj^pGf9Cb!W*YGO(TloEfk@Lq0KfS?E$1xla__3pD!!OmA-=E0u&;Ntp z5FQ{Z3Ge4Ze20I8EfT~xkY2^W$jki1_>=&m%OlU*v%@!V>kVvO#kQ-#vpjG^DiR`p zVF>>f`_4ObJ4F+eN z4IxhB-63a>e8nFJ+xTl2*X#bOKX1>b-?WN1U(Kf9A`^E+&T=AwOd^F`LJQ>AoN+Le zKgPY{jPCv(%-~EYUlOLs@1kbfD}g{sWi>Uv6JgVZhb2{!_$h81Y5Cw~gfF#)#jC_qQQVY|LPfv?XRisOR&WTAS|wK(NcgFz0brMfs&Y o%k@FddpYmqoaelY^O5de?BINg^QX99{yZ7zwJO)Ybl>g&0Vc#-jsO4v diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForWatching.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForWatching.class deleted file mode 100644 index 5c80aaa158de7423795134cced879da56b1de9ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4293 zcmcIo-*XdH6#njQ*=^Eo8w#!RL#!GlO_3A?5mE|mX=ycWF)36)!A-KZTheUYY)VlP z5%odG7nK=D9mgMoPd=z41C`P7*+0th+?!;Rw3#Js$IkTbJ$LW<&Uel|d(LkD`S*{% z035^ze(c0cJ{n?v?82mqDLc+HPXxU51KDoGV1LQbhjt1wi&!JrvSM%J0RmNOED!_X01(3kW`!7(!t zT8J|E66Rc1cM7(_&@A?m&O|nA*drM|pEvRhCu(&DVkv7eqG!ycp41}?ON)`bo=qpM z<%pg$Bhp-CR2U5kwCEt&@aJr6&Nhm0fhxF|nRlWp<{4Vfl(sO;tlHphkYKHXoiZYm zR=SWeq~%%NNzEH}u#725D9*f@5B4*7<7J4FLGDM4WvA$eL>n%cnY3Y(Gs=LOHJw3< zOUN@44*}{uNAVu9(iHEGn3*-E3X4g@p3##TTIq~gDLr#ew@o3J7Mq0w4BI3XGdnkC z*^(Mf8P05iORx?iIjUVXo%wPI8MaT<*~W0&I|>aQPw!^P*P})3Tgo}dFzgB65JQHx zgrldfOzOGPX|#ywjOdvRLn8FQI3Ns&%wSNhtUPH3+dJAdIX9GEGE;_l#6&(vH^fn9 ze7jzQ#BkIzpk5>xzG=_{`5?RGFM3*BQ*<`&Yn#L>+hsW9Y1nnOmMufOgb@XB$hP%s z43Twupu%Lh-e9cim#W5?*VPRkh>H5em#JLxSCMK$#R(%~8X< zxS`=a++>*YQmkRJCV2JgH$yFasJUTWVA7$9@ncu6=joM3F z#hQGvD#FD_XU@i_%HT8O@#)zFwfWe@6xmS9#+33lrMzQc9S{2IvQDla+j#uw$<$LR zdNm6k?(bJ|i##j0{L{8o$T57m4sL5wGrH5G z8<_e{swPp&=8w}S7{`+&Q*UtPy@7yeGIUR+yVP^&&OVajq{->p z6YjeU9=?aB@B=iTzlSY%q0m&NY0F*sewC=t(%4QK;J4u8A7VTI2>WSGBQ(N51PAEK z=o9b|jRJp`&;@=c>$`*Y@bB>Tt-#MQ8~%k>n@~ag7+d%!2=GrOVs}xigh={0jOPjS zh}2>Mn!bReB_o$AMvCGqmx~v6Fv+z5I5S zN4>5`$6RB_OU62i_#JB?{en9GiXgwPg6eRgq8KRg{uW!rUc`$~foiH-tA$Qi;196v zeBV86ClyZrzWeAB+D(6=dj*eh{EbKNV@JioJ#^sU-w~Vd$-y7U!5iEDxaMF%gf@xChS`)bT7;vo3X61JzP;KFv{B!=bN953Ptx*nwUZoH13 hlRNM<=J1RneuB7!e%i5{uFsKtiuQ@Ww@7{){6APH<%JhoH4-E!QuzV>5mnV+QAG%PXYEi@EFMB1ymR;7nS0MY_sq(_ z?>*ZAFn}2kyhwZDL!TEJ=o+%p)98ZI;VE5f#os&%zm6{`%V zKg}(PWuX^^wV==0RnuA+VQ|}vW-XRw7|j*RC0!KFyvPfEX}P4=gf*Wpujry;>P53= z8yMW!$Kj z@<#Qh$QQ}enJX7W@s_BX^1bO)WKRt0OtoCE5D(WaLOxj(wVFZhi4)+9IVq{#wmDlA zKARO4r=-L9kcKt}pRiVEB{f7ZLp76Urs|91)l+<<|8FNMg^P?Rd zegrVAVZ@J7Tww_O7qK6Hv}qXfV+>dQn82hT5k&pChAD>eS65nN054ViAirc3Y=+@i z&&t5#Qf7U}rKsCxQJ)dc2tFp8_}0wYRH?64!K-TH0&IWHgWwzg*5UEr5rRW-$>o)+Zj~&pc+(z$|Lml1=WFJcgUSiZh~#Y zy$x**sr5)PzfrLM~J3_ z%D}LiOoh}ZIJE}%I;gR`3IYC0`4{jxd79rxH~#^>`~hP8M_i!yG=J!TJx}?&X_gX> zteiOjn`wfT)OSJIgU>;@i?bTudJfh=df@=+&y-2(L9*=mg#!nIzAB%*EDHsVyc70Yg1M1rCX mmfNB1qLb}{vG8+h)rBOTa*?XKY3(FS{wt9Bdym%f@z6go4h~)b diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForBehavior.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForBehavior.class deleted file mode 100644 index 1bdea7189dfff0df6c82685861a56d34af99533c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2297 zcmchZ-)<5?6vn@)$O_gXSX=9#Rx8?Vt=+^+F-B@=LPF9eH1VQW!!p8>WtQv?2$y{i zpTr9vz=txPoh~hZ%%(PrH+2&IIrGi_`u*c4fOj}B@Y=u*L-w1a+GX1oLBOzD zJ?uMf(~+$s&p#AxK5#srVYw=$@ISje2n3BfHLJTd+v{4~bsD_Eta=KtAz!;^Z)4VVo1$$r#fhQ=ZjxhOURpM)gb0b@pUj*)1^ z#~7+&S&sA*!%1?-bz*&OA#@rI?9Ld~_@6|LV!S9B6LpJzV(`uD`(C*@aBNYFtng-s zO!y@OZx~YH31awuO}w_;OY&K4&LXtu3zIH}lp7~XS4rLL`?ff8T*`HA&i4;OUp27L zaGdbv!Epb|vyU4cVJn8%xBiD4Dr)Maavt}Ufwv6%aT_sP8HV?9!{c9xVJB|#1S`$J zutXmTKrY2_3u%DVz#Ycn3hK@hRGp(E0B0a|@wl(vm{w?A*={8a{_Z3p<3?7iKl0G4QO8Ojoc=2iD50;Sc AlmGw# diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForClass.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForClass.class deleted file mode 100644 index 154836082af56ca5a7494232d312798b830e3d70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1434 zcmb_cO-~y!5Pb%kB>`HpPzwD%^pJAEQjevolpv5IApzP-mD-cnaT7<29qoEkIQDOG z=nv?RsygdtAtkrU7mwapGjC@6JimV5`~>h0uOmE<@Pc7e8<~{@)w9+WE*BGqcE4BZ zY@p5X#O6ntC<=!4zA@@APz29AZ%?JYdMb>;Z+ zR2lbKI63lpRsLpy;E*BKMSr1`i_VweMD1C}NtycQs(!X^$>+VT@7j&JQmSeK7oC3i zQbvNBb}IiSr22F{sY*#ZUr)zkDtIQ$koyV`gA+FsJv73VxnfX@gdg@lhUb+3@FXrL zfrV#@X{23atP@UKGn?s#HC=PvQzJ3eHjnUrJBIiFpRvKfutZxB zSX*IOMgt%lVb$B_47X-@4eR9pfek#QxJMMVgiVjz-XGud$Ef_YQn2Ig6YTn!J%2vM U1F|vYV0ea=Mibj)A2*tR0BESpYXATM diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForUnWatching.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForUnWatching.class deleted file mode 100644 index 6ad723e082ffbf35c1b6b2968b708c4eac020a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmbV~!Ab)$5QhJ$b+_AAtyO#i5ADT(7r|bNVxgd@hC5V>{lQ7?WGvxi_^$ox=_Csuk*dcVEWjVVkOjZbML+lb->&!h)wHC#>;?@dF zIGCO-q)MgECZ@R8kGxD~E+M=OE)z3nT*;WnoaNP=S+3LAEE#{2%%RPqNCdkw=|YK% zO6amK7RBMZ*=XoRC}~UKT$osv>>E(~ILhy0BSOdMFHw;aHU`57Li?_^nMftvOg~^p zIj?w#KH=6k)W3`fy%n7)t}}KW=OQUX>=DMkPJdY+;naul%Mwm}#h(5FfzWV23TQOl fe$fJ4jL=@)pi`e+1TOYn-b4?ZLF8(-5C+jF0}RjS diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForWatching.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForWatching.class deleted file mode 100644 index 90d5fb001769ebcb5227b7de7d4050a7e523f3ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmcIkO-lkn7=GSTN6X5}EUj)q1<^p4ATO3A1V({Dhfd=<*vPaiyQ|r;AJMH}(xD&F zkBY|4KFk;-=(6t)Gw<^?FZ1&H^bBAR>kL_jB|`dEh1ci4*Ysr&Ff0?2A1kwY;=0l= zYY_x8AY@ODI!ZT`+pKv0r3jsC^GkTxsyf~c7h2UtUGP@-h6loJ)V&@TZN&|+*YO?6 zPrXJ*%j2$e!>C#M8y{4~Z7YOUK`4z9E_)&W0*KTYl;30(jgh{!ve24P+xjy}vU1qyDo0ia?*0~n^otC6LhRzMZG=3INgt*7$$VvvU-qx;J@<`1%b$f3 zrfShFRFpPab0b%|+Y(*DP#~PyMrtU;5s+W!fspBAb1mE^KdZN-6Edt4N;aNxMwelY zuwz5{86V-mcHC}`uy1R&C?;&$I=`t*5C{|IodDu7!X%P_sVPiFb$U?Km@(^nq>(Wv eComs<7mzTuV7g++A)ZJXtVJ+WXR(60QvMCt8hT0q diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternGroupList.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternGroupList.class deleted file mode 100644 index 9067052b3d6205c93b0fc73e5c6290404df4c1da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2351 zcmbtW-%}e^6#i~DWSg+il$M}aD=JDz+HSGdR)VyJLcxYm8zimO(VJuk7L!ff-7xsz zjQ@tuKKRlXXKWeljN^0vjs6#oqki`${1|Lsx-fI^p1bFs^PO|Pb2iWZ`TY+7AK-op zX`WE!Wj@qaQahrW)9IT@+^NIT3EU z!T2SCDE5?{8P{{eS%K@>2*3)H>jLrlR-Jh`S#&+8)M-{7e@#{!JQ*ssYO=8|eOJl7 z!?+57Nxdt>(D6MTnaZlbN(3O|$IUTBL)Pm8ne4-EB^uJ(u*;$EdK((H)$Ss=>HG3~ zfzvNg6X@?LRorm%WwyQ`2Q*g%=AwkqEi!!u8e|XGKsl7PZ&zen=g-8FK&l67Nd_jC z1%8NB!YGiZbS7gvRVP{)#Tyo0!|UqlQEUeXuVuqYNF!yUZSvVaw+{h~Sl#GqS3cr(fNOz`aN`d_nsuM1zO1cBjN} z_DDN-Gg6pj3z}}Q&}@h7WQIcdgnN*hOm_0fFy2oYCxp2vgAyk$XPBqAGy9rH@=ZOf zsfIBJM|TYL?~80ejPdhwiXWgDcTx@lXS6huPAiJ?xsUJ2SiU(+X&we;U^th5j96|L zM(!!%4|dV_7>Qr?)i=4Ol#;QCq_Ko^lr3K8CA@{Vx&KHizS}dnsvQ6$x!;g@3iAQ? zSbi5L_K=LBa@=GI8DmwO%xD}VJ(DzmalEJ9ypM^V@t>&^r^9Jwd=DvspU@Y7)Rp=< zv(N9rQir2_7!ddqX6Zuy2?n*=FaJI_9`UvT71B9=U13yU8TT=0JVf635|@pyaK-o< z*Nks8rZMW~8GII#e4^h2bkoRbba|c*AU^mvk|xfd{YwXNAu`~TF9qxp@D>3#3D_gx z76E@p!2T-(PJ?`~dl|mP092%j9BU>HtCdidAOTeIRaU5Rkc$K^ky(lm2~6>)PmKSU aDaG(1GTcY0Z!&koJV|pO<9?Cn{QD2$Z&=s> diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternType.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternType.class deleted file mode 100644 index eb055ef1445206a125dcf9c6d244a486cc812822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1357 zcmb_b?@tp!5PjRb_S)n4RS+qlf`YbyoJIU%2?3#KV*`d_5%tUVdX{UhTXMZN_+M#B z#Aq~p_Kz~o9*vaXC)2&;CbRQ)-kaIkU%$Wo1h9;i7*yQX@c>B;BO2y)7+8?M#VGo9 z3NA{-!zhNOUD9AOL=STLt<8M#F9}yvSSin#o*!h2am%(h+m$%O5Z=o^&%R;M zW{Vs7*VzI??p^P)M_Sx%O2sdesUD_PH|u5U%3$6R_D-`_vb}v?a%o2k_;x=qyiew< zyv0qIi;7wBJx5eBsooV9&(|&P7P;q0;tsnic#TBFuQM}5RvqE^YYb!m5SB|78C3ts zp-#mLPDOCP=}{&nDFe|}%k3O~+m$*inzhwlRkTK*&$722*~zhMgR><2X&^4A zdBngYq%|xvZ1-jq4UFTlfm^t3pdUj9hB3r2aCwKaTpCx)tqYPjnoM=IVz*SaEuTtw z`u}1Wo^;<#@YXV29Dir%s-(<%nx3ygZ(dnXNaX-o5)TYb$YxPQMGT|30qQDwcgf17 zx52(3bPnYcc?>t{ACWOON%(OjI`|cYf)jdNo&SpPIaG-cUBOS#j&Xs)B&LEmwUSVh zF%5-2K$~BfIz!}h5bmbCJg(u6l#b~DGlM9}o#_bKp+e+Z`VRFlt|@1To+1`Fx*9lr z;U5%I+BC$6Y8!opQ!vSPQQUwO!KTsA<}g7;Djk-4m?caIa~LG66Iw+I1M7)DXsuWb diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$ProgressGroup.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$ProgressGroup.class deleted file mode 100644 index 5a1c133c3b7ad8db07ff10044276299e69bc5dbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2309 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 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition.class deleted file mode 100644 index 8049cd702b3039906819d3b54027c329edf97d82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmaKny$%6U5QWe9TU1JqKw}aujR=)Qp-`x1cL#T~?v?A>@M;PV;Gx8#70t<+a z9?#nyz!0qnQG_O;v(vEjbCU=46Yu3p81(v^MdA)Dxrrqf&WZz{#HO*kupA9Xyo@tV WLW4l4lzRZG5vr)Y9qOf4(0BnOR7L9m diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatcher.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatcher.class deleted file mode 100644 index d1dee2474c479f6c7455d528ba933ee71f251195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmbVIJ5Iwu5Pg#bZ(_o)$q6W+VI?FQN)VA;A%qb1*dCd+HfyxIv2r#F4#1%zHl|5K zlVWDxeBS(iwqM@>ZgHkCRhTIp6Y@slJICsys0rh%>mr3-yS1-mX{-<~o_cYA72ayEt{xsT}5XFhtvWa@1OgP`swPn}n=dzV5Dx4Bt4(Rr< zHntXjSq#9qX4&~SH{6jN!s5Tgyl`o^N6R5dAlx55J0lQANyh1?G$BlIl+Xy-pcPJ% L&4+xBc{ck6koa*Q diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor$EventPoolInfo.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor$EventPoolInfo.class deleted file mode 100644 index f569e7bbb7d4ab30cf84b03d19ad76afa5cec9df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmaJ;%SyvQ6g^jC#>7c)M+7Q{ifU8smcz!&HbOwzGTNM=fs2K_Y`et;h(&ZJ#P zk!gcl3_XSeLNu54@V~xu_~x z5zfc=sVTU~RU#6>v!>vc(6hw6bFoldHd5F8*3FUgPbV=UTs6eA+~$QZW?824PB}7Y zl@CU%+LULRXavKMaM@K+%BoFRwXD6PHt5-yJl1c9(A(gBm(6pb=lm(jWLh&E5>C5% zX3R*Z8qa3o0X&o#U14W&e-__4 z_vAjFw>y9_+CD-bO&={ndtOMLZ;eq)eK3U9Qfryb6k97Tp>ve^4>9WxR~Ti(EUV*DHlu_{e8oweM^O6 qeH5E0m2pm({%!Le)gurp?ri|o2p)X5RnRDVfV!KZBdV@yUho3`fodcG diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/LoadedClassDataSource.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/LoadedClassDataSource.class deleted file mode 100644 index bcfed26e6f1c7bdd058c8b9bc74ad44b296341c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmbtR%Sr<=6g_Fjj;*hDBjOKOMGUxfhHjLCFd#TzaAzhh8PbU)Y4O`!_yPSWF{V;{ zv~FA_hjZ>d_ny0adwB(LjX{i~7=4CFN$VH}!}F}B1@XC)is!;54BcE#8*+0a7|wq3 z=}NAsnetmj)}|MuWaO)&iEJu{beNTT#!1P73gY!*#w|5fp`STDNj{Ov3B$+XNq&1j z{-b>BXeZKplGA3aO{S?5RhV2@hU0Jh-GA!*I+q)Xtropp&rK=(UOu$bFD7^7XvJN9 zP~ucU(1okveVKQE zTyFp-=*DQpXbVK7a#Lu5>R`ALXwA<`A9Lef7Nf)RF8GUfEUf)0D7`S2z5S)%o~)jE zmj`dH4&#&x5|}D~kYr6l3CXlL$c)@J@n=a#BZJOf74kPM&@1E8lH1Ewl4_L;jQ&-< g8$Pc_0sJV`Cx?MW&;S4c diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress.class deleted file mode 100644 index 40c9c1bbd699da62f69f4ca0f5124682870da105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmbVIO-sW-6r5LM(#EQ(BK`pn(Sr+KJoF-ng@96_qUX(KO;WbIC13j6Jop3rQQ~$H zBIwD>n>oyzH}gI|-`)XS;4r{mfC*tcm3gTNUYwjh5+>`)ao$*r1jBxgc^vCi;QJEK>DmmTU@}Emx)`iUwC(bZjn6?sfX1xf< zcP49KFo_He)S)FfU1UMjE3A18cl_^g-TXri}bDgE;mGO1SY<%a#emk7pf7c@n zdpb_EmX&KJZQrPGJ5QHVG=$54-t!5Bf&Dn(d4w%^me|7Z9R?UW93ixd0e0LRBeEFU KO~Nkr{m~b@Ie5JQ diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$WatchCallback.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$WatchCallback.class deleted file mode 100644 index 1e56d4f7640f561751577459b70055548763dadb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmbVIF;2rk5S$IcCMF4yDEI&cG@L}k11uv^APNxFd*>CgIp0}6$I06$cmR(=oYNpd zM>RXM+S$>3e!YJHxW+0)mSRCzZn-z>+&8V2UP{8j#pN?0D|SZOzVa@lSVsQnH=U8& z$_nA^-j^FI#UQSK8PBD=s(IiPCxpWIMzO6lYgYBpsKBn&ey6ytR3~BYqy9Ra@11hC zR5p>&|akk6~~AnI|C-Cb2Alrm+@G ZBR`C6#3XLgI8ShddBiMggc**L**8}WV@Ci0 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher.class deleted file mode 100644 index 13891554d9472af136e0c2322227d6e7dd536b5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1862 zcmd5-%TC)s6g`)QIMDDaZBxRdEFv{XRY&TEMK(w%NS1LZ6_EC+4sa(Psb`02Prg+uWB!f71tNdf%4;4c4v;^zJs&SRpKycpJ|mwrY)f z@76)xHjZwh>F*r#uGZ}YO6m4`euwD9Eao(b%7 diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleManager.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleManager.class deleted file mode 100644 index 2c34f2d35f24a49c2d1c2e3e73b4e730e471d47c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 803 zcma)4%SyvQ6ur||`ciAPTHoR-MR1@ip;C~dptQIsxae-0j&aI#rsPqIpXS03@T0_= zq^Klqah1%u=bU@*nfd&B{{Vm{oEvarz$t<3i}c-B0vU7AcqUN1n_GP939VcM&amuo zmwN=#W>C%fN@_MDP&2z@He*yWWz)Xr2xYfI0<%0Z`D}{^ty4i>nz9%H@ zXel`|wQ3P4^o6aM=Q}8Cub|y@Ej^)3iXj^^I-X6a%hYJ7=afwa?dg#(d8>_PX*-zq zdf9mYvA}t)jzWi}3qD|Z5|&HCy$v>H9$%HlfIwcjU5qQB6mhOc=G+U3TV5<3FAP*@ z8gOuvVqg1?#Un*ETCv9zv$=B>Pzf~GWrFt>>KEZGlmsfj_x3a#<0TNdT;~%t{&^KS z0t8a{gaFDJj2kj|&f+Qf<`6L;A43XIj3K22QcfTnu!*WIbWTA9eYc^CO$hA3Zp^Kg WK=xoi#;GTe133K4!T+PM*YP(H3b@+< diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor$Type.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor$Type.class deleted file mode 100644 index b92dbd78487984ba5be6f2e3c6ebd3fa1efc66c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5826 zcmbtY3wTt;75-;mH`#1p-6RMJC?e8ilMo6tY7&sVfY6X2iHRXCa+55{;$}B)HWU;U z6{$}YD^^-mib@n;fF?w#_AlgW5W$kRfe5%R2%=Y%{jBhgkKQyqLA;)Hhv)FC1-;haISz` zIm_Wu&NAWZpebh+pqvXG4&_{;l*3u!bUHNrP{GwuTUDW;suWVoW6|z}9!)gpk)Du~ zrb9t1tF5iBEUgi!C|j@?}l+mBKp}+;xjVtg}Fmgj@6$yRvgX8OL9u{m3x)L2>dO~XtB}^C9WLK}z*XjikJ=$JSmxza> z?Zr9A;-_&5`fJ#IV#lZtC^XwY8xO6Hgjy2?Mv%pOTIuy;vq7~goM`*(SRYWBFw#LZ z+j7#h|Gl&%IG^#5To-PS>WQ8>UA^)%b|Wi}$*B!vePC%Q(GhDqHpQw_A#;rFTDld^ z$Y!7&lkKT>3BC2)rFxg;-BiY&JwDR2b8H4!A*e8E)L>apIMNo1)Ay6@?l4yjPD)Bl zT6uDN4tYZPV}*4KFLq`v27#o1@00lGcb-_?+4D32$AjC*B%b7?wJB{OFoJQ+DFR zYHasGM~M$DX!W5@xDZNch7YgcRUaZa--nI3M7T~LuEDiFoQ1P}XcDqQNVAZy2>Ggz zl|s%DvI=KwcunE7&wHnceeE>=Xs=t5?863J?8EE0(1)MmXF}d!VEFJR-jccNct7Mc z$nej3Og{VqZ_~v-{1WeI_>~X8#$_6Qqv5w2-qr9s4Zqj$2MzD}@JGDk!~1yKhd+t( z5AbIn{(=t`{KKZywya@AR+ut8G)A^C)ke>o;lvwhc*@9=5&F$IQb3E#YKVpD0h?@DEEWmrd`8%W%GM{SHf?y7oQB?NR65%M)^!-q5?g>& z#CnWZhD~T;B&IWDv~ag|oPMJYcXq|1p{VuTkcUT&Q4u_R(X=Nzj6Ly%>1mZP;Br@X zRZcmk@+n-zcikjpq8KH7ZO$WdU_S8~HoSni)P~E5%Wb%VxYC9f5-+mh#l%%MyoC76 zHe5}-)P`$_Yi)QL@tHQfoVd=0>xo%WXnUp<6{BZeF?yC3qi1z7dKMU?XN@s>mKmdG zrC}eCN@nydW=79?X7ns+>{I9+78H7_gJ>fW-}}f69)JpF^}!L$>w_~mr4O!PhN}NyN7d!*~-|O*)CzbkZl{Aj9+W@!e7a@)xxja#%0dlF1KN^-##a{Y~PQR zz5C%~OJy6!HlEGTb{t!PEp4xBUNCF&s=5B=ok-r~P`yV!HgWY%OdvKv@oj^X2a(?7 zPv)p=)d6G-tv*V?8_aU8n(S&55o1M4Fe`W{%fK|uJf4*}p3a$ub!s{`s2SL(vav}8 zafQmmHEJfVSF>=VnvI*)T}R;)Wagk=59XGdSY#dw1fLTz|C; ziHK9g*xdb?+?eYxHbv7%O-YKI$1n{^bV4itx?YV;)sB-@2ZAb$Vzma9DuMD6RJR~pWz?A4h6HPi^C|-87~*mcT4hZr*!?-k4|ehQ#HtH%zI~KG-tK2VQw| zaxKr@v4tL$bAK&&DGfh)J9_f=WBP6+`>W>nLMJ#yKm$QN!3+T_2o@21K|mQn5kariUk%^_^)N0~k1)UvVyk+T)$b5)QIFwv^*HWRPoPgdiRa0`q@KpB>KWslcd;&| z(eKyu+HkUl4RZNIT+tA>Xo#yH;`AXdI>aS-il)9k>K4v}-N?obtd(xug46L0Ud2w_ z&U`X&b)LBqOLP&r^O%8B(O$ugz>SQ9-7M2bo17}} zMHers2azJsr2?}}=o9ExfjK5j73ficxh5PZP*Z^~nQ*+oBo!z$p8vy{@FRe1AmM!jA!Y#Z&A*H QZ=;dDm#fpUmu~d_2c~RAd;kCd diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor.class deleted file mode 100644 index 2b2125293aa634c48721659dbdbc81345a75b881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1265 zcmbVLO>fgc5Pj=}IB}h}KuMvcl!l}vDb!LC5~5WP1R+%la7dL)PitpMHgfD}?L_de zK;lar_yPPV#H`~g6atkZOS?1UnR#z#-~Rad?K^-2JhWh9$3hrNI zK9Qk%E+S9KQ5>p@?s&+MJCcEnj~U9f)__mAUppKeWUyO`fL-~@Kn%e^9Fc9bc<-`T-%*_-OsOQ@y6JpcWTn(CE4pCla(R6 zh-Da9A@7WKgZ5(M3s__CD~wObd`Qw(X#7Z&Xn<>e{60P7e2d_=AQ diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet$CacheLoadUnCaughtException.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet$CacheLoadUnCaughtException.class deleted file mode 100644 index 1c01ff2a66a95b38b544821f1f00ab0e2a566120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmb_ZO;5r=5Pe&LY6VdgVmNycOUD+!B{v=^fx4%Sy3VJ*N(RN9K*NgziiVWvf`24SS*TNiwo5^%yqHFJ#-)55X6K7Q z%`zPuf$EhpDsdx9Q^mCxUJy?uMcOByo^V|ktIS*PRairn8P}tR4c4$wXJ%m&>x|Aa I(_n1B0oP}eOaK4? diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet.class deleted file mode 100644 index 38e2271003acd102768d1df31f977506d11ea579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcma)6T~8B16g|@}EG=6Bk*|tC5s|h?6%>)y`hlXRpe7&&-=@okF0{K%yG8gb{t8S~ zf+YHG;$JeJ+450BA9%TY=iW1S&OLW#|NQ&;3&1phEEx998HP0@lmSs6D5L&S}9qH97%=VqnW>$0Q)wOh%sMd__*j`p3I1yhH z&=%Ycznbk>Z)>HzRauq!A|qFqTvHa;WW`qN%Eo)W9D#FUs2Vrt~*%J(VY|o=cFIPmA$E zNBHFVNR+<*7ku;G2-4>$XnUD|@2`Q*!~sO&2!Ztj1iwT3%3KhAwCYa*T!F?q{qzj( zBpw5Z@_YSUWRNR?8yMmqRsAn_1^Jy#e1n!eL`wi)5c3y_Pt>Is#J1?GU9@5>9BEx~23ITx$fion%<9j!9zD R$KF8)zhPq3zxE2E{{j5?M}`0Z diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaArrayUtils.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaArrayUtils.class deleted file mode 100644 index 957c5bade486993d9101e5c50b7c2062a178a2df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmb7>%}(1u5Xb);+c7at2!zs43fzLFvJ%IFP^+q~D!KF!gQ{{`8!K$;*pa`f(0m6Kf7EJaS-SS&PRuR&1;?)VF0S z)eeKvUEgOgUu1_d!<;YEcy~Mu<2(>yLY@Ubi$t<7a;fj7(^N;YVBmg~4Y^2UC_=#p z$3tF-^f1gmaWRs7tYpGpi|2VRCVONTTMV`=UJgfU!m!jm@CV{p@I<72{w^HEk=k1S zz+efTz|grNPHETMnT)PlItT&+G9aloJLvR4xUakce*-LlO0*? zW~%J3(T|lMr+syFTd!~aQIXRpJ5tb$Y)mSbSib)m_wW5^K>pNYtI7RI&|tV9OD_oBH1&#IZ7kRpe4wOJSXmEJ{xXB|>Z`Unj)Ne#0Tm zR;A~h_1c!xsR_&F$U@b(gF zy+FF=sVMud>)3(xy-N;s3;d#JGzi6=YD?UUC~cTjh@!6Wn&!FH;>tpPG(^zt0hf>+ zk0MYwLHN#3qN?~c*5lpxXt}YdVy#jrsn*#NCNE^u6G5-T^rK?sc(lLL_~9Z9Gx8xv zzwmn<+c}YH(bsC6m zX_Zo8&|xvV__z752+Z@?vE@~#C(lYpDwg9Es-Dq57|(!UYyRI&n~{8P_IM%3nnb4Y+-VSCXX_KhSAZz;c6M2%a>?eM z_ikrC?$uhZwgNW2RET%T3lM%rpD9q+<& zK4Z;%_rOPtEk%TD3$-M_f?v)20^$+{A6n~9KoC*NVb1|=Xr~sGMW&Yw?yCp4nd9&c zBgBs~3Y{PIBDYmHRg_;aD8R4?7BHpJkhYDMh1_4nzXv2Oi>ckkzYgELE*%|MLdA!r zM86x$>gXRcu|j*yybNs^nz(3Q`5OLi<=sIHJ z9~R6b9w&^61j{AMwvP#A&7;D+;1(?~3|$?Cs*KSpVZjc`qitZfQq(szR4j`7v6_1l z%nv23Y~|z2d6%7(*)5hu5?(A47cgH!w3-P;xs2d{p`?kno5xAJD6+YXuA@k4E%Ahl zr@^<7a3OiUJUE|(3p3#Ql9bw!(h}ncrTm6pJ%>m_8Anr#c@CO7#+eAEbR`uqG(#Uj z%uo&gd9)`CweAxni!qu>*N} zKFgh69EDA-$hCwD%BXQYf#-3G(kpQA8V2w>EpK5E@6dV{L--Ic;1j%vPw^5i;$?h} zS20enZ}0|wz?=Ay@=rK}pYb++!Mpg4QGeh)T*dpihGDnOLu7fDOx9sN`}q|I^+8U0 z6SxUJ_%v8Pi*aJ@bR(w3^}>{szHC5^d%#UqsbJp1?Pq@=R~ y-(eFTmul=0kd6BlSC*rfNIdwTD4&w0*s`}5cL9{`?WdjbV4tHIPUfyV_r(XoO`0jmX6 zHLPh^XDIf#XT~9S#r_V%T;r7YxaD#G#M+NT>7VR$rPmap&5(~N5} zI1WNOb346E#gjK=$P)c{NSdu`$n%6ihFWSOY1OAD9xZc|BvSl#tqFNkQ{I}x{nriM)e7Pbr+m^7fH zXkZE?6K%kNt)XU+9G}tF@id5~L1LpkC}3Y(T4s&mdD`w2sz&l;m^s&dlFdLbFVgV- zDRhP{brno=oJ-RT{GCJ?jPI4k?E?ZHZpFK}y>a_%c`9G!#d3BV#{bpJ2F;vc{w?qZGr z=LsN3c7euwDbV@LpqB`G`O46XDbU(w&?^L8xgvCy>Qe+hpgyQd9$^W$$kVB&0$F-~ E1F#=v1poj5 diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase.class deleted file mode 100644 index 00f6b5d18a09b956e66eb3a76abc6157a7d8ef98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3138 zcmb_e-B%k$6#q@2*|2O|2wx?&LN%68*_LW84Ymb@mNtL_f=H`wk^z=3yRg{+TD4F9 z2mTSh_~1(-a`X@AgD;-roBk;t@62wRq%nMWnv*kk_Rh@x_}x2q?(=_s`3=A@o~dZV zO$8$=LW15>Q7>phMHr(B-WT+C1a}&77h?*>RcM%K#0QuZC#DqK6B6#Ln8t$$9!8K< zFr%UgvyGU;hYCJYaRKuYEC|VqDn7=Nm@SLp69p>@K2_0;n<~1n8o?t4j~TRS+ve_s zWn{BF%MczlZPUBWP}keH#85xsWH`h5q-pcn+*XRai$=;KPBiJH4Qt78P4OKt>%9$= zWF(SlXG=FMGi9UZfu+SSZ3Eu^Q4*eIO$&`_Jon;35Kg; zOFUk=9*;ZrIA3#IPLp}=Qob;0^#~sg^R))JXP9|sZ$z5)H%Z8WU z;4Z_1lh`E0=rhO2A`=zQHPU=xoS`$hY3v%hW!UTbg6Ep{dSC7x5NCT-WS1zUlmVH-Pv-9sYKL%y91 zt-XC!;itfrc{rEac1 zEu+0PFRO@@%d_%k&`o{$o+m`jQXE^BGlu4AnR{d>6^DRl^p?d;@)CVVsyjNX<5emM zl24h%cq+s8<;*q3d(4$E2PxV26iRAC~PEVIbM~Vm*%h*9)os#1h!Nh9Wv4ADQK74vS zWMqT7HF$Jnxvc7PudEFnm424l(NubX$EX!@J!*|aPvm-&J2}ImE~BUXiUlYC+o!O_ z?R9TMHc`{mQ)RftJ$l72k@o5*qtr3PDy@4_63KL2Mx44o@e6@bMed=om%enOjOdyE z0@zP-xsS%MWS&Jo%{6}m1~5op^fu7pI&qj~&`2}j??Z%E3aCpSqMqoPnL~tE1`1H3 zkvtlr>H!)!kc#eD^IN_I3hn8(GR@!DV=O)ll}`Y9!L1riU@O(tJ1;0<5yn^kg4sLY~;ylp`Q z?bJ7SAVv*y7di=%7_JjKH zk6?gq1b<>k2BitVleB9Tu3^$yPq<&lJ2VrKd6#GiH{|#p-Xa7nyGwhFa07Mz IVeoLnzbO8qvH$=8 diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/EventWatchBuilderTestCase.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/EventWatchBuilderTestCase.class deleted file mode 100644 index 7f0e59fe249c17387343c3de2aa2d6a65b4f5c3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6115 zcmcIoZFm${6@F*4$!s=L2r0z|C zhE^@LVAa}Mt!OJ%i=RbBEw+RdLF>2GR;}M!|NG0I{`B#^GqYd$Skg3RpWHj=%$;-3 zdGCA9y)&==_vNbqHshaR>_D%K{b2+|e;|yY==;K`K);Lu(GP}junLE8xC-|{t-=rz zqDhKIlW`=BYV-;rRZgSgPZs8e!_YBOiK8&W7=>n?GnnOb-faT%~n#Aur#il zT1RGdNV9v?A%mKlxRp?iUe(rx>??!Lu%4E%J)W>eW2&JKsY7aPWPCK1R?Xy)H4!_e zI$GL^sbhMqWn43z{i>4~-kH&jBn|UUvzpc#B}BxiNMy#4NW`@4QPqex zN`&|-OM(b-utCH)*pLtM*9>y#xT6gY3?5YQ8@xs~G;HV`*KAu)Y6@N#nyQ8kEfWcC zOfX)-Z-uI%RIon3ni2^nV5^~~(lUOh;P-e##vc^?5r2}fEDw2`>5#r;ZD3%hf9dO>UyHC?vMW5Rl5l## z+>d09EZ#zABOy3UDp!(Vm-etIKZ?ur!W`3VPQNUrIqt67b9_u|vTc?7eo$OX*c7cB zD4AiJIEi^1S42EQbJh6+M^iej*(^E=D+VuGj%8GXb)h`Edv_gA%m0wDu@uLr8|Mk4 ztEFdOR|gCHTlH$r?XRGcW*ps!HI3lU@+P*>SjgHJzbsqyLqv*rM0uGg}YXBQ#^jSSjrCa?qy>Q#@jmhz>4fLxm;>@50_gbfL;at(6QRY^|ku zQIrNV&V!LXs>4&J=`pyfNGk7Y+0}A@=fjfpnZJGdeX?}QmfBDk%LzfSp+bHx_NL_R z-8`ka)m63CQH=--fSDObqJ?>|*i&aWFCtyTM9jb2__HsgGIz4_bxWt6I#^*z&<=Xd zU609ynlWh(}!s9nrR#CTD79L1`A1C?F!8npM*>b-pHhZZAn% z?V2-eC9{)u&Nk^R_U5Om<2Q>pSxHKvP=d+1?NP$|QYH!t`ZZoiN=$}zct5|sh`(}3 z;(d>8Go=`NNoY4rLVAH00o={D!c|tIh1ZHV0Ik?XiFJSv2gJkDE`Go%qwdOO1o|dX z7Qc)j`||e7sOYPogj^H4h{~Gq6siK4f+DfGPBcrniA`Z?fUiE)d|=rWY69559M{)h z#0^(ZUBZeBc!#*Ygc~oR_5xNG3abi*)rG=Mg~FOb;pV&$=H=Qctdro*ln=TK%NfiH zgm5FjGOgrq6>i3AL~s-8um%m3ZpB*SxQ<}F3thZ(7`MQ{yKx-r`K2d{r#SLCY`}Tc z^ObI+3*cH0Bp<*KUP2po6Ub_gx)*VR+0J>-5v2-$v)I6x5l2x31$93Y5;1o0q2JVX%hTM&qQb0EHsO2J}jb)Jb# z@e5c#iD*sTMQo_4ce6Zr1);vOnvLC4cuxSn)Iceglio{dQ$gx)X6jGN$y|n(ZEoKf z6jkI_Ns^{;TLnLx)KYVMktRY-y+7BMi@2k^-1Fj2j_U3U)@&8Mf4@;&Phnfu(p|1$ zS1dHMU6>J5&bZ@F;2RTebms=;*X;pT3qa$#rEmj=xo$dZ!w6I0C@F1l6-UtvlOrq~ z!x%EK@gVz0Fo8$;+4*tyr*Q&jsX336cm=2U{pSQ;*jC&L)er+)tKc{3O*y-V|4y09hmo|2{m;elsi4A^v}^qLQqsz_aX! c*gwbq>-ZbK!Tu;-z_)kQ($fn3Vn^-&0Fc}KfB*mh diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderModuleEventWatcher.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderModuleEventWatcher.class deleted file mode 100644 index df83b55f8abafef00ea98ea6146ff6c1a16864f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4851 zcmd5=TXz#x7~LmHGfk5U2qY*K+ynt1tcne}>C_&dlV}rqe`WEgpLAXYcQJzWLHW{`uuM0LNkVVGHIp zT$3S=HaBFmAU75@e4*i{hFcm=$%QX9+}7}whC2d-)?=&U-!gpj!Hioe z+rI5qZdmsP4$nO_9vgbiw;kPdD`w5}cu+Tdcf~gKY1Q$d#Z}Xq6v!;tOBKVfd6vLR zH+QGzOm{^$9J^$c4E^Eb6}@Uy$|d)yZmin6V^@8vVtKmt)YmVrmv!& zeDe*6py(qOMVwvr+$GPdRuyOO^>8MTD^@7yw6TZp||-{i<88Iab3Y zmNyddE7=B=Q5K)ATGO6qJfnmfz7|Ny6@hzQNpvUHM~WzL&WJ=;^yw+PV*6(Vl7-Qm zq@8igq}?)SSFHKkO3CsTjgrHaZF8<^I5!Q?mh*5iuz zBLyyO0@G1A2n<95*5g6oSYfnFzY6p`k(ol^&qA!p?%R&fH+xBSld(sg=z+J|A@)v3 zN_VN-Xi*>?$Sp7)OW&%UKyRdjz=_z4(YfHQH2J(Y$|C~jV-Y&ioXJ={$>62yT^d5* z`#0^}E+vw#`8!^wx@9-|OvGBXe)}zm!3;mP!Dm?DOlMMWq%#A$Y&n+CEPJU?jK%6G zu4Eq1s03hn#j=2)Us8plT<%rNc4bM!J%Rq9o-iDzWSGlB+>Li$>wAio^No2bmNm{g zEvm++x;U69<4<<`Hk41I+X9+$#7s%x@@rCwJ})=$`z}5;tyNhiRyBMh@Yh@G+E&N> z2ebAqs6vY$F+QOEn^hP`WVxKfhuF){M;E1Y4g=Vh!%o?}E1UOZ^DPX4ssB?L3mot0 zdP~Y{52rC_ouH+L4+@5!8dFix;0 zJuu8)f?GgCB86=-+&JFOACL*`;FytDpAT}(Ags@aIA%Q7=X;Rjm@&?FmAas(V3 zdj&D}D-yR~A^9^>jbTq?m~ITU7m9u#+d=fO%~G^}3b_?S6m36O^IVl=1jh(h!0`bb z42dV$%f0N_Pe{E)@9)U`$Y}x+GOf0Tnjo@uhyq62K=dexzO@j0+Cq$BybVNJL1foL z>}v~g2#4E1XbK{?7UDn~i03#0J%m_fFKw7e{;(D zR*p_!g3gqqlQ>0hNQRF?hFSJ0xwnqtsA3okb~j;=xJiY3I>h~sY*O;P^y2tS^t10d z6!huCL9gwmfBTz=gMgVpF9qF7$Xyh37^j<5&DRCV;}c9ORr7UK^L178p{mTZ_%syh zEX9##5RC{8!s)Cc*c)ut30R}ytRi6TPYWhEp2E2hY(mSWpnZiQfvJS*$zbXS4LsG(HRI z7r3fUtu@DdlfA_z^paHBG_-evDuFo?BybhG*$?qlmOkB;&ftCA#Runh<2>gx>CC@W C_)8H0 diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderProgress.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderProgress.class deleted file mode 100644 index e1736ce732f80f61377a943ade7481f113fefc01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmbtTZBG+H5Pr7rEhmL42%-oIQi^hlA}R(&BBrs35rp`0yItDD>mFY3kno%QVxp30 z;t%jg8E5aVl!R)Gewo>~=b4#jW`F$r`W?U=9^{b4Od8j7h+!s+3~p#MtGA{$H`BP4 z##|bA81jzV@P&}A){638$sLB7$}ZpMrtev{DI6ty*OkgMx#u)3VJ-)*tUOtl?jl34 zqgJ_P%UT3#DKvb)h@Ku-R~(_qy!GAUDDN7AZ2&^#wy}hZJo!C}6Q1B$W^(HkH;4oFSBV zq7sswYU~LP+v(&s9N!gkmHNam(p|Gz-E{-K$TLj;^#mB`fnnf`HVc?Ca1T=qOaIqC zk~BylXvTVVR|+qU`!p86qt)X;eGiJHk*N8$e7a9VyUjh(knTi#E*LVMrBPN&xj=`%Ys4wxPq36K4(EIMLtdEq%_$++N~i@D`2E_ z1XlWn*qbB7KO@muCO^`34E9HnA5P6=+3$!yrIL_i6?P!uP7*WsDKBmt)1gYS0 zJ^&7eml04y&tr%z!!Rz8)!98KuR~@_pOE;1)OLqTmj(i7D6Y<9EPQxOm&FJ!5}d%e zM8q*#kK!^}P5hdCLf;W_vK#Rb5f2B%rSRb&h;@iD(p)Qf1y`dGkBDC9eyaS@6Zx`Z zT84?Bd@aOelX=MScJHw>hI-M!gJ4E(w zd<3^{+>jVInz-Nrd=Q_(6?*QVBv4k~#rgftIo~UN10-_O)^M@#?B zjvQwDIw&zrc2qBtI!)*%wXN>PIFnX`YE8XiTj<1T;s?)_xuJV){YPetB5dS~s9~Am z$$#FFVea}t=pMmQDnmMM`G(^*_pl6$K7x5UFhhc*L!KbbNZYI5z`kVZ36draDw!l% zya1qpDe~TvKTSdHp!Q~5jmElU&tNt~)iFnwd3D@EiO9@fLAjSG_YzemRE4}5 ZSm&5 - - - - - %d{yyyy-MM-dd HH:mm:ss} %5level %msg%n   - - - - - - - - \ No newline at end of file diff --git a/sandbox-common-api/pom.xml b/sandbox-common-api/pom.xml index d823e237..d70f595d 100644 --- a/sandbox-common-api/pom.xml +++ b/sandbox-common-api/pom.xml @@ -6,7 +6,7 @@ sandbox com.alibaba.jvm.sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-common-api sandbox-common-api ${sandbox.version} diff --git a/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java b/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java index 8df7453b..d58cbc6f 100755 --- a/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java +++ b/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java @@ -93,7 +93,9 @@ public interface ConfigInfo { *

${SANDBOX_HOME}/cfg/sandbox.properties#event.pool.enable中进行开启关闭

* * @return true:启用;false:不启用 + * @deprecated 后续不再支持事件池 */ + @Deprecated boolean isEnableEventPool(); /** @@ -101,7 +103,9 @@ public interface ConfigInfo { * * @return 单个事件类型缓存最小数量 * @deprecated 已经被废弃,推荐使用{@link #getEventPoolMaxIdlePerEvent()} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolKeyMin(); /** @@ -109,7 +113,9 @@ public interface ConfigInfo { * * @return 单个事件类型缓存最大数量 * @deprecated 已被废弃,推荐使用{@link #getEventPoolMaxTotalPerEvent()} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolKeyMax(); /** @@ -117,7 +123,9 @@ public interface ConfigInfo { * * @return 所有事件类型缓存最大总数量 * @deprecated 已被废弃,推荐使用{@link #getEventPoolMaxTotal()} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolTotal(); /** @@ -125,7 +133,9 @@ public interface ConfigInfo { * * @return 事件池最大容量 * @since {@code sandbox-common-api:1.0.1} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolMaxTotal(); /** @@ -133,7 +143,9 @@ public interface ConfigInfo { * * @return 事件池每个事件最小空闲容量 * @since {@code sandbox-common-api:1.0.1} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolMinIdlePerEvent(); /** @@ -141,7 +153,9 @@ public interface ConfigInfo { * * @return 事件池每个事件最大空闲容量 * @since {@code sandbox-common-api:1.0.1} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolMaxIdlePerEvent(); /** @@ -149,7 +163,9 @@ public interface ConfigInfo { * * @return 事件池每个事件最大容量 * @since {@code sandbox-common-api:1.0.1} + * @deprecated 后续不再支持事件池 */ + @Deprecated int getEventPoolMaxTotalPerEvent(); diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information$Mode.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information$Mode.class deleted file mode 100644 index 7e211bf85a93b1e35f47343ffd36155598816841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1167 zcmb7DZEw<06n-ug3SGA`Hg(|CP0;~EDsz5-DCj(>1#YxBc zVDR^rQ4^<*JK!VB5ea!b&k!uNTBY(!1~t(x)!$T_4944qlT5fhmh`z~YT?65*(+qV zZV9t79&}8%#XB~Yrg~YAP8psj>wP}qhRsFKXpUS<^zx}iMMmpRm)mXbS~C5NLlJyH zRMEflQ)>#AuttXrH~&FjOSNeRqjwfn9d24Z!AE14GWnA-5Gr)-+2P_`>WUZ-3XADJ zq#0>VXY6*(7nbZwWNwIA*%cj8xjgGSo*<`UpCPlz4(Qm#Qyq73SI06UI@SHqYI$Zt??IQQYJu_ zlmd~ste+wZ!q~tK(7edIPgXwK6zns67w~^1kKq=5gI=sk_)WxS_yhR7zgkpDe?i~^ zip2Y_;p6m2zeM3Sw!Ap?jZl&?2S2@ln%>(wNAQyuo~OGyuHv4Qj%^RKgAmExnF(o7 zA@a$7gK`{I{pSdsA?!Jt;yFu!?-cS+Y447eDVCaNV3O^!xD`)CotpF-aa76MrkD>8 Sknrq7tdi9TtssS!V(d55#|>`) diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information.class deleted file mode 100644 index 8b255194dee088bcb016f86fc6934849e1dcb779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903 zcmb7CU2hUW6g>k=7on|ftshuxYg;KKrW<|r#SNk*QfQV1V|i!>nBtJ#nPzv`*uUn3 zKfoVlyo-(SKw^EEk9+6Lz2}~LfByRZ1Hcb4Pp$Un%U<2%O$+zGfEI~@~AHGa#mR?{jrT$vsZrXmlUT(=+Hu7BG0 z@+dN7L?{l z$v0i4w3)fyiz_}248zI)2FbY}>n)#Q#r1u+c1nfI*c}>~h_-5KPQP41>V+?j8 zqL>&EoKMYH9WfL-dKwMI2N{rt8w)H?Qn?sP-c%VGik^(+AP{rPr19>8ApCDFj?bg9 zFjQbJNmXSySdOa)A{5H_H`l2emjC6v&al56>j^_pqE5*2KOpBiki#1S+FrNiH_j;P z@f}-363nNhJ(!3g^<;1ETBvfa1jDO4hM#r5%s?YWD@%I`Hu7}8M-9rLKz4D#UPaEL ziNrcU=Y4Dta+8p2ePjf-@F3l`>FFUJ-9BY6@R%G==+7T)Hik`((xRhCxu4E5?%)}n gJCu8u@Xz~T0(;oUi_{W0z#&!$P$1Kym3vqE4LQ5%*#H0l diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Module.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Module.class deleted file mode 100644 index 1630ef51f33af5cf1b6a711d05dc80a3f2132fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmX^0Z`VEs1_mPrc6J6-|1OfSlaGW|kEjOir_%K{>s`ubK@+s^5QZS8HwC}`^f!kX`U{+hRA z2~abxYx!%Axxa7i3s}fjyjs$9?6O%lle-7C7ID_efSEITwpiKo{;2zV3E?wSW?(lOm?(y05kTU}0c zOgobGDyCC3eVf&37ZY8xMl~b<77`Fj*{)q*5iooWk4&N{K&*eXX%1n-uDWKu;Zvqy zoCV}m#c3bTTu80CjasV123BY(6vJ!y6>Gz0a~is`J~M1qDsHkRA5)RSO9@1NzM~CP zF@aYq9^j#hK@6)HVPcetC=)RZ3+O%nI;=ART@}Z38MS!gLf3kE*Q(Ts{`7xPA>tRO z&TrK6g`{WeaGAq$dX_G0gl>K)9c9b`(nOwX;?Fg;z%_LN^vBrD=!A$cZs9fr+#%~O zY4#{h2wxF6LGUwK0>(*(cq~o$365jk z4MpTeH#gKSZuD@YH^hxTZuCps7?6KbhG3KSyCgQzZIrs2=rKy6Ci;w$)Wm>s1cA|P tO(jM|0S!HPP5Yr!Uj>><39Cp`UoEPS@R%?G%-{xTg-(j}j~+@#{{m+`RqFr% diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException.class deleted file mode 100644 index 5bc9e0652537d98442f3be3f621a1586fce3ddf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1207 zcmb_bTWi!n6#gdJOLrUHHQnmgYj3u@sWm8wXhnolp|JI(wcz6<8MafhNzJA9XDL_; zKKKLtQR10o$%a}Vw)iqL=WxzGJ zL{S)Rhn`?Cc7s4f+dhwD5i`uBf&83`U5~*W9P?9d`#c!h`$;5&;TE-uN$bmj8;)%5 zONTq$K0Y1UF%LW^JhSl6e0AG?&aD97W+5C2mU@sk%Ik zN%#Df6%4aOk$fy}s?+P2>WaHEsHm7a!z-$~?u9k?!!&Zmd#Q%mxpcKp)jKh86ORov zF>AoU4Hd32Y)nDOFgJN{#k*m6F$Kotl`-f&HOX%Iw#q}s5`B#t{TB_Ul1(R5DW|;x zM)F&jKQ$IEQ9EIfwp@QW|d2YElDmht@6{SfJLslmiy?Hq4wJiB8gEsPlF*GA%_b8*LQf}5SH^083S;PH|;sMPFq>!ObPG;UM F`~hM>7#9El diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.class deleted file mode 100644 index 7b9235a78922b6ec98d239e333740911eeade067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcma)5O>@&Q5M7lJLnv+2CZVCFd=;9^Fqq-Wg-$6$h6XaE?Ey}*y$K4ol#!H7`qwz{ z1Nc!4Yt?n)PU&#b^J@3Kx02Ss|NQ&~0I#9#!LA3-7%UIbe&Pw5F%OYJt<^pn@hSIX zE{A^KY9WVj7VudYgNDH?VumX5c`O1RaDOySe8XiFsF}~l z!tcm|(h0Xh$=y_dR9A#Klst&>L>fLI$s4Wq*K@NEDxrAo+;$SVQYM82|DAH)?&^s5SBhk`pQ(lEX z&}MnM_zH1OQ5%{73i@iILwqk{dgs*xB?n@dj>yY&`WX1vjS~4evOlNMtjx#ub1=ft zdeCC<;yRtnBgtUzKg-Ju7%b7B1h7$}=YkRd;Z3;humX1+E@%693725S)vwZ8Cia@E zsAd)G8E*WuvIcd>Xk^;=V3SmwCOJ0?(fvZSMN!(_c7_i!+{y4EJaYNRX%E!r6SqEv PTZ9$zD8qB`-ZuXN>xUgJ diff --git a/sandbox-core/pom.xml b/sandbox-core/pom.xml index 23b3c037..f880e109 100755 --- a/sandbox-core/pom.xml +++ b/sandbox-core/pom.xml @@ -6,7 +6,7 @@ com.alibaba.jvm.sandbox sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-core sandbox-core ${sandbox.version} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java index a16011a2..a6f654ac 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java @@ -1,7 +1,6 @@ package com.alibaba.jvm.sandbox.core; import com.alibaba.jvm.sandbox.api.Information; -import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.core.util.FeatureCodec; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -34,16 +33,6 @@ public class CoreConfigure { private static final String KEY_CFG_LIB_PATH = "cfg"; private static final String VAL_LAUNCH_MODE_AGENT = "agent"; private static final String VAL_LAUNCH_MODE_ATTACH = "attach"; - private static final String KEY_EVENT_POOL_ENABLE = "event.pool.enable"; - - // ------------------------------------- 事件池配置 ------------------------------------- - private static final String KEY_EVENT_POOL_MAX_TOTAL = "event.pool.max.total"; - private static final String KEY_EVENT_POOL_MIN_IDLE_PER_EVENT = "event.pool.min.idle.per.event"; - private static final int DEFAULT_VAL_EVENT_POOL_MIN_IDLE_PER_EVENT = 50; - private static final String KEY_EVENT_POOL_MAX_IDLE_PER_EVENT = "event.pool.max.idle.per.event"; - private static final int DEFAULT_VAL_EVENT_POOL_MAX_IDLE_PER_EVENT = 100; - private static final String KEY_EVENT_POOL_MAX_TOTAL_PER_EVENT = "event.pool.max.total.per.event"; - private static final int DEFAULT_VAL_EVENT_POOL_MAX_TOTAL_PER_EVENT = 2000; private static final String KEY_UNSAFE_ENABLE = "unsafe.enable"; @@ -176,16 +165,6 @@ public synchronized File[] getUserModuleLibFiles() { } } -// final DirectoryScanner scanner = new DirectoryScanner(); -// scanner.setIncludes(getUserModuleLibPaths()); -// scanner.setCaseSensitive(false); -// scanner.scan(); -// final String[] filePaths = scanner.getIncludedDirectories(); -// final File[] files = new File[filePaths.length]; -// for (int index = 0; index < filePaths.length; index++) { -// files[index] = new File(filePaths[index]); -// } - return GET_USER_MODULE_LIB_FILES_CACHE = foundModuleJarFiles.toArray(new File[]{}); } @@ -254,45 +233,6 @@ public Information.Mode getLaunchMode() { return Information.Mode.ATTACH; } - - public int getEventPoolMaxTotal() { - return NumberUtils.toInt( - featureMap.get(KEY_EVENT_POOL_MAX_TOTAL), - getEventPoolMaxTotalPerEvent() * Event.Type.values().length - ); - } - - public int getEventPoolMinIdlePerEvent() { - return NumberUtils.toInt( - featureMap.get(KEY_EVENT_POOL_MIN_IDLE_PER_EVENT), - DEFAULT_VAL_EVENT_POOL_MIN_IDLE_PER_EVENT - ); - } - - public int getEventPoolMaxIdlePerEvent() { - return NumberUtils.toInt( - featureMap.get(KEY_EVENT_POOL_MAX_IDLE_PER_EVENT), - DEFAULT_VAL_EVENT_POOL_MAX_IDLE_PER_EVENT - ); - } - - public int getEventPoolMaxTotalPerEvent() { - return NumberUtils.toInt( - featureMap.get(KEY_EVENT_POOL_MAX_TOTAL_PER_EVENT), - DEFAULT_VAL_EVENT_POOL_MAX_TOTAL_PER_EVENT - ); - } - - - /** - * 是否启用事件池 - * - * @return event.pool.enable - */ - public boolean isEventPoolEnable() { - return BooleanUtils.toBoolean(featureMap.get(KEY_EVENT_POOL_ENABLE)); - } - /** * 是否启用Unsafe功能 * diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java index 8847a7bf..40cff20a 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java @@ -16,11 +16,6 @@ public CoreLauncher(final String targetJvmPid, final String agentJarPath, final String token) throws Exception { - System.out.println(String.format("attaching to JVM(%s), agent-jar=%s;", - targetJvmPid, - agentJarPath - )); - // 加载agent attachAgent(targetJvmPid, agentJarPath, token); diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java index df1657ba..5a9969b0 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java @@ -5,7 +5,7 @@ /** * 中断式事件处理器 * 当事件处理器处理事件抛出异常时,将会中断原有方法调用 - * Created by luanjia@taobao.com on 16/7/26. + * @author luanjia@taobao.com */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java index f9121a79..db057725 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java @@ -3,25 +3,23 @@ import com.alibaba.jvm.sandbox.api.ProcessControlException; import com.alibaba.jvm.sandbox.api.event.BeforeEvent; import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.event.ReturnEvent; -import com.alibaba.jvm.sandbox.api.event.ThrowsEvent; +import com.alibaba.jvm.sandbox.api.event.ImmediatelyReturnEvent; +import com.alibaba.jvm.sandbox.api.event.ImmediatelyThrowsEvent; import com.alibaba.jvm.sandbox.api.listener.EventListener; -import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted; -import com.alibaba.jvm.sandbox.core.util.EventPool; import com.alibaba.jvm.sandbox.core.util.ObjectIDs; import com.alibaba.jvm.sandbox.core.util.Sequencer; -import com.alibaba.jvm.sandbox.core.util.collection.GaStack; -import com.alibaba.jvm.sandbox.core.util.collection.ThreadUnsafeGaStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.com.alibaba.jvm.sandbox.spy.Spy; -import java.lang.reflect.Method; import java.util.Map; -import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; -import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.unCaughtGetClassDeclaredJavaMethod; +import static com.alibaba.jvm.sandbox.api.event.Event.Type.IMMEDIATELY_RETURN; +import static com.alibaba.jvm.sandbox.api.event.Event.Type.IMMEDIATELY_THROWS; +import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.isInterruptEventHandler; +import static java.com.alibaba.jvm.sandbox.spy.Spy.Ret.newInstanceForNone; +import static org.apache.commons.lang3.ArrayUtils.contains; import static org.apache.commons.lang3.StringUtils.join; /** @@ -37,37 +35,24 @@ public class EventListenerHandlers { private final Sequencer invokeIdSequencer = new Sequencer(1000); // 全局处理器ID:处理器映射集合 - private final Map globalEventListenerMap - = new ConcurrentHashMap(); - - // 事件对象池 - private final EventPool eventPool = new EventPool(); - - /** - * 获取事件对象池 - * - * @return 事件对象池 - */ - public EventPool getEventPool() { - return eventPool; - } + private final Map mappingOfEventProcessor + = new ConcurrentHashMap(); /** * 注册事件处理器 * - * @param listenerId 事件监听器ID - * @param listener 事件监听器 - * @param eventTypeArray 监听事件集合 + * @param listenerId 事件监听器ID + * @param listener 事件监听器 + * @param eventTypes 监听事件集合 */ public void active(final int listenerId, final EventListener listener, - final Event.Type[] eventTypeArray) { - final EventListenerWrap wrap = new EventListenerWrap(listenerId, listener, eventTypeArray); - globalEventListenerMap.put(listenerId, wrap); + final Event.Type[] eventTypes) { + mappingOfEventProcessor.put(listenerId, new EventProcessor(listenerId, listener, eventTypes)); logger.info("activated listener[id={};target={};] event={}", listenerId, listener, - join(eventTypeArray, ",") + join(eventTypes, ",") ); } @@ -77,16 +62,18 @@ public void active(final int listenerId, * @param listenerId 事件处理器ID */ public void frozen(int listenerId) { - final EventListenerWrap wrap = globalEventListenerMap.remove(listenerId); - if (null == wrap) { + final EventProcessor processor = mappingOfEventProcessor.remove(listenerId); + if (null == processor) { logger.debug("ignore frozen listener[id={};], because not found."); return; } logger.info("frozen listener[id={};target={};]", listenerId, - wrap.listener + processor.listener ); + + processor.clean(); } /** @@ -96,7 +83,7 @@ public void frozen(int listenerId) { * @param processId 调用过程ID * @param invokeId 调用ID * @param event 调用事件 - * @param wrap 事件处理器封装 + * @param processor 事件处理器 * @return 处理返回结果 * @throws Throwable 当出现未知异常时,且事件处理器为中断流程事件时抛出 */ @@ -104,20 +91,22 @@ private Spy.Ret handleEvent(final int listenerId, final int processId, final int invokeId, final Event event, - final EventListenerWrap wrap) throws Throwable { - final EventListener listener = wrap.listener; + final EventProcessor processor) throws Throwable { + final EventListener listener = processor.listener; try { - // 调用事件处理 - listener.onEvent(event); - if (logger.isDebugEnabled()) { - logger.debug("on-event: event|{}|{}|{}@listener|{}", - event.type, - processId, - invokeId, - listenerId - ); + if (contains(processor.eventTypes, event.type)) { + // 调用事件处理 + listener.onEvent(event); + if (logger.isDebugEnabled()) { + logger.debug("on-event: event|{}|{}|{}@listener|{}", + event.type, + processId, + invokeId, + listenerId + ); + } } } @@ -125,6 +114,8 @@ private Spy.Ret handleEvent(final int listenerId, // 代码执行流程变更 catch (ProcessControlException pce) { + final EventProcessor.Process process = processor.processRef.get(); + final ProcessControlException.State state = pce.getState(); logger.debug("on-event: event|{}|{}|{};listener|{}, process-changed: {}. isIgnoreProcessEvent={};", event.type, @@ -135,12 +126,10 @@ private Spy.Ret handleEvent(final int listenerId, pce.isIgnoreProcessEvent() ); - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - // 如果流程控制要求忽略后续处理所有事件,则需要在此处进行标记 // 标记当前线程中、当前EventListener中需要主动忽略的ProcessId if (pce.isIgnoreProcessEvent()) { - eventProcess.markIgnoreProcessEvent(processId); + process.markIgnoreProcessId(processId); } switch (state) { @@ -148,38 +137,51 @@ private Spy.Ret handleEvent(final int listenerId, // 立即返回对象 case RETURN_IMMEDIATELY: { - // 将BEFORE压入的堆栈弹出 + // 如果在BeforeEvent处理过程中发生ProcessControl行为,将会造成堆栈错位 + // 所以这里需要将错位的堆栈进行补齐 if (event instanceof BeforeEvent) { - final GaStack stack = wrap.eventProcessRef.get().processStack; - stack.pop(); - wrap.cleanIfLast(); - if (logger.isDebugEnabled()) { - logger.debug("invoke-stack mock pop, IMMEDIATELY-RETURN deep={};listener={};pid={};iid={}", - stack.deep(), - listenerId, - processId, - invokeId - ); - } + process.popInvokeId(); } // 如果已经禁止后续返回任何事件了,则不进行后续的操作 if (pce.isIgnoreProcessEvent()) { + logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-return-event, isIgnored.", + event.type, + processId, + invokeId, + listenerId + ); return Spy.Ret.newInstanceForReturn(pce.getRespond()); } - final ReturnEvent replaceReturnEvent = eventPool.borrowReturnEvent(processId, invokeId, pce.getRespond()); + // 如果没有注册监听ImmediatelyEvent事件,则不进行后续的操作 + if (!contains(processor.eventTypes, IMMEDIATELY_RETURN)) { + logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-return-event, not contains.", + event.type, + processId, + invokeId, + listenerId + ); + return Spy.Ret.newInstanceForReturn(pce.getRespond()); + } + + // 这里需要补偿ImmediatelyEvent + final ImmediatelyReturnEvent immediatelyReturnEvent + = process + .getEventFactory() + .makeImmediatelyReturnEvent(processId, invokeId, pce.getRespond()); + final Spy.Ret ret; try { ret = handleEvent( listenerId, processId, invokeId, - replaceReturnEvent, - wrap + immediatelyReturnEvent, + processor ); } finally { - eventPool.returnEvent(replaceReturnEvent); + process.getEventFactory().returnEvent(immediatelyReturnEvent); } if (ret.state == Spy.Ret.RET_STATE_NONE) { @@ -194,52 +196,65 @@ private Spy.Ret handleEvent(final int listenerId, // 立即抛出异常 case THROWS_IMMEDIATELY: { - // 将BEFORE压入的堆栈弹出 + final Throwable throwable = (Throwable) pce.getRespond(); + + // 如果在BeforeEvent处理过程中发生ProcessControl行为,将会造成堆栈错位 + // 所以这里需要将错位的堆栈进行补齐 if (event instanceof BeforeEvent) { - final GaStack stack = wrap.eventProcessRef.get().processStack; - stack.pop(); - wrap.cleanIfLast(); - if (logger.isDebugEnabled()) { - logger.debug("invoke-stack mock pop, IMMEDIATELY-THROWS deep={};listener={};pid={};iid={}", - stack.deep(), - listenerId, - processId, - invokeId - ); - } + process.popInvokeId(); } - final Throwable throwable = (Throwable) pce.getRespond(); + // 如果已经禁止后续返回任何事件了,则不进行后续的操作 + if (pce.isIgnoreProcessEvent()) { + logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-throws-event, isIgnored.", + event.type, + processId, + invokeId, + listenerId + ); + return Spy.Ret.newInstanceForThrows(throwable); + } + + // 如果没有注册监听ImmediatelyEvent事件,则不进行后续的操作 + if (!contains(processor.eventTypes, IMMEDIATELY_THROWS)) { + logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-throws-event, not contains.", + event.type, + processId, + invokeId, + listenerId + ); + return Spy.Ret.newInstanceForThrows(throwable); + } // 如果已经禁止后续返回任何事件了,则不进行后续的操作 if (pce.isIgnoreProcessEvent()) { return Spy.Ret.newInstanceForThrows(throwable); } - if (!(event instanceof BeforeEvent)) { - - final ThrowsEvent replaceThrowsEvent = eventPool.borrowThrowsEvent(processId, invokeId, throwable); - final Spy.Ret ret; - try { - ret = handleEvent( - listenerId, - processId, - invokeId, - replaceThrowsEvent, - wrap - ); - } finally { - eventPool.returnEvent(replaceThrowsEvent); - } - - if (ret.state == Spy.Ret.RET_STATE_NONE) { - return Spy.Ret.newInstanceForThrows(throwable); - } else { - // 如果不是,则返回最新的处理结果 - return ret; - } - } else { + final ImmediatelyThrowsEvent immediatelyThrowsEvent + = process + .getEventFactory() + .makeImmediatelyThrowsEvent(processId, invokeId, throwable); + + + final Spy.Ret ret; + try { + ret = handleEvent( + listenerId, + processId, + invokeId, + immediatelyThrowsEvent, + processor + ); + } finally { + process.getEventFactory().returnEvent(immediatelyThrowsEvent); + } + + if (ret.state == Spy.Ret.RET_STATE_NONE) { return Spy.Ret.newInstanceForThrows(throwable); + } else { + // 如果不是,则返回最新的处理结果 + return ret; } } @@ -247,7 +262,7 @@ private Spy.Ret handleEvent(final int listenerId, // 什么都不操作,立即返回 case NONE_IMMEDIATELY: default: { - return Spy.Ret.newInstanceForNone(); + return newInstanceForNone(); } } @@ -275,73 +290,11 @@ private Spy.Ret handleEvent(final int listenerId, } // 默认返回不进行任何流程变更 - return Spy.Ret.newInstanceForNone(); - } - - private boolean isInterruptEventHandler(final Class listenerClass) { - return listenerClass.isAnnotationPresent(Interrupted.class); - } - - - private final WeakHashMap spyNewInstanceForNoneMethodCache = new WeakHashMap(); - private final WeakHashMap spyNewInstanceForReturnMethodCache = new WeakHashMap(); - private final WeakHashMap spyNewInstanceForThrowsMethodCache = new WeakHashMap(); - - // 转换当前的Spy.Ret到目标类所在ClassLoader的Spy.Ret - private Object toSpyRetInTargetClassLoader(final Spy.Ret ret, final Class spyRetClassInTargetClassLoader) throws Throwable { - - // 如果两个Spy.Ret的类相等,说明他们在同一个ClassLoader空间 - // 可以直接返回当前我们自己构造的Spy.Ret,不需要走如此复杂的反射 - if (Spy.Ret.class == spyRetClassInTargetClassLoader) { - return ret; - } - - // 如果当前Spy.Ret和目标ClassLoader中的Spy.Ret不一致,说明他们来自不同的ClassLoader空间 - // 此时就需要性能比较高昂的转换了,这里稍微加了几个MethodCache做了性能缓冲,尽量减少性能开销 - // 但此时我觉得必要性可能不大,后续考虑可以直接优化掉这个几个MethodCache - switch (ret.state) { - case Spy.Ret.RET_STATE_NONE: { - - final Method method; - if (spyNewInstanceForNoneMethodCache.containsKey(spyRetClassInTargetClassLoader)) { - method = spyNewInstanceForNoneMethodCache.get(spyRetClassInTargetClassLoader); - } else { - method = unCaughtGetClassDeclaredJavaMethod(spyRetClassInTargetClassLoader, "newInstanceForNone"); - spyNewInstanceForNoneMethodCache.put(spyRetClassInTargetClassLoader, method); - } - return method.invoke(null); - } - - case Spy.Ret.RET_STATE_RETURN: { - final Method method; - if (spyNewInstanceForReturnMethodCache.containsKey(spyRetClassInTargetClassLoader)) { - method = spyNewInstanceForReturnMethodCache.get(spyRetClassInTargetClassLoader); - } else { - method = unCaughtGetClassDeclaredJavaMethod(spyRetClassInTargetClassLoader, "newInstanceForReturn", Object.class); - spyNewInstanceForReturnMethodCache.put(spyRetClassInTargetClassLoader, method); - } - return method.invoke(null, ret.respond); - } - - case Spy.Ret.RET_STATE_THROWS: { - final Method method; - if (spyNewInstanceForThrowsMethodCache.containsKey(spyRetClassInTargetClassLoader)) { - method = spyNewInstanceForThrowsMethodCache.get(spyRetClassInTargetClassLoader); - } else { - method = unCaughtGetClassDeclaredJavaMethod(spyRetClassInTargetClassLoader, "newInstanceForThrows", Throwable.class); - spyNewInstanceForThrowsMethodCache.put(spyRetClassInTargetClassLoader, method); - } - return method.invoke(null, (Throwable) ret.respond); - } - - default: { - throw new IllegalStateException("illegal Spy.Ret.state=" + ret.state); - } - } + return newInstanceForNone(); } private Spy.Ret handleOnBefore(final int listenerId, - final ClassLoader javaClassLoader, + final int targetClassLoaderObjectID, final String javaClassName, final String javaMethodName, final String javaMethodDesc, @@ -349,47 +302,32 @@ private Spy.Ret handleOnBefore(final int listenerId, final Object[] argumentArray) throws Throwable { // 获取事件处理器 - final EventListenerWrap wrap = globalEventListenerMap.get(listenerId); + final EventProcessor wrap = mappingOfEventProcessor.get(listenerId); // 如果尚未注册,则直接返回,不做任何处理 if (null == wrap) { logger.debug("listener={} is not activated, ignore processing before-event.", listenerId); - return Spy.Ret.newInstanceForNone(); + return newInstanceForNone(); } // 获取调用跟踪信息 - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - final GaStack stack = eventProcess.processStack; + final EventProcessor.Process process = wrap.processRef.get(); // 调用ID final int invokeId = invokeIdSequencer.next(); + process.pushInvokeId(invokeId); // 调用过程ID - final int processId = stack.isEmpty() - ? invokeId - : stack.peekLast(); - - // 将当前调用压栈 - stack.push(invokeId); - - if (logger.isDebugEnabled()) { - logger.debug("invoke-stack push, deep={};listener={};pid={};iid={}", - stack.deep(), - listenerId, - processId, - invokeId - ); - } + final int processId = process.getProcessId(); // 如果当前处理ID被忽略,则立即返回 - // 放在stack.push后边是为了对齐执行栈 - if (eventProcess.isIgnoreProcessEvent(processId)) { - return Spy.Ret.newInstanceForNone(); - } else { - eventProcess.cleanIgnoreProcessEvent(); + if (process.touchIsIgnoreProcess(processId)) { + process.popInvokeId(); + return newInstanceForNone(); } - final BeforeEvent event = eventPool.borrowBeforeEvent( + final ClassLoader javaClassLoader = ObjectIDs.instance.getObject(targetClassLoaderObjectID); + final BeforeEvent event = process.getEventFactory().makeBeforeEvent( processId, invokeId, javaClassLoader, @@ -402,144 +340,103 @@ private Spy.Ret handleOnBefore(final int listenerId, try { return handleEvent(listenerId, processId, invokeId, event, wrap); } finally { - eventPool.returnEvent(event); + process.getEventFactory().returnEvent(event); } } /* * 判断堆栈是否错位 */ - private boolean isStackErrorPosition(final int processId, - final int invokeId, - final GaStack stack) { - return (processId == invokeId && !stack.isEmpty()) - || (processId != invokeId && stack.isEmpty()); + private boolean checkProcessStack(final int processId, + final int invokeId, + final boolean isEmptyStack) { + return (processId == invokeId && !isEmptyStack) + || (processId != invokeId && isEmptyStack); } private Spy.Ret handleOnEnd(final int listenerId, final Object object, final boolean isReturn) throws Throwable { - final EventListenerWrap wrap = globalEventListenerMap.get(listenerId); + final EventProcessor wrap = mappingOfEventProcessor.get(listenerId); // 如果尚未注册,则直接返回,不做任何处理 if (null == wrap) { logger.debug("listener={} is not activated, ignore processing return-event|throws-event.", listenerId); - return Spy.Ret.newInstanceForNone(); + return newInstanceForNone(); } - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - final GaStack stack = eventProcess.processStack; + final EventProcessor.Process process = wrap.processRef.get(); // 如果当前调用过程信息堆栈是空的,说明 // 1. BEFORE/RETURN错位 // 2. super. // 处理方式是直接返回,不做任何事件的处理和代码流程的改变,放弃对super.的观察,可惜了 - if (stack.isEmpty()) { - return Spy.Ret.newInstanceForNone(); + if (process.isEmptyStack()) { + return newInstanceForNone(); } - final int processId = stack.peekLast(); - final int invokeId = stack.pop(); - wrap.cleanIfLast(); - - if (logger.isDebugEnabled()) { - logger.debug("invoke-stack pop, deep={};listener={};pid={};iid={}", - stack.deep(), - listenerId, - processId, - invokeId - ); - } + final int processId = process.getProcessId(); + final int invokeId = process.popInvokeId(); // 如果PID==IID说明已经到栈顶,此时需要核对堆栈是否为空 // 如果不为空需要输出日志进行告警 - if (isStackErrorPosition(processId, invokeId, stack)) { - logger.warn("stack error position. deep={};listener={};", stack.deep(), listenerId); + if (checkProcessStack(processId, invokeId, process.isEmptyStack())) { + logger.warn("ERROR process-stack. pid={};iid={};listener={};", + processId, + invokeId, + listenerId + ); } // 忽略事件处理 // 放在stack.pop()后边是为了对齐执行栈 - if (eventProcess.isIgnoreProcessEvent(processId)) { - return Spy.Ret.newInstanceForNone(); + if (process.touchIsIgnoreProcess(processId)) { + return newInstanceForNone(); } final Event event = isReturn - ? eventPool.borrowReturnEvent(processId, invokeId, object) - : eventPool.borrowThrowsEvent(processId, invokeId, (Throwable) object); + ? process.getEventFactory().makeReturnEvent(processId, invokeId, object) + : process.getEventFactory().makeThrowsEvent(processId, invokeId, (Throwable) object); try { return handleEvent(listenerId, processId, invokeId, event, wrap); } finally { - eventPool.returnEvent(event); + process.getEventFactory().returnEvent(event); } } - - private Object handleOnBeforeWithTargetClassLoaderSpyRet(final int listenerId, - final ClassLoader javaClassLoader, - final Class spyRetClassInTargetClassLoader, - final String javaClassName, - final String javaMethodName, - final String javaMethodDesc, - final Object target, - final Object[] argumentArray) throws Throwable { - return toSpyRetInTargetClassLoader( - handleOnBefore( - listenerId, - javaClassLoader, - javaClassName, - javaMethodName, - javaMethodDesc, - target, - argumentArray - ), - spyRetClassInTargetClassLoader - ); - } - - private Object handleOnReturnWithTargetClassLoaderSpyRet(final int listenerId, - final Class spyRetClassInTargetClassLoader, - final Object object) throws Throwable { - return toSpyRetInTargetClassLoader(handleOnEnd(listenerId, object, true), spyRetClassInTargetClassLoader); - } - - private Object handleOnThrowsWithTargetClassLoaderSpyRet(final int listenerId, - final Class spyRetClassInTargetClassLoader, - final Throwable throwable) throws Throwable { - return toSpyRetInTargetClassLoader(handleOnEnd(listenerId, throwable, false), spyRetClassInTargetClassLoader); - } - private void handleOnLine(final int listenerId, final int lineNumber) throws Throwable { - final EventListenerWrap wrap = globalEventListenerMap.get(listenerId); + final EventProcessor wrap = mappingOfEventProcessor.get(listenerId); if (null == wrap) { logger.debug("listener={} is not activated, ignore processing line-event.", listenerId); return; } - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - final GaStack stack = eventProcess.processStack; + + final EventProcessor.Process process = wrap.processRef.get(); // 如果当前调用过程信息堆栈是空的,说明BEFORE/LINE错位 // 处理方式是直接返回,不做任何事件的处理和代码流程的改变 - if (stack.isEmpty()) { + if (process.isEmptyStack()) { return; } - final int processId = stack.peekLast(); - final int invokeId = stack.peek(); + + final int processId = process.getProcessId(); + final int invokeId = process.getInvokeId(); // 如果事件处理流被忽略,则直接返回,不产生后续事件 - if (eventProcess.isIgnoreProcessEvent(processId)) { + if (process.touchIsIgnoreProcess(processId)) { return; } - final Event event = eventPool.borrowLineEvent(processId, invokeId, lineNumber); + final Event event = process.getEventFactory().makeLineEvent(processId, invokeId, lineNumber); try { handleEvent(listenerId, processId, invokeId, event, wrap); } finally { - eventPool.returnEvent(event); + process.getEventFactory().returnEvent(event); } } @@ -549,176 +446,103 @@ private void handleOnCallBefore(final int listenerId, final String owner, final String name, final String desc) throws Throwable { - final EventListenerWrap wrap = globalEventListenerMap.get(listenerId); + final EventProcessor wrap = mappingOfEventProcessor.get(listenerId); if (null == wrap) { logger.debug("listener={} is not activated, ignore processing call-before-event.", listenerId); return; } - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - final GaStack stack = eventProcess.processStack; - + final EventProcessor.Process process = wrap.processRef.get(); // 如果当前调用过程信息堆栈是空的,有两种情况 // 1. CALL_BEFORE事件和BEFORE事件错位 // 2. 当前方法是,而CALL_BEFORE事件触发是当前方法在调用父类的 // super.会导致CALL_BEFORE事件优先于BEFORE事件 // 但如果按照现在的架构要兼容这种情况,比较麻烦,所以暂时先放弃了这部分的消息,可惜可惜 - if (stack.isEmpty()) { + if (process.isEmptyStack()) { return; } - final int processId = stack.peekLast(); - final int invokeId = stack.peek(); + final int processId = process.getProcessId(); + final int invokeId = process.getInvokeId(); // 如果事件处理流被忽略,则直接返回,不产生后续事件 - if (eventProcess.isIgnoreProcessEvent(processId)) { + if (process.touchIsIgnoreProcess(processId)) { return; } - final Event event = eventPool.borrowCallBeforeEvent(processId, invokeId, lineNumber, owner, name, desc); + final Event event = process + .getEventFactory() + .makeCallBeforeEvent(processId, invokeId, lineNumber, owner, name, desc); try { handleEvent(listenerId, processId, invokeId, event, wrap); } finally { - eventPool.returnEvent(event); + process.getEventFactory().returnEvent(event); } } private void handleOnCallReturn(final int listenerId) throws Throwable { - final EventListenerWrap wrap = globalEventListenerMap.get(listenerId); + final EventProcessor wrap = mappingOfEventProcessor.get(listenerId); if (null == wrap) { logger.debug("listener={} is not activated, ignore processing call-return-event.", listenerId); return; } - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - final GaStack stack = eventProcess.processStack; - if (stack.isEmpty()) { + final EventProcessor.Process process = wrap.processRef.get(); + if (process.isEmptyStack()) { return; } - final int processId = stack.peekLast(); - final int invokeId = stack.peek(); + final int processId = process.getProcessId(); + final int invokeId = process.getInvokeId(); // 如果事件处理流被忽略,则直接返回,不产生后续事件 - if (eventProcess.isIgnoreProcessEvent(processId)) { + if (process.touchIsIgnoreProcess(processId)) { return; } - final Event event = eventPool.borrowCallReturnEvent(processId, invokeId); + final Event event = process + .getEventFactory() + .makeCallReturnEvent(processId, invokeId); try { handleEvent(listenerId, processId, invokeId, event, wrap); } finally { - eventPool.returnEvent(event); + process.getEventFactory().returnEvent(event); } } private void handleOnCallThrows(final int listenerId, final String throwException) throws Throwable { - final EventListenerWrap wrap = globalEventListenerMap.get(listenerId); + final EventProcessor wrap = mappingOfEventProcessor.get(listenerId); if (null == wrap) { logger.debug("listener={} is not activated, ignore processing call-throws-event.", listenerId); return; } - final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get(); - final GaStack stack = eventProcess.processStack; - if (stack.isEmpty()) { + final EventProcessor.Process process = wrap.processRef.get(); + if (process.isEmptyStack()) { return; } - final int processId = stack.peekLast(); - final int invokeId = stack.peek(); + final int processId = process.getProcessId(); + final int invokeId = process.getInvokeId(); // 如果事件处理流被忽略,则直接返回,不产生后续事件 - if (eventProcess.isIgnoreProcessEvent(processId)) { + if (process.touchIsIgnoreProcess(processId)) { return; } - final Event event = eventPool.borrowCallThrowsEvent(processId, invokeId, throwException); + final Event event = process + .getEventFactory() + .makeCallThrowsEvent(processId, invokeId, throwException); try { handleEvent(listenerId, processId, invokeId, event, wrap); } finally { - eventPool.returnEvent(event); - } - } - - /** - * 事件处理器封装 - */ - private final class EventListenerWrap { - - class EventProcess { - - final GaStack processStack = new ThreadUnsafeGaStack(); - Integer ignoreProcessId = null; - - boolean isIgnoreProcessEvent(int targetProcessId) { - return ignoreProcessId != null - && ignoreProcessId == targetProcessId; - } - - void markIgnoreProcessEvent(int processId) { - this.ignoreProcessId = processId; - } - - void cleanIgnoreProcessEvent() { - this.ignoreProcessId = null; - } - - } - - private final int listenerId; - private final EventListener listener; - private final ThreadLocal eventProcessRef = new ThreadLocal() { - @Override - protected EventProcess initialValue() { - return new EventProcess(); - } - }; - - private EventListenerWrap(final int listenerId, - final EventListener listener, - final Event.Type[] eventTypeArray) { - - this.listenerId = listenerId; - - if (isInterruptEventHandler(listener.getClass())) { - this.listener = new InterruptedEventListenerImpl( - new SeparateImmediatelyEventListener(listener, eventTypeArray, eventPool) - ); - } else { - this.listener = new SeparateImmediatelyEventListener(listener, eventTypeArray, eventPool); - } + process.getEventFactory().returnEvent(event); } - - void cleanIfLast() { - final EventProcess eventProcess = eventProcessRef.get(); - if (eventProcess.processStack.isEmpty()) { - eventProcessRef.remove(); - logger.debug("clean TLS: listener-wrap, listener={};", listenerId); - } - } - - } - - @Interrupted - private class InterruptedEventListenerImpl implements EventListener { - - private final EventListener listener; - - private InterruptedEventListenerImpl(EventListener listener) { - this.listener = listener; - } - - @Override - public void onEvent(Event event) throws Throwable { - listener.onEvent(event); - } - } @@ -730,7 +554,6 @@ public static EventListenerHandlers getSingleton() { return singleton; } - public static Object onBefore(final int listenerId, final int targetClassLoaderObjectID, final Class spyRetClassInTargetClassLoader, @@ -739,10 +562,9 @@ public static Object onBefore(final int listenerId, final String javaMethodDesc, final Object target, final Object[] argumentArray) throws Throwable { - return singleton.handleOnBeforeWithTargetClassLoaderSpyRet( + return singleton.handleOnBefore( listenerId, - (ClassLoader) ObjectIDs.instance.getObject(targetClassLoaderObjectID), - spyRetClassInTargetClassLoader, + targetClassLoaderObjectID, javaClassName, javaMethodName, javaMethodDesc, @@ -754,13 +576,13 @@ public static Object onBefore(final int listenerId, public static Object onReturn(final int listenerId, final Class spyRetClassInTargetClassLoader, final Object object) throws Throwable { - return singleton.handleOnReturnWithTargetClassLoaderSpyRet(listenerId, spyRetClassInTargetClassLoader, object); + return singleton.handleOnEnd(listenerId, object, true); } public static Object onThrows(final int listenerId, final Class spyRetClassInTargetClassLoader, final Throwable throwable) throws Throwable { - return singleton.handleOnThrowsWithTargetClassLoaderSpyRet(listenerId, spyRetClassInTargetClassLoader, throwable); + return singleton.handleOnEnd(listenerId, throwable, false); } public static void onLine(final int listenerId, @@ -773,13 +595,7 @@ public static void onCallBefore(final int listenerId, final String owner, final String name, final String desc) throws Throwable { - singleton.handleOnCallBefore( - listenerId, - lineNumber, - owner, - name, - desc - ); + singleton.handleOnCallBefore(listenerId, lineNumber, owner, name, desc); } public static void onCallReturn(final int listenerId) throws Throwable { @@ -791,5 +607,15 @@ public static void onCallThrows(final int listenerId, singleton.handleOnCallThrows(listenerId, throwException); } + // ---- 自检查 + public void checkEventProcessor(final int... listenerIds) { + for (int listenerId : listenerIds) { + final EventProcessor processor = mappingOfEventProcessor.get(listenerId); + if (null == processor) { + throw new IllegalStateException(String.format("listener=%s not existed.", listenerId)); + } + processor.check(); + } + } } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java new file mode 100644 index 00000000..082723f4 --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java @@ -0,0 +1,200 @@ +package com.alibaba.jvm.sandbox.core.enhance.weaver; + +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.listener.EventListener; +import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted; +import com.alibaba.jvm.sandbox.core.util.collection.GaStack; +import com.alibaba.jvm.sandbox.core.util.collection.ThreadUnsafeGaStack; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.isInterruptEventHandler; + +/** + * 事件处理器 + */ +class EventProcessor { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + /** + * 处理单元 + */ + class Process { + + // 事件工厂 + private final SingleEventFactory eventFactory + = new SingleEventFactory(); + + // 调用堆栈 + private final GaStack stack + = new ThreadUnsafeGaStack(); + + // 需要忽略的过程ID + private Integer ignoreProcessId = null; + + void pushInvokeId(int invokeId) { + stack.push(invokeId); + logger.debug("push process-stack, invoke-id={};deep={};listener={};", + invokeId, + stack.deep(), + listenerId + ); + } + + int popInvokeId() { + final int invokeId = stack.pop(); + logger.debug("pop process-stack, invoke-id={};deep={};listener={};", + invokeId, + stack.deep(), + listenerId + ); + // 这里注释掉,避免频繁删除和创建ThreadLocal的开销 + // 采用frozen的方式来释放 +// if (stack.isEmpty()) { +// processRef.remove(); +// logger.debug("clean TLS: event-processor, listener={};", listenerId); +// } + return invokeId; + } + + int getInvokeId() { + return stack.peek(); + } + + int getProcessId() { + return stack.peekLast(); + } + + boolean isEmptyStack() { + return stack.isEmpty(); + } + + boolean touchIsIgnoreProcess(int processId) { + if (null != ignoreProcessId + && ignoreProcessId == processId) { + return true; + } else { + ignoreProcessId = null; + return false; + } + } + + void markIgnoreProcessId(int processId) { + ignoreProcessId = processId; + } + + SingleEventFactory getEventFactory() { + return eventFactory; + } + + } + + @Interrupted + private class InterruptedEventListenerImpl implements EventListener { + + private final EventListener listener; + + private InterruptedEventListenerImpl(EventListener listener) { + this.listener = listener; + } + + @Override + public void onEvent(Event event) throws Throwable { + listener.onEvent(event); + } + + } + + final int listenerId; + final EventListener listener; + final Event.Type[] eventTypes; + final ThreadLocal processRef = new ThreadLocal() { + @Override + protected Process initialValue() { + return new Process(); + } + }; + + EventProcessor(final int listenerId, + final EventListener listener, + final Event.Type[] eventTypes) { + + this.listenerId = listenerId; + this.eventTypes = eventTypes; + this.listener = isInterruptEventHandler(listener.getClass()) + ? new InterruptedEventListenerImpl(listener) + : listener; + } + + void clean() { + processRef.remove(); + logger.debug("clean TLS: event-processor, listener={};", listenerId); + } + + + /** + * 校验器,用于校验事件处理器状态是否正确 + *

用于测试用例

+ */ + class Checker { + + void check() { + + final EventProcessor.Process process = processRef.get(); + final ThreadUnsafeGaStack stack = (ThreadUnsafeGaStack) process.stack; + + if (!process.isEmptyStack()) { + throw new IllegalStateException(String.format("process-stack is not empty! listener=%s;\n%s", + listenerId, + toString(stack) + )); + } + + for (int index = 0; index < stack.getElementArray().length; index++) { + if (index <= stack.getCurrent()) { + if (null == stack.getElementArray()[index]) { + throw new IllegalStateException(String.format("process-stack element is null at index=[%d], listener=%s;\n%s", + index, + listenerId, + toString(stack) + )); + } + } else { + if (null != stack.getElementArray()[index]) { + throw new IllegalStateException(String.format("process-stack element is not null at index=[%d], listener=%s;\n%s", + index, + listenerId, + toString(stack) + )); + } + } + } + + if (null != process.ignoreProcessId) { + throw new IllegalStateException(String.format("process ignoreProcessId is not null!, processId=%d", process.ignoreProcessId)); + } + + + } + + String toString(ThreadUnsafeGaStack stack) { + final StringBuilder stackSB = new StringBuilder(String.format("stack[deep=%d;current=%d;]{\n", stack.deep(), stack.getCurrent())); + for (int index = 0; index < stack.getElementArray().length; index++) { + stackSB.append("\t[" + index + "] = " + stack.getElementArray()[index] + "\n"); + } + stackSB.append("}"); + return stackSB.toString(); + } + + } + + /** + * 校验事件处理器 + *

用于测试用例

+ */ + void check() { + new Checker().check(); + } + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java deleted file mode 100755 index f294be5b..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.alibaba.jvm.sandbox.core.enhance.weaver; - -import com.alibaba.jvm.sandbox.api.ProcessControlException; -import com.alibaba.jvm.sandbox.api.event.*; -import com.alibaba.jvm.sandbox.api.listener.EventListener; -import com.alibaba.jvm.sandbox.core.util.EventPool; -import org.apache.commons.lang3.ArrayUtils; - -import static com.alibaba.jvm.sandbox.core.enhance.weaver.SeparateImmediatelyEventListener.Step.*; - -/** - * 用于分离"立即返回"/"返回"和"立即异常抛出事件"/"异常抛出事件" - * Created by luanjia@taobao.com on 2017/2/26. - */ -public class SeparateImmediatelyEventListener implements EventListener { - - enum Step { - STEP_IMMEDIATELY_RETURN_EVENT, - STEP_IMMEDIATELY_THROWS_EVENT, - STEP_ORIGINAL_EVENT - } - - private final ThreadLocal stepRef = new ThreadLocal() { - @Override - protected Step initialValue() { - return STEP_ORIGINAL_EVENT; - } - }; - - - private final EventListener listener; - private final EventPool eventPool; - private final Event.Type[] eventTypeArray; - - public SeparateImmediatelyEventListener(final EventListener listener, - final Event.Type[] eventTypeArray, - final EventPool eventPool) { - this.listener = listener; - this.eventPool = eventPool; - this.eventTypeArray = eventTypeArray; - } - - @Override - public void onEvent(final Event event) throws Throwable { - - // 只有BEFORE/RETURN/THROWS事件才需要进行分离 - if (!(event instanceof BeforeEvent) - && !(event instanceof ReturnEvent) - && !(event instanceof ThrowsEvent)) { - if(!ArrayUtils.contains(eventTypeArray, event.type)) { - return; - } - listener.onEvent(event); - return; - } - - // 分离Immediately事件 - final Event replaceEvent; - final Step step = stepRef.get(); - switch (step) { - case STEP_IMMEDIATELY_RETURN_EVENT: { - final ReturnEvent returnEvent = (ReturnEvent) event; - replaceEvent = eventPool.borrowImmediatelyReturnEvent(returnEvent.processId, returnEvent.invokeId, returnEvent.object); - break; - } - case STEP_IMMEDIATELY_THROWS_EVENT: { - final ThrowsEvent throwsEvent = (ThrowsEvent) event; - replaceEvent = eventPool.borrowImmediatelyThrowsEvent(throwsEvent.processId, throwsEvent.invokeId, throwsEvent.throwable); - break; - } - case STEP_ORIGINAL_EVENT: - default: { - replaceEvent = event; - break; - } - } - - // 驱动分离后的事件 - try { - stepRef.set(STEP_ORIGINAL_EVENT); - - // 如果当前事件(分离之后)不在事件监听范围,则直接忽略什么都不用处理 - if (!ArrayUtils.contains(eventTypeArray, replaceEvent.type)) { - return; - } - - // 处理事件 - listener.onEvent(replaceEvent); - - } catch (ProcessControlException pce) { - - switch (pce.getState()) { - case RETURN_IMMEDIATELY: { - stepRef.set(STEP_IMMEDIATELY_RETURN_EVENT); - break; - } - case THROWS_IMMEDIATELY: { - stepRef.set(STEP_IMMEDIATELY_THROWS_EVENT); - break; - } - case NONE_IMMEDIATELY: - default: { - stepRef.set(STEP_ORIGINAL_EVENT); - break; - } - } - - throw pce; - - } finally { - - // 发生了事件分离才需要归还 - if (replaceEvent != event - && (replaceEvent instanceof ImmediatelyReturnEvent || replaceEvent instanceof ImmediatelyThrowsEvent)) { - eventPool.returnEvent(replaceEvent); - } - - } - - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java new file mode 100644 index 00000000..a1dd3aff --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java @@ -0,0 +1,200 @@ +package com.alibaba.jvm.sandbox.core.enhance.weaver; + +import com.alibaba.jvm.sandbox.api.event.*; +import com.alibaba.jvm.sandbox.core.util.UnsafeUtils; +import sun.misc.Unsafe; + +/** + * 单例事件工厂 + */ +class SingleEventFactory { + + private static final int ILLEGAL_PROCESS_ID = -1; + private static final int ILLEGAL_INVOKE_ID = -1; + + private static final Unsafe unsafe; + private static final long processIdFieldInInvokeEventOffset; + private static final long invokeIdFieldInInvokeEventOffset; + private static final long javaClassLoaderFieldInBeforeEventOffset; + private static final long javaClassNameFieldInBeforeEventOffset; + private static final long javaMethodNameFieldInBeforeEventOffset; + private static final long javaMethodDescFieldInBeforeEventOffset; + private static final long targetFieldInBeforeEventOffset; + private static final long argumentArrayFieldInBeforeEventOffset; + private static final long objectFieldInReturnEventOffset; + private static final long throwableFieldInThrowsEventOffset; + private static final long lineNumberFieldInLineEventOffset; + + private static final long lineNumberFieldInCallBeforeEventOffset; + private static final long ownerFieldInCallBeforeEventOffset; + private static final long nameFieldInCallBeforeEventOffset; + private static final long descFieldInCallBeforeEventOffset; + private static final long throwExceptionFieldInCallThrowsEventOffset; + + static { + try { + unsafe = UnsafeUtils.getUnsafe(); + processIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("processId")); + invokeIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("invokeId")); + javaClassLoaderFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassLoader")); + javaClassNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassName")); + javaMethodNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodName")); + javaMethodDescFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodDesc")); + targetFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("target")); + argumentArrayFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("argumentArray")); + objectFieldInReturnEventOffset = unsafe.objectFieldOffset(ReturnEvent.class.getDeclaredField("object")); + throwableFieldInThrowsEventOffset = unsafe.objectFieldOffset(ThrowsEvent.class.getDeclaredField("throwable")); + lineNumberFieldInLineEventOffset = unsafe.objectFieldOffset(LineEvent.class.getDeclaredField("lineNumber")); + + lineNumberFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("lineNumber")); + ownerFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("owner")); + nameFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("name")); + descFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("desc")); + throwExceptionFieldInCallThrowsEventOffset = unsafe.objectFieldOffset(CallThrowsEvent.class.getDeclaredField("throwException")); + } catch (Exception e) { + throw new Error(e); + } + } + + private final BeforeEvent beforeEvent + = new BeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null, null, null, null, null, null); + + private final ReturnEvent returnEvent + = new ReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + + private final ThrowsEvent throwsEvent + = new ThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + + private final LineEvent lineEvent + = new LineEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1); + + private final ImmediatelyThrowsEvent immediatelyThrowsEvent + = new ImmediatelyThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + + private final ImmediatelyReturnEvent immediatelyReturnEvent + = new ImmediatelyReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + + private final CallBeforeEvent callBeforeEvent + = new CallBeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1, null, null, null); + + private final CallReturnEvent callReturnEvent + = new CallReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID); + + private final CallThrowsEvent callThrowsEvent + = new CallThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + + + public BeforeEvent makeBeforeEvent(final int processId, + final int invokeId, + final ClassLoader javaClassLoader, + final String javaClassName, + final String javaMethodName, + final String javaMethodDesc, + final Object target, + final Object[] argumentArray) { + unsafe.putInt(beforeEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(beforeEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putObject(beforeEvent, javaClassLoaderFieldInBeforeEventOffset, javaClassLoader); + unsafe.putObject(beforeEvent, javaClassNameFieldInBeforeEventOffset, javaClassName); + unsafe.putObject(beforeEvent, javaMethodNameFieldInBeforeEventOffset, javaMethodName); + unsafe.putObject(beforeEvent, javaMethodDescFieldInBeforeEventOffset, javaMethodDesc); + unsafe.putObject(beforeEvent, targetFieldInBeforeEventOffset, target); + unsafe.putObject(beforeEvent, argumentArrayFieldInBeforeEventOffset, argumentArray); + return beforeEvent; + } + + public ReturnEvent makeReturnEvent(final int processId, + final int invokeId, + final Object returnObj) { + unsafe.putInt(returnEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(returnEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putObject(returnEvent, objectFieldInReturnEventOffset, returnObj); + return returnEvent; + } + + public ImmediatelyReturnEvent makeImmediatelyReturnEvent(final int processId, + final int invokeId, + final Object returnObj) { + unsafe.putInt(immediatelyReturnEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(immediatelyReturnEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putObject(immediatelyReturnEvent, objectFieldInReturnEventOffset, returnObj); + return immediatelyReturnEvent; + } + + public ThrowsEvent makeThrowsEvent(final int processId, + final int invokeId, + final Throwable throwable) { + unsafe.putInt(throwsEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(throwsEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putObject(throwsEvent, throwableFieldInThrowsEventOffset, throwable); + return throwsEvent; + } + + public ImmediatelyThrowsEvent makeImmediatelyThrowsEvent(final int processId, + final int invokeId, + final Throwable throwable) { + unsafe.putInt(immediatelyThrowsEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(immediatelyThrowsEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putObject(immediatelyThrowsEvent, throwableFieldInThrowsEventOffset, throwable); + return immediatelyThrowsEvent; + } + + + + public LineEvent makeLineEvent(final int processId, + final int invokeId, + final int lineNumber) { + unsafe.putInt(lineEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(lineEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putInt(lineEvent, lineNumberFieldInLineEventOffset, lineNumber); + return lineEvent; + } + + public CallBeforeEvent makeCallBeforeEvent(final int processId, + final int invokeId, + final int lineNumber, + final String owner, + final String name, + final String desc) { + unsafe.putInt(callBeforeEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(callBeforeEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putInt(callBeforeEvent, lineNumberFieldInCallBeforeEventOffset, lineNumber); + unsafe.putObject(callBeforeEvent, ownerFieldInCallBeforeEventOffset, owner); + unsafe.putObject(callBeforeEvent, nameFieldInCallBeforeEventOffset, name); + unsafe.putObject(callBeforeEvent, descFieldInCallBeforeEventOffset, desc); + return callBeforeEvent; + } + + public CallReturnEvent makeCallReturnEvent(final int processId, + final int invokeId) { + unsafe.putInt(callReturnEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(callReturnEvent, invokeIdFieldInInvokeEventOffset, invokeId); + return callReturnEvent; + } + + public CallThrowsEvent makeCallThrowsEvent(final int processId, + final int invokeId, + final String throwException) { + unsafe.putInt(callThrowsEvent, processIdFieldInInvokeEventOffset, processId); + unsafe.putInt(callThrowsEvent, invokeIdFieldInInvokeEventOffset, invokeId); + unsafe.putObject(callThrowsEvent, throwExceptionFieldInCallThrowsEventOffset, throwException); + return callThrowsEvent; + } + + public void returnEvent(Event event) { + switch (event.type) { + case BEFORE: + unsafe.putObject(event, targetFieldInBeforeEventOffset, null); + unsafe.putObject(event, argumentArrayFieldInBeforeEventOffset, null); + break; + case IMMEDIATELY_THROWS: + case THROWS: + unsafe.putObject(event, throwableFieldInThrowsEventOffset, null); + break; + case IMMEDIATELY_RETURN: + case RETURN: + unsafe.putObject(event, objectFieldInReturnEventOffset, null); + } + } + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java index e3f11522..7cc0372f 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java @@ -194,9 +194,6 @@ private void loadClassLoader() { @Override protected void onMethodEnter() { - isMethodEnter = true; - mark(beginLabel); - codeLockForTracing.lock(new CodeLock.Block() { @Override public void code() { @@ -214,6 +211,8 @@ public void code() { storeArgArray(); pop(); processControl(); + isMethodEnter = true; + mark(beginLabel); } }); } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java index 928ccf33..730870ee 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java @@ -69,45 +69,45 @@ public String[] getUserModuleLibPaths() { @Override public boolean isEnableEventPool() { - return cfg.isEventPoolEnable(); + return false; } @Deprecated @Override public int getEventPoolKeyMin() { - return getEventPoolMaxIdlePerEvent(); + return 0; } @Deprecated @Override public int getEventPoolKeyMax() { - return getEventPoolMaxTotal(); + return 0; } @Deprecated @Override public int getEventPoolTotal() { - return getEventPoolMaxTotal(); + return 0; } @Override public int getEventPoolMaxTotal() { - return cfg.getEventPoolMaxTotal(); + return 0; } @Override public int getEventPoolMinIdlePerEvent() { - return cfg.getEventPoolMinIdlePerEvent(); + return 0; } @Override public int getEventPoolMaxIdlePerEvent() { - return cfg.getEventPoolMaxIdlePerEvent(); + return 0; } @Override public int getEventPoolMaxTotalPerEvent() { - return cfg.getEventPoolMaxTotalPerEvent(); + return 0; } @Override diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java index 7fd8dfeb..4c92a2a5 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java @@ -77,12 +77,12 @@ public DefaultCoreModuleManager(final CoreConfigure cfg, cfg.getUserModuleLibFilesWithCache() ); - // 初始化加载所有的模块 - try { - reset(); - } catch (Throwable cause) { - logger.warn("reset occur error when initializing.", cause); - } +// // 初始化加载所有的模块 +// try { +// reset(); +// } catch (Throwable cause) { +// logger.warn("reset occur error when initializing.", cause); +// } } private File[] mergeFileArray(File[] aFileArray, File[] bFileArray) { diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java index cf938031..da411a7a 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java @@ -2,8 +2,6 @@ import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.api.resource.EventMonitor; -import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; -import com.alibaba.jvm.sandbox.core.util.EventPool; /** * 事件监控器实现 @@ -12,28 +10,25 @@ class DefaultEventMonitor implements EventMonitor { @Override public EventPoolInfo getEventPoolInfo() { - - final EventPool pool = EventListenerHandlers.getSingleton().getEventPool(); - return new EventPoolInfo() { @Override public int getNumActive() { - return pool.getNumActive(); + return 0; } @Override public int getNumActive(Event.Type type) { - return pool.getNumActive(type); + return 0; } @Override public int getNumIdle() { - return pool.getNumIdle(); + return 0; } @Override public int getNumIdle(Event.Type type) { - return pool.getNumIdle(type); + return 0; } }; } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java index e30e1c32..1fe8c6ac 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java @@ -93,10 +93,6 @@ public void process() throws Throwable { logger.info("{} is destroying", this); httpServer.destroy(); - // 关闭对象池 - logger.info("{} is closing event-pool", this); - EventListenerHandlers.getSingleton().getEventPool().close(); - } catch (Throwable cause) { logger.warn("{} unBind failed.", this, cause); throw new IOException("unBind failed.", cause); @@ -259,6 +255,14 @@ public void process() throws Throwable { httpServer.start(); } }); + + // 初始化加载所有的模块 + try { + coreModuleManager.reset(); + } catch (Throwable cause) { + logger.warn("reset occur error when initializing.", cause); + } + final InetSocketAddress local = getLocal(); logger.info("initialized server. actual bind to {}:{}", local.getHostName(), local.getPort()); } catch (Throwable cause) { diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java index 1cf8ef57..d6b6b6d6 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java @@ -1,5 +1,6 @@ package com.alibaba.jvm.sandbox.core.server.jetty.servlet; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.http.Http; import com.alibaba.jvm.sandbox.core.domain.CoreModule; import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; @@ -19,6 +20,10 @@ import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.matching; @@ -51,7 +56,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S private void doMethod(final HttpServletRequest req, final HttpServletResponse resp, - final Http.Method httpMethod) throws ServletException, IOException { + final Http.Method expectHttpMethod) throws ServletException, IOException { // 获取请求路径 final String path = req.getPathInfo(); @@ -75,7 +80,7 @@ private void doMethod(final HttpServletRequest req, // 匹配对应的方法 final Method method = matchingModuleMethod( path, - httpMethod, + expectHttpMethod, uniqueId, coreModule.getModule().getClass() ); @@ -173,12 +178,25 @@ private Method matchingModuleMethod(final String path, final String uniqueId, final Class classOfModule) { + // 查找@Command注解的方法 + for (final Method method : MethodUtils.getMethodsListWithAnnotation(classOfModule, Command.class)) { + final Command commandAnnotation = method.getAnnotation(Command.class); + if (null == commandAnnotation) { + continue; + } + final String pathOfCmd = "/" + uniqueId + "/" + commandAnnotation.value(); + if (StringUtils.equals(path, pathOfCmd)) { + return method; + } + } + + // 查找@Http注解的方法 for (final Method method : MethodUtils.getMethodsListWithAnnotation(classOfModule, Http.class)) { final Http httpAnnotation = method.getAnnotation(Http.class); - if(null == httpAnnotation) { + if (null == httpAnnotation) { continue; } - final String pathPattern = "/"+uniqueId+httpAnnotation.value(); + final String pathPattern = "/" + uniqueId + httpAnnotation.value(); if (ArrayUtils.contains(httpAnnotation.method(), httpMethod) && matching(path, pathPattern)) { return method; @@ -189,6 +207,20 @@ && matching(path, pathPattern)) { return null; } + private boolean isMapWithGenericParameterTypes(final Method method, + final int parameterIndex, + final Class keyClass, + final Class valueClass) { + final Type[] genericParameterTypes = method.getGenericParameterTypes(); + if (genericParameterTypes.length < parameterIndex + || !(genericParameterTypes[parameterIndex] instanceof ParameterizedType)) { + return false; + } + final Type[] actualTypeArguments = ((ParameterizedType) genericParameterTypes[parameterIndex]).getActualTypeArguments(); + return actualTypeArguments.length == 2 + && keyClass.equals(actualTypeArguments[0]) + && valueClass.equals(actualTypeArguments[1]); + } /** * 生成方法请求参数数组 @@ -201,7 +233,7 @@ && matching(path, pathPattern)) { */ private Object[] generateParameterObjectArray(final Method method, final HttpServletRequest req, - final HttpServletResponse resp) { + final HttpServletResponse resp) throws IOException { final Class[] parameterTypeArray = method.getParameterTypes(); if (ArrayUtils.isEmpty(parameterTypeArray)) { @@ -223,6 +255,34 @@ private Object[] generateParameterObjectArray(final Method method, continue; } + // ParameterMap + if (Map.class.isAssignableFrom(parameterType) + && isMapWithGenericParameterTypes(method, index, String.class, String[].class)) { + parameterObjectArray[index] = req.getParameterMap(); + } + + // ParameterMap + else if (Map.class.isAssignableFrom(parameterType) + && isMapWithGenericParameterTypes(method, index, String.class, String.class)) { + final Map param = new HashMap(); + for (final Map.Entry entry : req.getParameterMap().entrySet()) { + param.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + } + parameterObjectArray[index] = param; + } + + // QueryString + else if (String.class.isAssignableFrom(parameterType)) { + parameterObjectArray[index] = req.getQueryString(); + } + + + // PrintWriter + else if (PrintWriter.class.isAssignableFrom(parameterType)) { + parameterObjectArray[index] = resp.getWriter(); + } + + } return parameterObjectArray; diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java index 2b2c3e68..fb931a45 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java @@ -19,8 +19,11 @@ /** * 构建WebSocket通讯 - * Created by luanjia@taobao.com on 2017/2/2. + * + * @author luanjia@taobao.com + * @deprecated 考虑废弃掉WebSocket的支持,不再维护 */ +@Deprecated public class WebSocketAcceptorServlet extends WebSocketServlet { private final Logger logger = LoggerFactory.getLogger(getClass()); diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java deleted file mode 100755 index 9fc39551..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java +++ /dev/null @@ -1,446 +0,0 @@ -package com.alibaba.jvm.sandbox.core.util; - -import com.alibaba.jvm.sandbox.api.event.*; -import com.alibaba.jvm.sandbox.core.CoreConfigure; -import org.apache.commons.pool2.BaseKeyedPooledObjectFactory; -import org.apache.commons.pool2.KeyedObjectPool; -import org.apache.commons.pool2.PooledObject; -import org.apache.commons.pool2.impl.DefaultPooledObject; -import org.apache.commons.pool2.impl.GenericKeyedObjectPool; -import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sun.misc.Unsafe; - -/** - * 事件对象池 - * - * @author luanjia@taobao.com - */ -public class EventPool { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - private final KeyedObjectPool pool; - private final boolean isEnable; - - public EventPool() { - this.pool = createEventPool(); - this.isEnable = this.pool != null; - } - - /** - * 关闭并清理对象池 - *

- * 修复问题:#108 - *

- */ - public void close() { - if (null != pool) { - pool.close(); - } - } - - private KeyedObjectPool createEventPool() { - final CoreConfigure cfg = CoreConfigure.getInstance(); - if (cfg.isEventPoolEnable()) { - final GenericKeyedObjectPoolConfig poolConfig = new GenericKeyedObjectPoolConfig(); - poolConfig.setMaxTotalPerKey(cfg.getEventPoolMaxTotalPerEvent()); - poolConfig.setMinIdlePerKey(cfg.getEventPoolMinIdlePerEvent()); - poolConfig.setMaxIdlePerKey(cfg.getEventPoolMaxIdlePerEvent()); - poolConfig.setMaxTotal(cfg.getEventPoolMaxTotal()); - logger.info("enable event-pool[per-key-idle-min={};per-key-idle-max={};per-key-max={};total={};]", - cfg.getEventPoolMinIdlePerEvent(), - cfg.getEventPoolMaxIdlePerEvent(), - cfg.getEventPoolMaxTotalPerEvent(), - cfg.getEventPoolMaxTotal() - ); - return new GenericKeyedObjectPool(new EventFactory(), poolConfig); - } else { - logger.info("disable event-pool."); - return null; - } - } - - public int getNumActive() { - return isEnable - ? pool.getNumActive() - : -1; - } - - public int getNumActive(Event.Type type) { - return isEnable - ? pool.getNumActive(type) - : -1; - } - - public int getNumIdle() { - return isEnable - ? pool.getNumIdle() - : -1; - } - - public int getNumIdle(Event.Type type) { - return isEnable - ? pool.getNumIdle(type) - : -1; - } - - public BeforeEvent borrowBeforeEvent(final int processId, - final int invokeId, - final ClassLoader javaClassLoader, - final String javaClassName, - final String javaMethodName, - final String javaMethodDesc, - final Object target, - final Object[] argumentArray) { - if (isEnable) { - try { - final BeforeEvent event = (BeforeEvent) pool.borrowObject(Event.Type.BEFORE); - initBeforeEvent( - event, - processId, invokeId, - javaClassLoader, javaClassName, javaMethodName, javaMethodDesc, - target, argumentArray - ); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow BeforeEvent[processId={};invokeId={};class={};method={};] failed.", - processId, invokeId, javaClassName, javaMethodName, cause); - } - } - return new BeforeEvent( - processId, invokeId, - javaClassLoader, javaClassName, javaMethodName, javaMethodDesc, - target, argumentArray - ); - } - - public ReturnEvent borrowReturnEvent(final int processId, - final int invokeId, - final Object object) { - if (isEnable) { - try { - final ReturnEvent event = (ReturnEvent) pool.borrowObject(Event.Type.RETURN); - initReturnEvent(event, processId, invokeId, object); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow ReturnEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new ReturnEvent(processId, invokeId, object); - } - - public ThrowsEvent borrowThrowsEvent(final int processId, - final int invokeId, - final Throwable throwable) { - if (isEnable) { - try { - final ThrowsEvent event = (ThrowsEvent) pool.borrowObject(Event.Type.THROWS); - initThrowsEvent(event, processId, invokeId, throwable); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow ThrowsEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new ThrowsEvent(processId, invokeId, throwable); - } - - public LineEvent borrowLineEvent(final int processId, - final int invokeId, - final int lineNumber) { - if (isEnable) { - try { - final LineEvent event = (LineEvent) pool.borrowObject(Event.Type.LINE); - initLineEvent(event, processId, invokeId, lineNumber); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow LineEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new LineEvent(processId, invokeId, lineNumber); - } - - public ImmediatelyReturnEvent borrowImmediatelyReturnEvent(final int processId, - final int invokeId, - final Object object) { - if (isEnable) { - try { - final ImmediatelyReturnEvent event = (ImmediatelyReturnEvent) pool.borrowObject(Event.Type.IMMEDIATELY_RETURN); - initReturnEvent(event, processId, invokeId, object); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow ImmediatelyReturnEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new ImmediatelyReturnEvent(processId, invokeId, object); - } - - public ImmediatelyThrowsEvent borrowImmediatelyThrowsEvent(final int processId, - final int invokeId, - final Throwable throwable) { - if (isEnable) { - try { - final ImmediatelyThrowsEvent event = (ImmediatelyThrowsEvent) pool.borrowObject(Event.Type.IMMEDIATELY_THROWS); - initThrowsEvent(event, processId, invokeId, throwable); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow ImmediatelyThrowsEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new ImmediatelyThrowsEvent(processId, invokeId, throwable); - } - - public CallBeforeEvent borrowCallBeforeEvent(final int processId, - final int invokeId, - final int lineNumber, - final String owner, - final String name, - final String desc) { - if (isEnable) { - try { - final CallBeforeEvent event = (CallBeforeEvent) pool.borrowObject(Event.Type.CALL_BEFORE); - initCallBeforeEvent(event, processId, invokeId, lineNumber, owner, name, desc); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow CallBeforeEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new CallBeforeEvent(processId, invokeId, lineNumber, owner, name, desc); - } - - public CallReturnEvent borrowCallReturnEvent(final int processId, - final int invokeId) { - if (isEnable) { - try { - final CallReturnEvent event = (CallReturnEvent) pool.borrowObject(Event.Type.CALL_RETURN); - initCallReturnEvent(event, processId, invokeId); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow CallReturnEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new CallReturnEvent(processId, invokeId); - } - - public CallThrowsEvent borrowCallThrowsEvent(final int processId, - final int invokeId, - final String throwException) { - if (isEnable) { - try { - final CallThrowsEvent event = (CallThrowsEvent) pool.borrowObject(Event.Type.CALL_THROWS); - initCallThrowsEvent(event, processId, invokeId, throwException); - return event; - } catch (Exception cause) { - logger.warn("EventPool borrow CallThrowsEvent[processId={};invokeId={};] failed.", - processId, invokeId, cause); - } - } - return new CallThrowsEvent(processId, invokeId, throwException); - } - - - /** - * 归还事件对象 - * - * @param event 事件对象 - */ - public void returnEvent(Event event) { - if (isEnable) { - try { - pool.returnObject(event.type, event); - } catch (Exception cause) { - logger.warn("EventPool return event={} failed.", event, cause); - } - } - } - - - private static final int ILLEGAL_PROCESS_ID = -1; - private static final int ILLEGAL_INVOKE_ID = -1; - - private static final Unsafe unsafe; - private static final long processIdFieldInInvokeEventOffset; - private static final long invokeIdFieldInInvokeEventOffset; - private static final long javaClassLoaderFieldInBeforeEventOffset; - private static final long javaClassNameFieldInBeforeEventOffset; - private static final long javaMethodNameFieldInBeforeEventOffset; - private static final long javaMethodDescFieldInBeforeEventOffset; - private static final long targetFieldInBeforeEventOffset; - private static final long argumentArrayFieldInBeforeEventOffset; - private static final long objectFieldInReturnEventOffset; - private static final long throwableFieldInThrowsEventOffset; - private static final long lineNumberFieldInLineEventOffset; - - private static final long lineNumberFieldInCallBeforeEventOffset; - private static final long ownerFieldInCallBeforeEventOffset; - private static final long nameFieldInCallBeforeEventOffset; - private static final long descFieldInCallBeforeEventOffset; - private static final long throwExceptionFieldInCallThrowsEventOffset; - - static { - try { - unsafe = UnsafeUtils.getUnsafe(); - processIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("processId")); - invokeIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("invokeId")); - javaClassLoaderFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassLoader")); - javaClassNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassName")); - javaMethodNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodName")); - javaMethodDescFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodDesc")); - targetFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("target")); - argumentArrayFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("argumentArray")); - objectFieldInReturnEventOffset = unsafe.objectFieldOffset(ReturnEvent.class.getDeclaredField("object")); - throwableFieldInThrowsEventOffset = unsafe.objectFieldOffset(ThrowsEvent.class.getDeclaredField("throwable")); - lineNumberFieldInLineEventOffset = unsafe.objectFieldOffset(LineEvent.class.getDeclaredField("lineNumber")); - - lineNumberFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("lineNumber")); - ownerFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("owner")); - nameFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("name")); - descFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("desc")); - throwExceptionFieldInCallThrowsEventOffset = unsafe.objectFieldOffset(CallThrowsEvent.class.getDeclaredField("throwException")); - } catch (Exception e) { - throw new Error(e); - } - } - - - private static void initBeforeEvent(final BeforeEvent event, - final int processId, - final int invokeId, - final ClassLoader javaClassLoader, - final String javaClassName, - final String javaMethodName, - final String javaMethodDesc, - final Object target, - final Object[] argumentArray) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - unsafe.putObject(event, javaClassLoaderFieldInBeforeEventOffset, javaClassLoader); - unsafe.putObject(event, javaClassNameFieldInBeforeEventOffset, javaClassName); - unsafe.putObject(event, javaMethodNameFieldInBeforeEventOffset, javaMethodName); - unsafe.putObject(event, javaMethodDescFieldInBeforeEventOffset, javaMethodDesc); - unsafe.putObject(event, targetFieldInBeforeEventOffset, target); - unsafe.putObject(event, argumentArrayFieldInBeforeEventOffset, argumentArray); - } - - private static void initReturnEvent(final ReturnEvent event, - final int processId, - final int invokeId, - final Object returnObj) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - unsafe.putObject(event, objectFieldInReturnEventOffset, returnObj); - } - - private static void initThrowsEvent(final ThrowsEvent event, - final int processId, - final int invokeId, - final Throwable throwable) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - unsafe.putObject(event, throwableFieldInThrowsEventOffset, throwable); - } - - private static void initLineEvent(final LineEvent event, - final int processId, - final int invokeId, - final int lineNumber) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - unsafe.putInt(event, lineNumberFieldInLineEventOffset, lineNumber); - } - - private static void initCallBeforeEvent(final CallBeforeEvent event, - final int processId, - final int invokeId, - final int lineNumber, - final String owner, - final String name, - final String desc) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - unsafe.putInt(event, lineNumberFieldInCallBeforeEventOffset, lineNumber); - unsafe.putObject(event, ownerFieldInCallBeforeEventOffset, owner); - unsafe.putObject(event, nameFieldInCallBeforeEventOffset, name); - unsafe.putObject(event, descFieldInCallBeforeEventOffset, desc); - } - - private static void initCallReturnEvent(final CallReturnEvent event, - final int processId, - final int invokeId) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - } - - private static void initCallThrowsEvent(final CallThrowsEvent event, - final int processId, - final int invokeId, - final String throwException) { - unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId); - unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId); - unsafe.putObject(event, throwExceptionFieldInCallThrowsEventOffset, throwException); - } - - private static class EventFactory extends BaseKeyedPooledObjectFactory { - - @Override - public Event create(Event.Type type) throws Exception { - switch (type) { - case BEFORE: - return new BeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null, null, null, null, null, null); - case THROWS: - return new ThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - case RETURN: - return new ReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - case LINE: - return new LineEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1); - case IMMEDIATELY_RETURN: - return new ImmediatelyReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - case IMMEDIATELY_THROWS: - return new ImmediatelyThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - case CALL_BEFORE: - return new CallBeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1, null, null, null); - case CALL_RETURN: - return new CallReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID); - case CALL_THROWS: - return new CallThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - } - throw new IllegalStateException("illegal type=" + type); - } - - @Override - public PooledObject wrap(Event event) { - return new DefaultPooledObject(event); - } - - /* - * 这里主要是释放掉引用的大资源,比如入参、返回值、抛异常等 - * 一些不大的资源其实可以保持引用,不会轻易触发GC - */ - @Override - public void passivateObject(Event.Type key, PooledObject pooledObject) throws Exception { - final Event event = pooledObject.getObject(); - switch (event.type) { - case BEFORE: - unsafe.putObject(event, targetFieldInBeforeEventOffset, null); - unsafe.putObject(event, argumentArrayFieldInBeforeEventOffset, null); - break; - case IMMEDIATELY_THROWS: - case THROWS: - unsafe.putObject(event, throwableFieldInThrowsEventOffset, null); - break; - case IMMEDIATELY_RETURN: - case RETURN: - unsafe.putObject(event, objectFieldInReturnEventOffset, null); - } - } - - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java index d1617804..b96d5919 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java @@ -1,12 +1,16 @@ package com.alibaba.jvm.sandbox.core.util; +import com.alibaba.jvm.sandbox.api.listener.EventListener; +import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted; + import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 反射工具类 - * Created by luanjia@taobao.com on 16/5/21. + * + * @author luanjia@taobao.com */ public class SandboxReflectUtils { @@ -118,4 +122,14 @@ public static Class defineClass(final ClassLoader loader, } + /** + * 判断是否是中断式事件处理器 + * + * @param listenerClass 事件监听器类型 + * @return TRUE:中断式;FALSE:非中断式 + */ + public static boolean isInterruptEventHandler(final Class listenerClass) { + return listenerClass.isAnnotationPresent(Interrupted.class); + } + } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java index 9fc5fa78..31029813 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java @@ -54,7 +54,10 @@ private void checkForPopOrPeek() { public E pop() { checkForPopOrPeek(); //noinspection unchecked - return (E) elementArray[current--]; + final E e = (E) elementArray[current]; + elementArray[current] = null; + current--; + return e; } @Override @@ -91,4 +94,11 @@ public int deep() { return current + 1; } + public Object[] getElementArray() { + return elementArray; + } + + public int getCurrent() { + return current; + } } diff --git a/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo b/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo index b4a26f05..0983a78a 100644 --- a/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo +++ b/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo @@ -1,3 +1,4 @@ + ___ ____ __ ____ _ _ _ ____ ____ _____ __ | \ \ / / \/ | / ___| / \ | \ | | _ \| __ ) / _ \ \/ / _ | |\ \ / /| |\/| |____\___ \ / _ \ | \| | | | | _ \| | | \ / diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java index 77a6402a..f680a5ac 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java @@ -1,14 +1,24 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; import com.alibaba.jvm.sandbox.api.ProcessController; +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.event.ReturnEvent; +import com.alibaba.jvm.sandbox.api.listener.EventListener; import com.alibaba.jvm.sandbox.api.listener.ext.Advice; import com.alibaba.jvm.sandbox.api.listener.ext.AdviceAdapterListener; import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; +import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; +import com.alibaba.jvm.sandbox.core.util.ObjectIDs; import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.InterruptedAdviceAdapterListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper.Transformer; import org.junit.Test; +import java.util.concurrent.atomic.AtomicBoolean; + import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static org.junit.Assert.*; public class AdviceTestCase extends CalculatorTestCase { @@ -48,8 +58,8 @@ protected void afterReturning(Advice advice) throws Throwable { @Override protected void before(Advice advice) throws Throwable { - assertEquals(10, ((int[])advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[])advice.getParameterArray()[0])[1]); + assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); + assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); assertTrue(advice.isProcessTop()); assertFalse(advice.isReturn()); assertFalse(advice.isThrows()); @@ -79,16 +89,17 @@ protected void afterReturning(Advice advice) throws Throwable { @Override protected void before(Advice advice) throws Throwable { - assertEquals(10, ((int[])advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[])advice.getParameterArray()[0])[1]); - advice.changeParameter(0, new int[]{40,60}); + assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); + assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); + advice.changeParameter(0, new int[]{40, 60}); } @Override protected void afterReturning(Advice advice) throws Throwable { - assertEquals(40, ((int[])advice.getParameterArray()[0])[0]); - assertEquals(60, ((int[])advice.getParameterArray()[0])[1]); - assertEquals(100, advice.getReturnObj());; + assertEquals(40, ((int[]) advice.getParameterArray()[0])[0]); + assertEquals(60, ((int[]) advice.getParameterArray()[0])[1]); + assertEquals(100, advice.getReturnObj()); + ; } }), BEFORE, RETURN, THROWS @@ -107,8 +118,8 @@ protected void afterReturning(Advice advice) throws Throwable { @Override protected void before(Advice advice) throws Throwable { assertTrue(advice.isProcessTop()); - assertEquals(10, ((int[])advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[])advice.getParameterArray()[0])[1]); + assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); + assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); ProcessController.returnImmediately(100); } @@ -134,8 +145,8 @@ protected void before(Advice advice) throws Throwable { @Override protected void afterReturning(Advice advice) throws Throwable { assertTrue(advice.isProcessTop()); - assertEquals(10, ((int[])advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[])advice.getParameterArray()[0])[1]); + assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); + assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); ProcessController.returnImmediately(100); } @@ -161,8 +172,8 @@ protected void before(Advice advice) throws Throwable { @Override protected void afterThrowing(Advice advice) throws Throwable { assertTrue(advice.isProcessTop()); - assertEquals(10, ((int[])advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[])advice.getParameterArray()[0])[1]); + assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); + assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); ProcessController.returnImmediately(100); } @@ -173,4 +184,91 @@ protected void afterThrowing(Advice advice) throws Throwable { assertEquals(100, calculatorErrorSum(computerClass.newInstance(), 10, 20)); } + @Test + public void test$$advice$$sum_add$$changeThrowsOnReturn() throws Throwable { + final AtomicBoolean isThrowingAtSum = new AtomicBoolean(false); + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + new InterruptedAdviceAdapterListener(new AdviceListener() { + + @Override + protected void before(Advice advice) throws Throwable { + if (advice.getBehavior().getName().equals("sum")) { + assertTrue(advice.isProcessTop()); + } else { + assertFalse(advice.isProcessTop()); + ProcessController.throwsImmediately(new IllegalStateException("TEST")); + } + } + + @Override + protected void afterThrowing(Advice advice) throws Throwable { + isThrowingAtSum.set(true); + assertEquals("sum", advice.getBehavior().getName()); + ProcessController.returnImmediately(100); + } + }), + BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + assertEquals(100, calculatorSum(calculatorClass.newInstance(), 10, 20)); + + } + + @Test + public void test$$immediately$$throw_return_return() throws Throwable { + + final EventListener listener1; + final EventListener listener2; + final EventListener listener3; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new Transformer( + CALCULATOR_SUM_FILTER, + listener1 = new EventListener() { + @Override + public void onEvent(Event event) throws Throwable { + ProcessController.throwsImmediately(new RuntimeException()); + } + }, + BEFORE + ), + new Transformer( + CALCULATOR_SUM_FILTER, + listener2 = new EventListener() { + @Override + public void onEvent(Event event) throws Throwable { + ProcessController.returnImmediately(100); + } + }, + THROWS + ), + new Transformer( + CALCULATOR_SUM_FILTER, + listener3 = new EventListener() { + @Override + public void onEvent(Event event) throws Throwable { + final ReturnEvent returnEvent = (ReturnEvent) event; + ProcessController.returnImmediately(10 + (Integer) returnEvent.object); + } + }, + RETURN + ) + ) + .loadClass(getJavaClassName(Calculator.class)); + + assertEquals(110, calculatorSum(calculatorClass.newInstance(), 10, 20)); + EventListenerHandlers.getSingleton().checkEventProcessor( + ObjectIDs.instance.identity(listener1), + ObjectIDs.instance.identity(listener2), + ObjectIDs.instance.identity(listener3) + ); + } + } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java index 69a577c5..c715444a 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java @@ -29,12 +29,21 @@ public class CalculatorTestCase extends CoreEnhanceBaseTestCase { "^errorSum$" ); - protected int calculatorSum(final Object calculatorObject, int... numArray) { - return unCaughtInvokeMethod( - unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "sum", int[].class), - calculatorObject, - numArray - ); + protected int calculatorSum(final Object calculatorObject, int... numArray) throws Throwable { + try { + return unCaughtInvokeMethod( + unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "sum", int[].class), + calculatorObject, + numArray + ); + } catch (Throwable cause) { + if (cause instanceof UnCaughtException + && (cause.getCause() instanceof InvocationTargetException)) { + throw ((InvocationTargetException) cause.getCause()).getTargetException(); + } + throw cause; + } + } protected int calculatorErrorSum(final Object calculatorObject, int... numArray) throws Throwable { diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java index 42d21f1f..94084077 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java @@ -1,33 +1,272 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; +import com.alibaba.jvm.sandbox.api.event.BeforeEvent; import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.event.ReturnEvent; import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener; +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import org.junit.Assert; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; import org.junit.Test; +import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately; import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventTypeChecker.*; +import static org.junit.Assert.assertEquals; /** * 测试方法调用事件流是否正确 */ public class EventStreamTestCase extends CalculatorTestCase { + @Test - public void test$$event_stream$$normal() throws Throwable { - final EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(BEFORE_CHECKER) - .nextEventCheck(RETURN_CHECKER), - BEFORE, RETURN, THROWS + public void sum$return() throws Throwable { + + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10)); + listener.assertEventTracing( + BEFORE, + RETURN ); - Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); + } + + @Test + public void sum_add$return() throws Throwable { + + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10)); + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + BEFORE, + RETURN, + RETURN + ); + + } + + @Test(expected = RuntimeException.class) + public void sum_add$throwsImmediately_at_add_before() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener() { + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (event.type == BEFORE) { + final BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equals("add")) { + throwsImmediately(new RuntimeException("TEST")); + } + } + } + }, + BEFORE, RETURN, THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + try { + calculatorSum(calculatorClass.newInstance(), 10, 10); + } finally { + listener.assertEventTracing( + BEFORE, + BEFORE, + THROWS + ); + } + } + + @Test(expected = RuntimeException.class) + public void sum_add$throwsImmediately_at_add_before$with_immediately() throws Throwable { + + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener() { + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (event.type == BEFORE) { + final BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equals("add")) { + throwsImmediately(new RuntimeException("TEST")); + } + } + } + }, + BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + try { + calculatorSum(calculatorClass.newInstance(), 10, 10); + } finally { + listener.assertEventTracing( + BEFORE, + BEFORE, + IMMEDIATELY_THROWS, + THROWS + ); + } + } + + + @Test(expected = RuntimeException.class) + public void sum_add$throwsImmediately_at_add_return() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener() { + + int firstAddInvokeId = -1; + + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + switch (event.type) { + case BEFORE: { + final BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equals("add")) { + firstAddInvokeId = beforeEvent.invokeId; + } + break; + } + case RETURN: { + final ReturnEvent returnEvent = (ReturnEvent) event; + if (returnEvent.invokeId == firstAddInvokeId) { + throwsImmediately(new RuntimeException("TEST")); + } + break; + } + } + } + }, + BEFORE, RETURN, THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + try { + calculatorSum(calculatorClass.newInstance(), 10, 10); + } finally { + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + THROWS + ); + } + } + + @Test(expected = RuntimeException.class) + public void sum_add$throwsImmediately_at_add_return$with_immediately() throws Throwable { + + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener() { + + int firstAddInvokeId = -1; + + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + switch (event.type) { + case BEFORE: { + final BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equals("add")) { + firstAddInvokeId = beforeEvent.invokeId; + } + break; + } + case RETURN: { + final ReturnEvent returnEvent = (ReturnEvent) event; + if (returnEvent.invokeId == firstAddInvokeId) { + throwsImmediately(new RuntimeException("TEST")); + } + break; + } + } + } + + }, + BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + try { + calculatorSum(calculatorClass.newInstance(), 10, 10); + } finally { + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + IMMEDIATELY_THROWS, + THROWS + ); + } + } + + + @Test(expected = Exception.class) + public void sum$throws() throws Throwable { + + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_ERROR_SUM_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(getJavaClassName(Calculator.class)); + + try { + calculatorErrorSum(calculatorClass.newInstance(), 10, 10); + } finally { + listener.assertEventTracing( + BEFORE, + THROWS + ); + } + } @@ -47,7 +286,7 @@ public class EventStreamTestCase extends CalculatorTestCase { BEFORE, RETURN, THROWS, CALL_BEFORE, CALL_RETURN, CALL_THROWS ); - Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); + assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); listener.assertIsEmpty(); } @@ -70,7 +309,7 @@ public class EventStreamTestCase extends CalculatorTestCase { BEFORE, RETURN, THROWS, LINE ); - Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); + assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); listener.assertIsEmpty(); } @@ -97,7 +336,7 @@ public class EventStreamTestCase extends CalculatorTestCase { Event.Type.values() ); - Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); + assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); listener.assertIsEmpty(); } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java index 7c1aea30..feeb38a0 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java @@ -1,12 +1,15 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; import com.alibaba.jvm.sandbox.api.event.*; +import com.alibaba.jvm.sandbox.api.listener.EventListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventChecker; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; import org.junit.Test; import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventTypeChecker.CALL_RETURN_CHECKER; import static org.junit.Assert.*; @@ -18,7 +21,7 @@ public class EventTestCase extends CalculatorTestCase { @Test public void test$$event$$before() throws Throwable { EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_SUM_FILTER, listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { @@ -37,14 +40,14 @@ public void onCheck(BeforeEvent event) { }), BEFORE ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); + assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); listener.assertIsEmpty(); } @Test public void test$$event$$return() throws Throwable { EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_SUM_FILTER, listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { @@ -56,7 +59,7 @@ public void onCheck(ReturnEvent event) { }), RETURN ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); + assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); listener.assertIsEmpty(); } @@ -64,7 +67,7 @@ public void onCheck(ReturnEvent event) { @Test(expected = RuntimeException.class) public void test$$event$$throws() throws Throwable { EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_ERROR_SUM_FILTER, listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { @@ -77,12 +80,12 @@ public void onCheck(ThrowsEvent event) { }), THROWS ); - assertCalculatorErrorSum(listener, computerClass); + assertCalculatorErrorSum(listener, calculatorClass); } - private void assertCalculatorErrorSum(EventStreamCheckerListener listener, Class computerClass) throws Throwable { + private void assertCalculatorErrorSum(EventStreamCheckerListener listener, Class calculatorClass) throws Throwable { try { - calculatorErrorSum(computerClass.newInstance(), 10, 20); + calculatorErrorSum(calculatorClass.newInstance(), 10, 20); assertFalse("must throw exception", true); } catch (RuntimeException cause) { assertEquals("THIS IS A TEST!", cause.getMessage()); @@ -106,7 +109,7 @@ public void onCheck(CallBeforeEvent event) { }; EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_SUM_FILTER, listener = new EventStreamCheckerListener() @@ -114,14 +117,14 @@ public void onCheck(CallBeforeEvent event) { .nextEventCheck(callBeforeEventEventChecker), CALL_BEFORE ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); + assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); listener.assertIsEmpty(); } @Test public void test$$event$$call_return() throws Throwable { EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_SUM_FILTER, listener = new EventStreamCheckerListener() @@ -129,7 +132,7 @@ public void onCheck(CallBeforeEvent event) { .nextEventCheck(CALL_RETURN_CHECKER), CALL_RETURN ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); + assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); listener.assertIsEmpty(); } @@ -144,14 +147,14 @@ public void onCheck(CallThrowsEvent event) { }; EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_ERROR_SUM_FILTER, listener = new EventStreamCheckerListener() .nextEventCheck(callThrowsEventEventChecker), CALL_THROWS ); - assertCalculatorErrorSum(listener, computerClass); + assertCalculatorErrorSum(listener, calculatorClass); } @@ -173,7 +176,7 @@ public void onCheck(LineEvent event) { @Test public void test$$event$$line() throws Throwable { EventStreamCheckerListener listener; - final Class computerClass = watching( + final Class calculatorClass = watching( Calculator.class, CALCULATOR_SUM_FILTER, listener = new EventStreamCheckerListener() @@ -187,7 +190,7 @@ public void onCheck(LineEvent event) { , LINE ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); + assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); listener.assertIsEmpty(); } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java new file mode 100644 index 00000000..3c631e59 --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java @@ -0,0 +1,63 @@ +package com.alibaba.jvm.sandbox.qatest.core.enhance.listener; + +import com.alibaba.jvm.sandbox.api.event.BeforeEvent; +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; +import com.alibaba.jvm.sandbox.core.util.ObjectIDs; + +import java.util.ArrayList; +import java.util.List; + +import static org.apache.commons.lang3.ArrayUtils.getLength; +import static org.junit.Assert.assertEquals; + +/** + * 事件跟踪监听器 + */ +public class TracingEventListener extends InterruptedEventListener { + + private final List eventTracing = new ArrayList(); + + @Override + public void onEvent(Event event) throws Throwable { + eventTracing.add(event.type); + } + + /** + * 获取跟踪信息 + * + * @return 跟踪信息 + */ + public List getEventTracing() { + return eventTracing; + } + + /** + * 断言跟踪信息 + * + * @param exceptEventTypes 期待的事件类型 + */ + public void assertEventTracing(final Event.Type... exceptEventTypes) { + assertEventProcessor(); + assertArrayEquals( + exceptEventTypes, + getEventTracing().toArray(new Event.Type[]{}) + ); + } + + // 检查内核事件处理器是否正确 + private void assertEventProcessor() { + EventListenerHandlers + .getSingleton() + .checkEventProcessor(ObjectIDs.instance.identity(this)); + } + + private void assertArrayEquals(E[] exceptArray, E[] actualArray) { + assertEquals("except size not matched!", getLength(exceptArray), getLength(actualArray)); + for (int index = 0; index < exceptArray.length; index++) { + assertEquals("[" + index + "] not matched", exceptArray[index], actualArray[index]); + } + } + + +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java index c4213683..bf409d17 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java @@ -281,6 +281,7 @@ public boolean onFire(CoreModule coreModule, Event event) { moduleLifeCycleEventBus, new EmptyProviderManager() ); + coreModuleManager.reset(); // 刚完成初始化,注册好的事件应该消化完成 @@ -328,7 +329,7 @@ public boolean onFire(CoreModule coreModule, Event event) { } @Test - public void test$$CoreModuleManager$$loading() throws IOException { + public void test$$CoreModuleManager$$loading() throws IOException, ModuleException { final File moduleJarFile = buildingModuleJarFileWithModuleClass( createTempFile("test-", ".jar"), @@ -350,6 +351,7 @@ public boolean onFire(CoreModule coreModule, Event event) { new DefaultModuleLifeCycleEventBus(), new EmptyProviderManager() ); + coreModuleManager.reset(); final Set uniqueIds = new LinkedHashSet(); for (final CoreModule coreModule : coreModuleManager.list()) { @@ -400,6 +402,7 @@ public static class ModifyAnotherNormalModule implements Module { new DefaultModuleLifeCycleEventBus(), new EmptyProviderManager() ); + coreModuleManager.reset(); final Set uniqueIds = new LinkedHashSet(); for (final CoreModule coreModule : coreModuleManager.list()) { @@ -441,6 +444,7 @@ public static class ModifyAnotherNormalModule implements Module { new DefaultModuleLifeCycleEventBus(), new EmptyProviderManager() ); + coreModuleManager.reset(); final Set uniqueIds = new LinkedHashSet(); for (final CoreModule coreModule : coreModuleManager.list()) { @@ -483,6 +487,7 @@ public static class ModifyAnotherNormalModule implements Module { new DefaultModuleLifeCycleEventBus(), new EmptyProviderManager() ); + coreModuleManager.reset(); { final Set uniqueIds = new LinkedHashSet(); @@ -542,6 +547,7 @@ public static class ModifyAnotherNormalModule implements Module { new DefaultModuleLifeCycleEventBus(), new EmptyProviderManager() ); + coreModuleManager.reset(); coreModuleManager.getThrowsExceptionIfNull("not-existed-module"); } @@ -583,6 +589,7 @@ public boolean onFire(CoreModule coreModule, Event event) { moduleLifeCycleEventBus, new EmptyProviderManager() ); + coreModuleManager.reset(); final CoreModule normalNoLazyActiveCoreModule = coreModuleManager .getThrowsExceptionIfNull("normal-no-lazy-active-module"); @@ -638,6 +645,7 @@ public boolean onFire(CoreModule coreModule, Event event) { moduleLifeCycleEventBus, new EmptyProviderManager() ); + coreModuleManager.reset(); final CoreModule brokenOnLazyActiveCoreModule = coreModuleManager .getThrowsExceptionIfNull("broken-on-lazy-active"); diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java new file mode 100644 index 00000000..0846a0ee --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java @@ -0,0 +1,210 @@ +package com.alibaba.jvm.sandbox.qatest.core.util; + +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.filter.Filter; +import com.alibaba.jvm.sandbox.api.listener.EventListener; +import com.alibaba.jvm.sandbox.core.enhance.EventEnhancer; +import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; +import com.alibaba.jvm.sandbox.core.util.ObjectIDs; +import com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils; +import com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher; +import com.alibaba.jvm.sandbox.core.util.matcher.MatchingResult; +import com.alibaba.jvm.sandbox.core.util.matcher.structure.ClassStructureFactory; +import org.apache.commons.lang3.StringUtils; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import static com.alibaba.jvm.sandbox.api.filter.ExtFilter.ExtFilterFactory.make; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; +import static com.alibaba.jvm.sandbox.core.CoreConfigure.toConfigure; +import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toByteArray; +import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toResourceName; + +/** + * JVM帮助类,能模拟一个JVM对类的管理行为 + */ +public class JvmHelper { + + private final String namespace; + private final PrivateClassLoader classLoader + = new PrivateClassLoader(); + + public JvmHelper(final String namespace) { + this.namespace = namespace; + toConfigure(String.format(";namespace=%s;", namespace), ""); + } + + public JvmHelper defineClass(final Class clazz) throws IOException, InvocationTargetException, IllegalAccessException { + return defineClass( + getJavaClassName(clazz), + toByteArray(clazz) + ); + } + + public JvmHelper defineClass(final String javaClassName, + final byte[] byteCodeArray) throws InvocationTargetException, IllegalAccessException { + classLoader.defineClass(javaClassName, byteCodeArray); + return this; + } + + public static class Transformer { + + private final Filter filter; + private final EventListener listener; + private final Event.Type[] eventTypes; + + public Transformer(final Filter filter, + final EventListener listener, + final Event.Type... eventTypes) { + this.filter = filter; + this.listener = listener; + this.eventTypes = eventTypes; + } + + public byte[] transform(final String namespace, + final ClassLoader loader, + final byte[] byteCodes) { + + final MatchingResult matchingResult = new ExtFilterMatcher(make(filter)) + .matching(ClassStructureFactory.createClassStructure(byteCodes, loader)); + + final int listenerId = ObjectIDs.instance.identity(listener); + EventListenerHandlers.getSingleton().active( + listenerId, + listener, + eventTypes + ); + + if (matchingResult.isMatched()) { + return new EventEnhancer().toByteCodeArray( + loader, + byteCodes, + matchingResult.getBehaviorSignCodes(), + namespace, + listenerId, + eventTypes + ); + } else { + return byteCodes; + } + } + + } + + public JvmHelper defineClass(final Class clazz, + final Filter filter, + final EventListener listener, + final Event.Type... eventType) throws IllegalAccessException, IOException, InvocationTargetException { + return defineClass(new Class[]{clazz}, filter, listener, eventType); + } + + public JvmHelper defineClass(final Class[] classes, + final Filter filter, + final EventListener listener, + final Event.Type... eventTypes) throws IllegalAccessException, IOException, InvocationTargetException { + return defineClass( + classes, + new Transformer(filter, listener, eventTypes) + ); + } + + public JvmHelper defineClass(final Class clazz, + final Transformer... transformers) throws IOException, InvocationTargetException, IllegalAccessException { + return defineClass(new Class[]{clazz}, transformers); + } + + public JvmHelper defineClass(final Class[] classes, + final Transformer... transformers) throws IOException, InvocationTargetException, IllegalAccessException { + for (final Class clazz : classes) { + final String javaClassName = getJavaClassName(clazz); + byte[] byteCodes = toByteArray(clazz); + for (final Transformer transformer : transformers) { + byteCodes = transformer.transform(namespace, classLoader, byteCodes); + } + defineClass(javaClassName, byteCodes); + } + return this; + } + + public Class loadClass(String javaClassName) throws ClassNotFoundException { + return classLoader.loadClass(javaClassName); + } + + + /** + * 私有的ClassLoader + */ + class PrivateClassLoader extends ClassLoader { + + private final Map javaClassByteArrayMap + = new HashMap(); + + private final Set> classes = new LinkedHashSet>(); + + public PrivateClassLoader() { + } + + public PrivateClassLoader(ClassLoader parent) { + super(parent); + } + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + + for (final Class clazz : classes) { + if (StringUtils.equals(name, getJavaClassName(clazz))) { + return clazz; + } + } + + final Class loadedClass = findLoadedClass(name); + if (loadedClass == null) { + try { + final Class aClass = findClass(name); + if (resolve) { + resolveClass(aClass); + } + return aClass; + } catch (Exception e) { + return super.loadClass(name, resolve); + } + } else { + return loadedClass; + } + } + + public Class defineClass(final String javaClassName, + final byte[] classByteArray) throws InvocationTargetException, IllegalAccessException { + javaClassByteArrayMap.put(toResourceName(javaClassName), classByteArray); + final Class clazz = SandboxReflectUtils.defineClass(this, javaClassName, classByteArray); + classes.add(clazz); + return clazz; + } + + @Override + public InputStream getResourceAsStream(String name) { + if (javaClassByteArrayMap.containsKey(name)) { + return new ByteArrayInputStream(javaClassByteArrayMap.get(name)); + } + return super.getResourceAsStream(name); + } + + } + + + public static JvmHelper createJvm(final String namespace) { + return new JvmHelper(StringUtils.isBlank(namespace) ? "default" : namespace); + } + + public static JvmHelper createJvm() { + return createJvm("default"); + } + +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java index 076e06df..ae52562c 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java @@ -33,78 +33,4 @@ public static String toResourceName(String javaClassName) { return toInternalClassName(javaClassName).concat(".class"); } - public static Set> getJdkFamilySuperClasses(Class clazz) { - final Set> familySuperClasses = new LinkedHashSet>(); - for (Class superClass = clazz.getSuperclass(); - superClass != null; - superClass = superClass.getSuperclass()) { - familySuperClasses.add(superClass); - } - return familySuperClasses; - } - - public static Set> getJdkClassInterfaces(Class clazz) { - final Set> interfaceClasses = new LinkedHashSet>(); - if (ArrayUtils.isNotEmpty(clazz.getInterfaces())) { - for (Class interfaceClass : clazz.getInterfaces()) { - interfaceClasses.add(interfaceClass); - interfaceClasses.addAll(getJdkFamilySuperClasses(interfaceClass)); - } - } - return interfaceClasses; - } - - public static Set> getJdkFamilyClassInterface(Class clazz) { - final Set> familyInterfaceClasses = new LinkedHashSet>(); - for (final Class interfaceClass : getJdkClassInterfaces(clazz)) { - familyInterfaceClasses.add(interfaceClass); - familyInterfaceClasses.addAll(getJdkClassInterfaces(interfaceClass)); - } - return familyInterfaceClasses; - } - - /** - * 获取类的所有类型 - *

- *

  • 所有父类
  • - *
  • 所有父类的接口及这些接口的所有父类
  • - *
  • 所有接口的父类
  • - *

    - * - * @param clazz - * @return - */ - public static Set> getJdkFamilyClassType(Class clazz) { - - // 获取所有的父类 - final Set> familyTypes = new LinkedHashSet>(getJdkFamilyClassInterface(clazz)); - - for (final Class superClass : getJdkFamilySuperClasses(clazz)) { - familyTypes.add(superClass); - familyTypes.addAll(getJdkFamilyClassInterface(superClass)); - } - - // 递归获取所有接口及其父类 - return familyTypes; - } - - public static Set> getJdkAnnotationType(Class clazz) { - final Set> annotationClasses = new LinkedHashSet>(); - if(ArrayUtils.isNotEmpty(clazz.getAnnotations())) { - for (final Annotation annotation : clazz.getAnnotations()) { - if (annotation.getClass().isAnnotation()) { - annotationClasses.add(annotation.getClass()); - } - for (final Class annotationInterfaceClass : annotation.getClass().getInterfaces()) { - if (annotationInterfaceClass.isAnnotation()) { - annotationClasses.add(annotationInterfaceClass); - } - } - } - } - return annotationClasses; - } - - - } diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreConfigure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreConfigure.class deleted file mode 100644 index 463b15616b5f98408aa70a2065496ce221d58f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9146 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreLauncher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreLauncher.class deleted file mode 100644 index 89eb92712b1f2d1ce631af059cb3fe792ae1c07b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2290 zcma)7T~`xF7=D&)ShB7~f>EPZqlhK}T#Knz;s+lUD}vGnQM6x^WJwk_*|@tw`%~Jh z-t>5l7r?2fde@8I^%wMi^muyu%qBuOa9VRtW@cyJnR%Y){g^-g`SlHeQLO1uaW#g| zaIFVp8uB`>J_sPcy_&#|B#u?q5^fw zEn5nDXYIOmzga6<-hwDPoQco6CE+Xz&z9fqNj0e2zJj6Il3O!{V;4nHm@8{F(--w} z(S2c-T+cG6*vyJ%y;QZlyaFQ-Ud0M#)@t*1SsuIxENw)^ss}T|n-@VsS>YQkV zMCld<2SmWR>VyQQAW~Yc5Z7AmL2*UFU?_m!teb)BI=Z%wSjN&t%mOmd=H*_2`4oa4U|C1&+gdYbsVcAoC&YetdZEZzI1`zT1rWs zBrKsI^TB?W8%|Q)otw6`H(=qZfn`v@qdV)ZK%H#bPTBGl9B+qE%5g? z#6DRs37m7iiYXe5L5t~Ft1)-N%5b?|8Xg9=!#vPzf06}bRl$kQgQlv&D_GB(R=s59 zGfzm~^5~u3@Y*m*7Ccd6C?9L@+6^!-5p;`2!>TjxMmkS!6WhzR9Ridx_n+a`Byh9P zDm1Ob+EjX3U8Y3Sx8^M0XR0u6J1^c2#Qk;d3EcO7JDlE&j<8hgg-vIw>ANjiCX`p` zibtZqL0yUr6_(WD!WN<%=*|uek8DC)r+F7nv5kjY`q=jKs3gv^JnNmno%{`O zWq{Yo(K-IR!qFf{5uE2(<=O>4ZfRsVl5qYa9BEa}zUlrMr?QdJE%f|^L{@DLjBHd6 ze#F7oh%LqSO&oap8paY0X~M-#9DMYWug%aa^lsn~+t=t@+C)6wzk$O;TS&0mz!B2w z+QQNG5Z!g$;%gcSxs6gN5KoM3;us>cVX_(F=n^03PigrH#`%8V!DUv;94fdHaz8@c z<7AVirDR;?z7h5p`Hw+86Dw#iFVKi(maQcFC$H>gpHs$EB0DywCe`1eC)MGR4J4JM z`U_4Z)eRhfiT<%@_}vqJC!=rIc}4^YN-4#al1k4?=bYztzzu$lb2LF>leC*Akvp`S zCOirKUI;peC~b4w4$EyjEVu2j90^N@Mc9vWry5d9Kz)aVhTI%!y@SE_Z$jGfszR+~ Hyj=MgtnV}> diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.class deleted file mode 100644 index 8381dab95cfb8c36537ebccbea01998275e5e3d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6595 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 v$S8rx*)!o`%63b>tLMQy=A1n~dP!2Uc?9S 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 P$@P3kc^YG(>Ja%4V9;lihZ+;c)N0 zUi%BY@j}nBAbRw8?ceZUc#a>>%qC5mrUB85%*@Wr`@YZn%ro!gx4(Y;1;82jNep1d zz>Op#nCZqKK2%LsHM6RjQ_W4)+)~X)J@^>89?avmYVH{LB#A!UO=1Cys=1fIeFG1a z+fS4D3=a)Rfkf4HHmdeaQ6QCFm5-!VlJ2sV3w+029uqKDrGL#S*#dpxvg29mn@e3K zPZn)oU_4v!%9boSd6}2i>Z7t%k!~^XJ+=y-Z(D_utW?6i)~r{omh34tlhxMBPgze2 z4DISit~)hT?mtxXuDvKM^S*Q|OP*i0{fa<;h_f0vB`aqKH0aJb%dQNnKC`&Hef2re z%hHw0wr@G*bvg@^Y8Q5FLWPlqz2U^7hrN% z+a~r#?g+%Dyds(C&pNI>S1sple_rO*38%7NL6+`F-%;PS$yl)Bkk!+>de_K`URgS> zHO2D|kC=S)IF&06Mxw(bOOv;vu!&^rwZyadO!XZq(JfXLw{g zv)s$|P;>$lT>ej@RnEdp1&()c*2KNQ5gK(+5oz9AhutLK#n!q1Q?xyVbbG4=?5l^` zUIb!=DK`+{5zYvtJ6u13>CUvi@P*y0mFhDf>0McwJUjSRG6p!BG?Y@v4afIA|h`LndCsVH0m+ z$iy)W87P{tvBc;mmN9B#1&+Ygj`DfYJWZ@(%|OY-1SU;f#U!zY_3)lkymYKGrmLqK zJP_E^D9|_at9F6#%Ww^NCf2bbFxnB*jyuX5-=JkCuzeYLEayCCR*Bxm5_#f7;cRUf ztgA%xSvTa3H&$e2&VJ0@F;{on^%P>}z7$1wWod~C@O%TO5;#1f%kMre6#R6AMOD@_Xbi* zgB+!l40TT>>YifMJ%tKE3-JHI8~jn9dQ6G3@8#NYyv25yUtc1MIQwInrx2N+5LtMN z=q6&B6Pt)75MB-x5&sx6W;?U5vR zAeknT>$@OPN2ZXRC7WSd&75>Kk_tJ=wncKDhqBYyXf?jo*7yS6ZDX8hHJ)#4d=ZyO zt~!lo*s)gQyKRg^`HnI6I4-wA5N~yIzl{?<-#p|n_b-SfMkJ%ramp$73_Sv~C!fI- z_zDL(=oR=CeRJtkPtgAadmfH|{rB%_b=Fa>xQU}Ff+XI< z6)on`nwTQoF@g7qV2XZBME+zr10Vds-Fz5c7TezT*j9+mq32a%TVv$XbFp3B72CBf z(r1~sx`gReD*iJD7NTS?o?D2qOFY58+z)uAaTI+z{SB6?fVX|4=}6LBS9F@rBDnq! D_Z{Tg diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/Enhancer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/Enhancer.class deleted file mode 100644 index 2fecd266950bf2ac2385e364eebacf94b987cfba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmb_Z!A=4(5PgHl3WDI#yNQ~pO}wr#3c-YA6A$Z+)9f-?mn<#m79v+a%Yz@_M;Qym zXrd$>JapRWyy<)M`u_3y2H*;Z0h$3?gtjx?g_E8c$(^;l2+$@}9~V<0GzVIX?G;>> zQWErOH0C+0f_0`=w~^tI*l^fg7iKOmR4gw1fs38ZbrueWQEDcNi#*|k)p$NpCF@aQ zo)u4XC3DeE^_TH@$sL{zyM%h2XPVv2dMz*8l3)KOzxgjgjo8d=D))Ke6}9^MiFGRW za_I`;V$*=Bv7%%RR$ono&bOHl$yibsphGy{^vYj05l*&**9e4)|9XI`gdGGv-}6}o Vb-x;`(>`i`Z}>_T2iUzm`UKcDtLgv% diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer$1.class deleted file mode 100644 index dfc9bee379334c666da8f121429cfbdc97392ed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2131 zcmbVOZBr9h6n<{r7MF#D09K@ETcb@va0LaG0AexN*brNSQ0cVOo6R*@n(Q*04bq=t z|3JUenOYe;(|+&&>BqjDyBot&p^j#<_vM`Dyxw!}?jL`@{0+bizB+?AX5}!aB7vJK zZsE3ydE^x=C|FdXU`g)p$YHq;cjf$v99AUuo`QmcRff?$-b}gNsS9_d$=mIc&1=G8 zc(1g>_qg8VR$UJ;@(eMzVYXA(7;cmdyQTA{S>;u(@9eeoHn(b3dtWzfN9e+8aLW*S zVNY0Y!QVJie!;X%cZtDDzl(yB?bLO$C0Vi!-rVGlDfeAsM8?UW6)j6RUJ3+l=ib5R)HH=1+NYFVe1rEA zHqF3_48!t7>{iRRDxKY~0}Qv)f%qz}V_Nn6>y*svBvNWH3|`KJ>~@!zQ*ge2K>zwo#^r zc>8`xQDP@fspu`obY&~Xj|_VmWSDt-Lv;3rBe*L(6|Yop1)_EluI8T!q3 z(V|m+!VQWdoR+i!>U^)~4S69`>84LIuMo-)WaJpX*P6qw?WwkSvzI7*KyQo$y+J~W zglraoX6hVCp=T6lL03Pmwh=~@=45vAIaqcq@*JUTZsG;PKY7@5G{y)ET*erUSwv_| z;ym7`S+1m3$xmVe7d-7rTqOHpLVk#kd^_xG+Q$ghm^?%zoc$T0LqyBDz-B)3BjWSX zU!go6i@reL?^9!uUvTCbqLT+>ktu(fJD`R71NtRTeTG=FUsAMk7yQqkv>Q0Y;DP7U zIC&H!KV%g17^LwA1~7|pdNW?Y9C>+@BD#(1#GS#y%9SrWNgm0J`g(Ic zy*Z-!cuDi|k~T&7VZ^>saP=?rE70k$s)Hc{T_aWq)AY#z0$!&;$7!XK3vrt1_b)si BCq4iG diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.class deleted file mode 100644 index a03507bd2d298375fad71c88b2ec3b59dd77bedc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3269 zcmbVOZF3V<6n<`-c9ZQwOG~K>B0&mCo0b(sl%^nr7YPPXQd&w?yxDBiE$MFD-L_Oj z9Y6WS@ny!};8(;MiZbI5@T0%PU*LG|-EEqr1d5r-?%n%x&Uv15?sM;7|NikOfaCaD zL0-WX1@EiSQBZJIMHjBAV7RVg2p=TyA#SMjC@PrhgaU}Mn<{!REm|`wI&n+IEN&~9 zOVE;!;`q1+pWu#I|EU75q6AYxS%Jl%M(<9RivGZ=3O!O9P$GWz>RI|ntQhRjyhw(f=wPy z6ij!?;8nZCOWasoSu%X?luPbC!*o5%u$%?%n3i#I#d3m+;fF`AcbT5W14{-vWyQM|T3|6g@!TqIh_=Y8iN7{{thK09)dlf5au*opg z#u-D0Nx>XwXEbt3RIgfm#dazZnt}=uIJH(Ix}0`6=5nFW<-o2QMJvcQgis7TvX#xx zwdIr7Y{L>XhGY&4XW5at9K(R`E_=>=Ep5wwtVH+S+RWeZ&P*@e4*h1zGUdz3@O|P4CC9g7m2QduNcPKEqRu> zNF{5x;5q940_Ds%lyn1cS#bn)rRQ?uoq4WXsh=BaK*AQc9X}Aq3~|y{K4rkoD`_9a z?J_B<9gtoQHY!1AJv%~@r)``Z*GMcGcBe-g0MwQ8+jPDi?rGb%1DB4m%@l5^eIpl9 zUpT9NM7*TD3i7(SX>d*z=rfi8Mo)FzdqXOg}QdNa{Gx{lbd)aal^K)3AF@jA7& zZ~_itSdNppQBRWES7=_RnDG={v!i3(nRRqOlyf$19F{hc;k?L(u$e+y+SM?EQS#a$ zbcde8?mu*+ROy|23N|~o4rM|a&FIQH;uG;lNMs&EJ(&WB#>QReDV=7^{_ zC_0J>$LOvsQ0MR_P9P>*Z{Z{nEBfBXJH(1gPk~DzUk3S@K%6`tL6+tv$lnI5!rE!F zc7}R7@GdcOw$8%ev^q}xDLwWCyMDp$3FQ$6`gao(zhf|lv4^9Xv2g)jfZp>kN>d#D z6qHE7UJ3;Gjsp9M41G^Q{Xq5bBUQxD67CJ^Rnd!c6t*BIRR^A`15e?61Uyv-o~i>+ zVFP$70=@}N%oorukYxoOmla&>tK*F0QoRHZ%D{m{|Iib>@*4(38M1~l+(*>BM|~Z* TjD7U(rh*) z8AygA2HWSmM`zvR&#(6n0M|GTa2%i?;6$MJ=&B;6i8dtA53Q%7sFt2)SDC7nz*$sT zuXB3VrA`dpSnIs<+SyXz{C3SqqwHL&--3))F(*F~=+??q-1c%aH#U@$_3>&+40qy} z=~&=mGaHd-l%HjC_zyC5MyD$VgXrl#4)6Z%8rlUFnule0l)79hqZ5@Vnbo;0m7OK- zO{T6ONp_)ZO6@UQuGm~-;vvZ>^#X$?)soW)90~|*@!IB30Y{ymy^9?_2b>MKw)+Y} Q*h3Hd>l@(!hd2Vh0e1a~MF0Q* diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock$Block.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock$Block.class deleted file mode 100644 index 2257ca5c250b593dd49219fcf23655c43d85e232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmbVHyNUuq5UkdH=&ImH7@Ua>VsxPk2ZCTAnD>s&={nB9?z!H#U2q@ZM~S28513RH z)!o(9<@)yzV2VMCPKq8OGJdOs_Q!Zb$kzT;8U5PZU=8vxS$cDrl+s9wKH<~&Ba7V^ zQV5sLk!x|=!vC`Im9n~>IHP=4X|&?k`DkuK2qAuQf8m@~xs|%snlQYlvlaKvtD;o% hLzunuCLs`7p&UR_D1<1e7UBmc$O30!gOH+|bZ-FXMVkNs diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock.class deleted file mode 100644 index a16495c464e7353b24a8e4ea0a9774faa59677b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmbV|!AiqG5QhJ4(!|Er)_3rbUK|ildJrrKg@OmcgSW|c(8TR7WHtJ19(({FN}Qzl z0zJ(9Ff;!*!~FbyeFM0_X^xW|^BfC<@vRH?)nK~zUfPx87$q8{Hf%+uTrVFDvN~>t zsia&!X?1V8DK|Fkh+SQA#nf~=itM*l_#_)zA@MKltrN9v6#j-@wylfQiVAoEWfkg$jT&PNhDgd18hbHqg&2OA>2yLDml-mURRn9?*?Qk)wJNj zCO3YJN5*mD67MLH1XH#Qg|;3TA=mxbX~r8$71jJOl1iElN-mHlT-xPBPBA> z)x#at!=-w-qk6bP8|g~b=SoQTK=Pq9?q73r9x~WfMcGyY9)>bxC?3adc6X(S7*@|5 z$HEfBvwzW0``rJuFEeUmcF2Q4oaV}6dAoLM!e#1k%j>*uHQrY1b#JY@+VN^{7?#gO zX=&5*6%Uf>qH!yAHd@WC_Q?>%Mzi6aG(A4W|0vGU?&N8gSaB*IpI9S{jd7Ca3B5;( zG~nqsu%jP^FBtnA|59I(PB%Xy{W5`Bf|+Az5zHp=6S?OxNt>9#6y|A6GgzR-eL^yY z2_nuW^dC?peT>e9nZ{+h=jfEkDMu2;90i%j?HAL(0kwG= AVE_OC diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$1.class deleted file mode 100644 index c72e30df594f8d563a6310ac944cef6182380e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1450 zcmcIkU5nE|6g|_Xjjd6;b$8YJwQALF1w(!C#ibzYibB*ePcscN+smnv@agV!``P7ZM z3cTp8>qlC+LXEldh5JVExzO$s-V<^Rg^t@xR>SguWNb+#lRm>?rx1qCeFkeg3IxNM zfmGu8Z0ZTU$Gwm&%|YbzaGz^w*16F#fnhi(LQcC!M|RAKrQr={B*ICfA8Eaa z_8~=cGQSM1@rW?ayK-Q{*6Uw)z+ zWk={$&$MV}S;FwlvaMg|^>dR9TGlMu+^af*;pVPDrZOwM#&wI^MLlhMq9~lnX+rKI zVB)^h(3vhU^lTH!5b~BycaSc2fuZ|qP1s(>bUk4U=dQymbknp=^Er#Vu5cL^cNQt^ zWo{cne=K-SIC=}-4YI@%jyu@0D_KZxXv(xrZ<^s=a!(kBa}2?`a)EsA%9yseT`lE> zv%vEf?Zh%=gIhW7m~!oJ2Bk4{|GHY=Muz-esB1XlbC4OmrkifgUR?s|Po{?-kbaLl zMd3ANmZcf?)l2FYulVxgCGM>L4Ta3mDqEG&XIO&U+XV-b(ztN8Ty+d_&6H;Kx1{fP zQb%PKM$nD@5yUaXF!N6xv9Rn2URbnUz9jtah@b5qWnN z*pdN;=vGh7=U1p}RZv>8dq7N0x5ef6FGIU&dpT}Z$!^L3Wmm1q)%+4eoQh!EMxOm| zbvQ~tyDvt1H6#vckvFUb!w$Rqr%F6(4N?F=Q6ap2j1)||0DTRU}n`D}9+3d#6rnDly z#Rq=#6W=|@b3Di6i_#*BeD)vk&+s4csCPCgO`w}oPSX$O!|a_qcjo@?ow;}J|Hi&InFi!6?qk7?W{ckmCweTu{)6iwa)H z8!|36pc!vA;xcr>NeHQA04W6=6OBk?QidU8ilKRAnp*|p2%s(PVyXe6|*QDO);=2Ltv4?5RN77jHa7LLQm-0)O1G6=~gOX&uDtq&=%#i zGMy2I4P1aIYB<9u7}{e~`n0Z@x|P;OCmpV*Vs=tDNwy(wq%GaeJDlO#@=^zVQ6z1L zYuuXDtt8j3a($XRQW=mI9}UF)~C*>fK2r7u?G*yn20Nxr2sfxI;2b zhT75DEZO&McNJES`mRx7PcBxRsE9krsrISnr>mgT6%~X5^G^u`5~k@mtiyf^?x}gRd7kach;mC3Oi}0Uo^BG z(#)V}!VDu-Q9(&gPl{|8?B7d@ZdSp+k0+E!k1y5=fw=^2KtQwB3YuT~RpNHuN%EtH zi0sa?EV-CF_lUVFw&Ph9Td_?=H+og<#4bVYrfv)QSlZW85tEh zP;_2ey}GF7a>vPMU7jklIGV{)vhJ!p?7Pd$nH%R>-O*hh&187WAi|t2)2JekX<_PB z(agx0Rq-~iF<9+B~}icfGu#-}Pi!{-d~HGs^}v~+S$C8l`NmGK3`Za-Zj)VQcVO0F}8 zBYxt`?OB=M7K4Ccz;6xz=%!M_Z_E1kACtNZ9eC9F8Ms6gNb*avzT98g>y~8v1G~JMk(Xg*-(a;mK zowSxSC&E)&%uc7dL$I5dd?qd7LpbJ-)Q6?^IZ+DUKSTC|93ny400A9!CX7QhfBTEdQ|CQ&UA zT}M4C9%y7Y_5MTyae%Qxd4r~jCBmWGV0X~;0L`)9+i1CqjSRQ2rNG`qpV|eqwzLruSU~$-JXM1w6WWBM zB=UgtE83;suvxlK@E>@v+Y0L!VK<@&2M{6c0%8E{Zw$&f*aUL?P!ZDvtyWK?N~pJs zoH>sgp-J+bRZlXIzVuceDo8zah=Lbs8)+O04%3DUyA&KLx<P Y6ZVT=53V3|xC4hohmvrE zvW15hmKnx96-H9afZ<8a^&5`xR9)1Cv)^twq0qZ^zvGCea!&1>^|sVe?Zm6Xkc#$H zn194jjrDi^Ksr+I3GGVfK#H~uhGAY(AWsINfqSa7ik>rkC|m$uEW|k_6?YhtRex79 zOxKi_uUd_|47NqxBh5_BcZIhj0%i6m%A}!yVR1u8G6-7DNbU}?w9#mK4A~7$JXbvt zhLWt`#pX6LUHS6@5|@^*yLm8_?d*H}3>g_y34^%*&Aex*wU?@$@MvtoX$4C@yHOkBP3TY)QIDAQ64L%ni3 z3d{SVEg0rsw{)Z$az}-V8g5N%KN4M%8J>-njX3jh2KuFv#U!S($RKN0D_Kk+oy8ok zTA)hb#=QljGdK`zsKVYfTA%sL|7> zJ5LnMFs%JI7MAGgwLq^eIA#pdKrUyfr-wR0I=Truou=I;?GhxX?b0E*eT0NvK1A{( zsW@`BHbLFkqbdzA!$}71Sd$kPLc+=O43+m>`zFRK4Xld4{D6T ze<96(4*+J)05iCTd4gLYfF#N5l*uG+oaDSkDJAK|vPx48Xs4A?=>Y8Ki}q sR6d;(F}J$en$;3+6IcRwNY8N>d6EX@9?8q}&5$;Q5@ty*(jK|-ziwFjGynhq diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.class deleted file mode 100644 index 0d019495cc268518758a1f9a00661fbe429d1337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20038 zcmc&+34B!5)j#KEGVjggg(Z;SNYH>$Lr91MB8Ej)AsQA5LUCysk|7KvGwIBPMby@< zwzai(FSd%U63qJ$Gs0x?1u~$~;+bIz^E7#w zW%2AVmGU%;=Y(mv>AX6#Oq{MG|cO{ z)#A1=HE=9MZ{rPN`U1CGyfK8HcnNRf%`&jV=1zG?$oyoO7IT-7@n#`DC9QM_eHoj( zE#4xpw@T+WX>GUpYKwP-shO{__&TBbEpmCQ#n;<>gT*(7`6j+ux-JUS#r!s#ZxLW` zxA`3wztiGd!?cR0+59fKzgsT1$>lv^YT?_37jL!sy+Y^vgy-)UG(RAh4_f>o;p2zp z;UhNh6e91C%SQ#dkJ)^u&36d}yKKH&0DN2?J|UNTA5P9+Jz$a_N!F0l6HM%OQ&&kvr7jFq6}iNW@YL zI-==xEN$_lOqETEOe~e^?#jg47Hx?oGR^UHCWb*xon0MFBlG&!q@rC+!H#5mdo0CN z)|^bWH>5i@Oxx7ZtovqSMm(`4xjEL<))ISjcP!B=1M8bxlbsFGj`;fM`e?(ZEu9VN zXrgU>a$7@dG8Jp+&cr(!vcmzRqP-)zKH8DD_EK4Tc=M*{mZ+J44h#*o#M=|mOm`~A zv_1drEc4hAO|&-%mB4xCz=*^W8>7IuVQVb9C6;Q)TYm{K?uez*)p@nOUzAKOOD1AVW0{S~wgu7FjUa7|kF+(h=;kHS z^hU#gh5f(r6R+hx)5nceY(qz^HPc|0(D+a2gTu-gxSGhrqVJ$p8&k=x>AXRqbUe}C z5z8bKObcE+zrmm2tau`xnZs06GjTOjU_r7CEE(P$PsEmWcdn16Rz=r$pa=Tc8tqse zO~vKe?F?i##?#RJ_E;v%bEbxxi36jibuv3akchTs;#*=CKL!j|ZSTT*?KMpWfkeCF z4IQp2dESmQF87CNimH$D(bmu`c0TwVn)sjwZ+* zg-4Bj_HlhdUc3gKHlf2^11J=AwStWE3NAGO8N#(LL!r0?+Y7qjj;4#Luz$-*Q_~Dk z75R=6KEZXKmlVV;7r6WCq(Am}fp^YKi;o~XganZUA}O)>sKt*XheM`j@fYCZvND3Z z9urSz6BCW48-AHa*Z4HVM7D{S!#Q}4PIn;<=`)IHN$w}>}k2X)?nO8ZwhC+u1F_A%hzv$^8oh2PMupY zo$4FkD=A<)4SotZXPK-$Q(3-MRy zgPJ-Y&-}SgOD2VUWT-tZtFG|Dce{q<+lLE!KE$$#Tpx^~!P&9PqMe|w%(u2n1fsSK zGU=8X>n-q2ljNZ(|B43s70w%GPNR^j*It&(?)bI2z?-@GE)p?#jBm&ze^I3ZVItHu_ysY zIyXW|IxGHEhZ4Sr?sb zYdDw<4T7wl%m%6(#BJp`@&9AB5fd1Ep2R3<(?X`3`$4dmHV;93K2nEhyWp88R5U$N z29pV+drmUpS1|X{o8dlsv%=9<*#J~eJ?9*zH8leVok7XeN0$+y#1FL%;MKNsk-)kO zPLl;wug8LgbNF1O)DhS%BzYK2f89u)*k6gyp4HmnR%F60$?gvs z+=AI;QGADPrFS{>e)@nz&(e<_`WW5m@K^Y&7Jtp*uk#a3lM3axIa;$dLYcqcp?A}5 zOlN7sa<|8c*6vga=}iOneQwh&l{xetx_wZqWI4)Io`dbHx;gYg`jA5(k;_i{5L3&5 zs1HWB`c@S|B7ei-Z}O8Cf6L)x{1gg{x(0>KZ(EhOH@PC-HhaglGmULa>#C}lR3g!2 z8j+2J4YGfd}C1!y|Tz4*!yWCCmMQX=)*653pT!_}Ba!$f?kBGkwd|Rk<7M`c_1>_E=kE)sAZ? zS7Ae{8RTx?wUP+G9e$2~VexN8RL33u9sl0qKREnH{u9%>La1t$esy}0S4435&#(jj z3;)&Ozwz_XkU}fwHvPWD-QmB}K_u@E|AYVJ@IUEJ>}*Xbp*}5DsjAK-E?vp4x~it7 zOBXF{nzw3E^V<5Ai&kB>a#>YdEY>9~@R%pT&qL&;fd!K0UYvS1nn&d`-*A7i1chQ+XW-qrY2+WQi!>E;*2I>AyHkU%a$-=ZH^-Pv89-)Mq^kA6!zR+ZO~Cl6^SOn zI#0=wmA_9%?v?0sbb#V`ZoCdvmI^qkSOpzrDI1%!{5d9qIx0j^pZhN%Q4VV{#)*vM|3p-k~cP6>&483Y(kBSZp$sD-)aTsIV%Li{q$LHB3An+{tX8 zI>G9+zsdT&x+>RAxi*Tl4US350mhGrPg27jH3E94M)EHlRVIcwGKZR5kaE;088TXx zLml!|zN>FP@6rb1A zQL;JjM7gfe0=WpKXX(Q)rV9od?#AN&Yy3!Q2AbFj|f>0HIk7*wn^j#bk$ zsPV?xy5px6!X%dv_pQC>C4I&X4{GHmeQNKnYnSW~kYyzkuG!WVrm2^6)k-)lo?a*%Ta=I_8O3jWUV(x}AfrESm^>gQG1+4pM`*rM zK)nl=uTw&#a08Uk1d{>%Hgq3n2YokNd0E_id^r<~LQgAdyz0CTyly{Wc+#FC(oPiS z%%CG|ztYaRM!4=+v`rtRVs%qE&?xy{fW=@E=*x4eSqrV`jHWjCNBF|(maXwjt9Cd+r0R^Bp+KpT!b;W|$t3Qf$% zW>h>qFT2ZJk&2~ZjBxN;8BYR1WQ$KCqVYufk{IH3p0o5A4li(CAvn3@qs4r~x6*t} z=7x_6-6+v^w{OfWc2ABM##%d~saV^^*@H`_OZ^ftIfc*L^%ED&7=N(I-vxt(L9=7( zMPAfW=Ig$ekNIA~e>CON<%9r;LvG#$&8iOeG8x?3;hH|&HRQc$D|#RLad@HoQT)&Le;EBZ2grNIk$~?xER_Px z8;3p|df<8&o<2$ew1_UNJwSol+8!!CNWq7RYY&sPc4X1<17tr;Av}fG9-xwk$w9Le z&0!CdLUTBpBOa!axn^0eIch%uE82zY1Q144g~cY&a5@u6)ZlL&P36;Q4xdg;D#uU*SJagG8!N(}Fwn+M0)&}ZY))v>7oqCYQwj83$BFd3; z8ekI5qhU0kPNM}hi5Aifx`<|>J&%@XjHa1YU5v0keTqJG5BI2c9q~=caX*(q6qi2Okr13W>uYs;)j2dNH{10X@D zzK13srH00kezlWAkx*q1o%0}_8?k$6%H;b%7x8Yn;79mA7C%3dzDVG4n!1y&@_~7X zrZt8m;X`yD&UGWjJz7W}k<&D?=etB=&FN5JD*jV1Cj67HedduU{%lYNRfMtInCd0?4WAZX#~l!K2PfpN#;IC0 z9rx*KhTLVGdK1lsIl`au6lz9a2YTO3BPd0cl%{j38xCL#T}WHu0@AdEM*;G6w3OaT ztLS>#L^opeO|*?}#@}1uQU{SKTst`^cCR5Sfit)#!G%jkJ^1-+==#H^xRtU5WUy0}E$%%$pGJWRcx zhpUg_`QxZD-wlpEL8C$2#dH9+5C+B$9im651o+RS!}KWnuEq${x7!C5z0IK8E+jJ`%+Crd>kJsAhLt?u=l z8(OYQM(YVUXQkhM11*?8`o2j|LgvyE*H;WUcWKuhq;G+q3XC`O90TqKW3;q`+)JZR z5I#eEYQ9C^ewo(cYSDKr`tBM3rRa!P5dTUnu$$SU@57B^V0MH>KOl5JeS%6Y`r(Kd zNMXte8iTG^;I5s*^PaZgu5wdLG4(|%eg(u>y(YP%MgZoEaR1MM8c7A_f+Bnvfvcnk zOK}HB$eL8PsE01vi>8SuI_~nRTByPVF%T29rS%i~DL@H>OhA{OpP|R(Fh9q5obmt? zmVlZCg~9BUEk;Bup0sZgj9xop!Wi>M;8)`3GW^^DOCMR+LrZp2ncHkSN*6ENL#Nc0 zT~hQIH6Ns<%k&$#`(q?l#h2Z|L=-0R|g~6HDwrt<6h3`Wm(GmlWY(?hYH zWNDnR`UXHzK zv*66Xz}bJ%fArnx%Lds+@H#5vRyu{-=xmPBB!q<-yooO4P6VYcTFWWgz}=MMt#lo4 zqj&Lk`Uo8F-Mj%%zrpJM- zE(APRioQS4AAzI1{S*BeIwY;Xpe2?bKxq53WX5Ryjh=`7OY86S4|t9;Jd2~X;po5V zy6_8e*8u~e`cV?sTtXY56XLGrE3Szc`A;g%YMvSIx#7hWJVBG-U|*K&cP*gbjLfx} zOJAYsG)%mrMgO+wKidv5G+jqhav&7w6L}< z80PFqc%PeF>!%V}8e3e!6TrI(TrGE3h+D9UB?fH150-X6ENw3=?Xy5_A1n=F0ej4) z{0LpihiNlEN?rVUx(12YJNYO+)q5N%$`|0Jzex9?@3Z`MdX%4_@AEPG89zn8;_uR5 z`FpJJshWk)ZYuCS%IUaI;Agb5Y(Rz z3Q3BJ;r;)nRVheU()YBYS+p7N#I|f`yjawe@V8zBH{*{%heXk4lWi>OB^qxm>LtV= zKC`rJnZvl#mU- zNj!}09H(LYJCJrL!DsZPS;R}T zh?lz26kxPO{YEeEB(C;GBMda~Wk-K#6cs?@mBFK-bLYXJQ3^EhZ3z&BT=_9@70OEY z^maVUxPCW{(k9)Nbvyg(b1o+!JN#*l@I0=|3GA0<&ff&(@y%I(V?_exLG1+sQVUV# z!Ey_``xNR1W2GIjp-Ho($fIPpuQ$%2>{BFkWIs^eL2uX9wGW_nCRH}$urEejA{C&K zs+cNNkj_*Vou$I~UolGP0yUf#V577U8;uqcHn%o$6HDp(^R^>NI+X**=mKmZB@Py&cC$iTZIITZ)+API z0rMJdwK;_~9VvPiIa>Wi@Y8J)Rg_KltsY@-O8`UC6b}`+dme8HJ->)v#(!E+DEw=NXJKCF- z?p{~Ac#GnI&Wq3*ZSo?t%5`2;hRwft>>w&~Tea*hR293l>}^_&zmgh+C`OC5?8BhT zct3P5Aa(TrGduddvY18A$3 zLZOnBdUnLta^H%w%k4n*c373%{c>Lht6mPPUIDAV6jr^8&P7?{e6^b9sWmiTT~3#x z#Ia7jk>V%-ZBpxLt7@a0)CPLDYNy+Aze~ln+*g9zU`JN&yIi@CM5ZkAR45T8v^}iul;i zmEw^>_~)%TDZbAB8R^-!*Udk7LXrtcG6_j`L6T|s=M4OFH~jM!_~-5L&sW1gUkm?y z9sKk4@Xt5GKi>>1ejEJr&G65+oYX%@V59#F|2#b>(|-N4Hqima8sbw?BsAv+mAK2F zz=O11k|+F{K76`y|^jS zg|cLabRhDR7UDC!@J_8zlwtrb)qq744$$?zf!pL14cEZUDVNDzF$)>1RInpgdZsN)AD|n0uUbY{(I~yDsVv$qNjVvX_)O2a<#TA# z0lKj_xG`iGol<~9V(2~&jj;JFJ{vurJ^z5oCK diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$1.class deleted file mode 100644 index 43225d9dc3478223cfedf20b66b4ebacdaa49959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1374 zcmcIk&2G~`5dJp5Bp4dfmX`8Yz=bqOHRVbbfl5G;LRxUhwOTu)WFu!?*-n7B0wh4< zzyt75h}k$25f?7T*6!@g&U`aFGrK>3eg6UAF&<15^kp!Rkuv;J zSTKhausWJUI}T(V6SJq8hGie}nJsfLzq9@V2p^tv3V94mTKgBInWx zq#ijZ-h}*w#T8eLv`l6ZXCzor=#L|k!$pdY{zE)1c3pMDS>)3TWva3FuRb|2!E+tk z+7H55>Cr1n#^JDxdlt&LV4(ur!XEBhxPlGt(kz?QJ`~velf9MXaMNb$C~bmFGcJ&C zn47Tf_S>gtCvQ40JH2P!v-Y6f>kGJ<`mz_@hFyL*O8lgVTFn%PS9u;4R3UJYS1siD z2dd47Um%*_ko&}34i?WP)&aI~iRY`S7A~X49P2O8_^y~5FR>1o8jHebQhUy}n@d|~X1s7HD8^j I>rc0T11vRz2><{9 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$2.class deleted file mode 100644 index db3364f0b24ec7447f157a070a4a6adb9cc9e566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1705 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 Aod5s; diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmCodeLock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmCodeLock.class deleted file mode 100644 index d0a0a949749336e7e19cac468a1bea7af1310dec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2215 zcmbtUTT>iW5dO~WW!PbXa7iKoG{g{KS(u0x%#2qp38n}o1VtyalkReEIkj@UJ4w6g333S&7EF|Cr5xAK;`vQahz%Pr=;EfVx?({`6F zw_ux_wzXmVA@NL5mW!Bkm2?~CDpp~2%32H4hP9j3(M~jl5KXi%#1<2a*TsB0uqz6Y zK0zE|A<5ZWtHqX>lQr_z=v;T@hFU#k!6OSg9x%s5H7=QTUE7~5SwSGFZ}pvs$}0{R z!)&7hCzh`!zWFwZbbO{@%z5j6!M^86`A;3I*wBi#VI|RpbP^rtRJb4xvt+qTX0}wa zm#k98Us^BQZsqP)!CtF4o|{A)PABmW+LJgZVi+GLF(4_<;H-|>B<9ec#GnXM+MdF0VFNq4kK&{Ic(D zR^LWq!wH;9)(u>A^Yu4FLkn6Fqh!_jYtf|0)GgA0P_qZ2pZ%k*gJL`1rF@UpGsZ`$ zhf{k{smLxgm41pQHTV=pdVg^L3F?1C}6sFQq`Nd_dYH82?}Brt^}(Vt^{oa7r8zI?SRRmI(l?m z($UKg(0QVdH&pTe!Pp36AEut8?pqkCpP_FM_me z7Yk&Z-v1tFQ`|PbgC5;Rlw~l&GfZ5iID~qxudvY9Sj3M=`#LGzK$!b&$fF|#)mLbDPiA|7ntm8TA|D9xxEu9aOun7`) z$Rfdp3JXnMZY^DfR*X^IOc&1$?2kppyE=bF+d$XQ)oAK;bPvgIB5M2K&!d@X31?w} z6R^k@FA)Fdhu5_s&VqJ^5#6l<4$} z9R@_%;ARF@C-NMN1bFm*MSp-sRJa@P(XSuUV8X+`wR38(Gm8{bhxS0n4VkJ@ni>cB PDz(Aw5&k!>#1sDjL?W$& diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods$InnerHelper.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods$InnerHelper.class deleted file mode 100644 index fab7d3912de33d3c5ae8ae7aff12200b614086f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1319 zcmb_cT~8B16g@+MwM&(6#BW4YDCi^_Uo2@tFo>pNv`S)pFtginyJUBk%}BtJ99tg+|zS!=jX5QKL9+yJr@JG?&1b!T-?O0gEtxrqH3W51sv4J4_jdo+%~ux{S7^ zW~f+eH4`2W;8uOJjej&4V z(n{yLfNO*t$m}@C@NT}bC3XalgbKK=SL<>#Gaag+_P)zi$_>tJ(XBh1{&fvzD-G+#*E*%bsB^k!Ig{EjGwJo`#wb&yGd$}-7{i*BT z_K~&|Co3;k>qKm_2c+&8c1CRGUt`Enrhz}AQ17O2 z0_;pZdwi-ur~VJ=!sw^#!#sWTQhUL0j;x2YGFk_!-@v}waGAbcN&?2{&^YaZN|A&i zTp;T+hA~1J2B3u!y>z0wxO9NN1C+jyRf0how5O&m!c38cQ9?D3OUM&8?qU*Cgm#g< kW;L-x`1!)=6{PCHB8II2tyx=&iV2)!(!92$W1&bVCDp=yUEaR1o*Alvx zZJW7E%-UhD1XV;C%k(_vNf??navQmY!cu;I!`RtRc{}?#R^M_q^Y$Ej=eSJ5aMp1v zx>MR_<$8mabknQpWv5niY)|)V)2F`Y4Xf|E_NgU>E!Sy~n!%IRWUDr5Nu6AfF)gbl z`HZrbqBF``s`>((iovBStiEE_NKb!&%8LncP83N{rps2s8fn{DTO&E#LAoiplg)vn0Ms>osG5apMv$YWK-RSX^8 z(;usfYyT3hLH4va5h;Fn6~nwd9?;ImqvASG_Xg5!gH@!CBU}65IF9r+s2Jg-+%!d;N?Zcl63uCofiz2QP} zb%CZHuu#}a4ytsB1052Iqep523E$&%@Kf;LGj{f6k4W@)k?B7cMUsC6^pxbD3nViI zl6wNlD1qdOKpMY5n!7-nHz8SoG29}&O~D!>l!KJiB&{Q%d_$-h(!xeDtaTd2&QFLK z#fVsCo>2Ibh=^6zWaA5z&xlfMEaG>{!A`+;5vw-Yb4S?o#KwJA?9$#=G$)AeP8{L+ z{z8N=ig$`~jmmpEeI-;9J|Hd-(c2Wk3H}0cIMH@d3u%`^)Fz@nP1ceJQU6CVvOBbn wkO?3Y()8gLF@Xj>eZV|^(AE8gb^HdCVyK}5cd4!e;}|52(Vz#CvY1t<@&-T(jq diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTryCatchBlock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTryCatchBlock.class deleted file mode 100644 index 381f86333c237a0526758d044976854a2a7be47f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmbtRO-~y!5PjZk*b)K(nii4*

    L{fzlHQ@gaIz(E})4>)lw%hTS#tngBQcQV&t3 z9{L0LQHZfyi9^K&4t_J^8P9v;xqtZm2f!9S)(~KB9AlWb(6Z3B@FBoLfJKICX@oWm ztw`w}SMfk5=32&FlsS(?EVCVkiY&SeL0=TzOlk(-++IqC*=Qh!f@h-W@l&JIqDQr3 zyJ?Y{J%%4E&vtx4;yyLm58h(bZX;&m%izzCBtEq zsGN%|jYTZ@V3_lg=8Dw~Pn4Ei7Bpre`Lz^7soggml=+#yJrXAAA7(1Kpebvo>Pjc_ zTWZ;+kB71_=kCF0E3}R&EY?B~ELh*?X+ZZy4-%x))i3G9+x3i7km z8{>sPz#nBiGl^i-Cho;PGiT1%yl1}u`1%dNE}mMrTEI12&tnxgEZo%G%HtMp>s7_V z9nGqRn&y2A+nNt7JY?W?_f6M3I&5~`!y|?bCr)}I_WLRrPn9oZIuzb)r1lt!bIt@6IJ+^f~+tS>DQgu5`GTC#J_o~x=SKoJ<46Acv!>PM2L+*Jn2%~WPf?>H@d&`h% z#K(#%I$@*^PKUlqJn0X}QgGwbBv3Cyy;-TJL)}}t)0Y#;P|*-UJQQ*e`qG!8KN*Tt zM#p~qL8POZa7Qx>I~)R!IEpAy&n9Ldqn>D+OLLS_vhbLbuunK_?Nt4r#FdU3Q~&1A zTT!Hv#z3a2N;%ealC?!8?<9$*`a&ER^igqfWMVijYV)(Rt`fwF5-K{8QJ}S8UGFUw|)|xSFSDin~?$yp7etF^BipHv^5}J~JHVoyz@?>eo$k5x&VpGdZ zt4%GdAt`D|q8O3_hIC~jJqE1f5^;le?}_@`wb>Ueea5n#F+BGPS+lV0oMGNB7@oJe q;mSvfVpJ8lOkIHb$(c?{rjsq2YmLUTM5mzt72G2hOm&94$o~Ym{lwG& diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/CallAsmCodeLock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/CallAsmCodeLock.class deleted file mode 100644 index 9bd70eb864d5d0745965eaef7cf9644660cf4536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmbtRO-sW-5Ph4bO^wyY`T=@S!HZRK#cM?gMWGPvL1`&HZIZ>N=A$HO>fiDti1-8i zQQ{=^Ab6>`usidH+4tTsAD^%90M4%O+!P&Iz#2c3%&G`;pEVY;s+ktW9g(b zX>*YT+=+r93KMR+ndeB;6_ZrPt!9rwZAY$Ts9RnrZ>NDR<9lKIRB2d|BmAC-y&QiR z)pX<~45medT=674uYjBXhfiW+5odKHR$N5|zieNd`)2ddHU7P(QGgBK{z)S{qDuU@q8 bU>65iBD^*KPW5F%M1&evh@4@Skb?RbEw`*p diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$1.class deleted file mode 100644 index 2581278571aed39b7f06660beab3e0c86bf54013..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2127 zcmbtVTUQ%Z6#foLnI=vPR!bFI#2PeE?Es~=mO>k7YNLTr6RCK^lgS|&n9O9&452*v z=9_Q&L+olJ%Lkub-tU)R;+xC8XOdO0yksS7<=bcPvuEGWIp6&I`162r?0g7Zljm}GW}SJS+@z%aw?MOJx*;S$R(C-5q+BruDs%+4{)GhAc1&XCct zpkYx%R-iwqS$=9t!)pS1&T*8tXiMK$zQDD->DCQtTV+|6#%8l__|mDA-MfbAddg5v zO**DBc9d)?&yarI$TpP|+zI*A)GQglYB^RgFR+mA(bo8?Kzz}yD1m{z<*4QDdRciT zS++@XBJY~gUX`B3d|Mdj!~`ysTr| zu5UTjB^A`%ijG?t)A2M;>o~)!9K-7jZy>K>Nyjn@I#zI7$D1hfs-)vBjObY9jXQW- z#~Q;s7}M~sj`#4sh7WYC<3k-1WgRA)t1u{r4UACxdg@+kin8O33|l%?qfp*dW}u-e zaHSi&+%oFUR%*c}6gbkRbKMwuWV8g1xlUBxtP?1YM%Q*_CF4~yo+oz&VwLSiXSOE= z=6V?dn&a6XqNRzErm1{7WRn!i?Ve7;?0EiRPl|y@Q%2#%8{2+O;AHyI&2VDd{-@dh z^&b7_$Xz$7+xTYeRvURqH%h=$MFoUhN&RKMEN%q5o*N^-0V;M E2U);IumAu6 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$2.class deleted file mode 100644 index 3594c4eb390da55e6c5ceca3fbae0fe1bc866817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1890 zcmbtV+foxj5IqBdHDM&&MMObdH3VTH3L*hDgdk|R848OhYO+khLb99MU821COHzQ8 z4}O3jW!bX{B?>R8q$)GrbLl?aeYWS~cn1)yc!-y+& zL`lz-G#bVjj4;MAq11#Lo@;oaVN%0OhDccybf;uGyOMz|Gc^1AmZwi>c*Ve%ZCkqO zg77@)F}%r|PSFqrD=+fGI4BnlPuRP8=Zj%Ft~8{*FKkm9pQR{E*AQOO$dsk+e+qPc zB1y()E!*;6Go)j6+FBmoVhE)J*wL(I%hjV|Ub>qiU!XubvW_VVTf()JUR?~S$QV-f zdDasYN2rpo#+X78$vH=^DHko}x$R2GV+W!v7@`^5EI6KJ@2yCG-`VAuL6V~rJsj=m z;JAYUj#>0_%;B|$Hym$~;+RL8V*wc@B{eK^yu*@)Wsdjwz>&oY$12vSE_IbfPY`N_ z)F=ph&sfVJNYmG_&M;GpT~!Lo`k_8wppl`eI?vT&Yl^Gr*q%{2OCY#qmz_hI z^M!AjM5EXZmjb*utp8{1Y9S_7A?E8U1a(bi@kK4Axcm|^NKZr*^mU`5txdHWfM)7D z^o%sn{|@x#z)S;;{9i6h<``px8PtOjm>lrtOfT-?g=hO(U1G2(WSs7 zy&iagfvUl;WR7lNK7LB}PSJ3IP*r57Xu3f2IkbNkZk;2n7ETa3LCZO~QZ8`&FNQus z0oIBZM!s1aMp-*%SO-$9Gr+|w9;>(-DSQ>?Lk!UzqG#_Bx=HFIWL-3?Uu$Ke1WjSO GIs6AMx(WLL diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$3.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$3.class deleted file mode 100644 index 99780efbc6c4a994e5ea626930f2db394291048d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1781 zcmbtVQB%`E5dMyq#@0g%Qbj~XjM5e*fTBn(Sg=a96`Xc-d}6NQh6dWClY{~@{wWuB7V*Cbdu*8c)_-%yIL2XCq0JcqUkgYQMan1 zDvX_0!|;T?Rdo&w({ZIC?V7MnY3xhUlCB}VhLLYc+kYSE`fP@RKecSjUt(BE_82Sm zjv>72Y)OWTMa!0N_8L{`Rz$TF2Xu_E832cpibbsK z?760VVJYPJsS{7{h?XFFdE2Zzo@H;Bq+fHkI3D3KM;w1!x5EOrxD zRe=(|tFP2)W$5qh*=~aT*DVaumgQM~NgPns`jdr1kZfU^()0AkGczZxNP8 zJusyP=x~}e)|q!8t+2j7*WIHFuD;7qX$nyG&~LC8RBX? zs#b{*#_&9ZaZD(i7Q|!_Q$f67xLFfs%rq?d{I6CasdNbg7+4QIl0oIAtwcla~9@+sCF- z6nx&W40n+s6K^xt#^?@%KV$DphDh#D4h2y($-VsF)y?daM??CODLdrVJc(Gyrs6s4K+ zv`{&AN>rJ+r;NIaCm9ynsWw$Q)kY#D4WaAOq1S1WsC;Nk^QqC?Rk`wRmE=V9dgIrv zo+cZ>(+YUGO<)q+Osm(BcFKj*is~9Xo!{Im>~3fG^4q%%{Y|Q{d{B=fFt4V}~zZ*s_E z+r<7~FjaUBW|Z>fNCJ3|};=S_D8d^$TkJKKl2fkDlJ8RfhH*G)EF+7hs9O z3-}UW(DB)G?58n6j$pI6N9#WCa0COmPdhr~g`}>JK@2ql9#c3vfmGt0;+?~H34deB z&e8c5flCDcG2Cc)oFR0E@Flvg!28fi;PdEW3m9aJ7-vhEW6K^HUWaLr>A*07`tX2q c2mJJ%dW74w8X!77G^-!4PjoBONCrZ`04PNB+yDRo diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$5.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$5.class deleted file mode 100644 index da6152c127f127b7891c4f35ac1a3dd5ee02acbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2242 zcmbtWds7ov6#rckvLxP0q}3`u+UizAd@N9Dtq~Pstg+!?6S3Oq(7T%}EN<>H*(Jy~ z@?RZ6#y|W3{ZO5rySoe>lA$um%%0cYd*0`4{{H9VCjgW9Ba1u=8jNXB)Zl6kCvYu? z)3~m|jT|hDYic4(U^0gva8rY+EPljKS=_?U`t5B4B?EU1+-1miglGDjO12qBYHOk+ zEKjHvs~)ypwNhdj(g&1i$%Jgmz+uRQt8QRU7`V^CtBS6dJrM*lV7OOv{FWs=*A}+0 z);cXK5UOeWuPw)KOG~O%p&V&#O3{&RO9U;e(vd2B7V+i;natdAl^c?CuM2(Z>JI30 zBx6eq>9XIXkcVrolJgraTecg*_DC{P^Bv(WiMFfxM3~m;V3_I8U2}?pPdky}R6%=@ ztNR;mM?Q45<@|s0bVFB)+^Z2XoD5g}CdUkBIljgy$Cvnu?sG&qY(9A!M< zsNkW2UpOA2s+q?ezoKSfj$w| zbV36!7;Ya$udWM~;FUS+5o8!l@bpoXbafr2vf~DB7^ktS0>w}&R6nO%y3f4Or8_1Z zM+P(_6XW9yv;B7RSe061eIr;URH$kLHxCVXBXm8h9uHnT%TGx{JvtovkEwT}ah;FG z`f{N=gt2ZB!^vI;$&+{)P?XdC^gs1}>Cli4-yAe7dl}aWf6`aNOFiS?Gcc(Q-0#x> z)$`U-!<`9QjjeUPWcf^eZn^P%v9erWq{%#8^V=(yAC1(ew4<%6Pf|{gG+cTv$VfZ| zWX9BH<|>Ux3lEm->sw~9z7@Y)P-WqHv+^aabcTyP%u{SFUj>iDl@Jrto! zUy$iSk4uryJ>&=V>kgTp@eR?ZB0ZyI`8(q1 zzTVFCp0b8ZiS9Q@=^L<%?@2X1yU6UoNVtJr4DBGBaH)MVy-%|D$nE0TK><&+yu%mo zaC`^D`#xU85c&8Qjx&LC%*GYwV3IXaW)cnd5`wKn{`1(g#Qzjb@^b*+<1*ni{h7Fe TGf`A2qT^pa!6TT)y-fCBR(^RJ diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$6.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$6.class deleted file mode 100644 index 2fb3c0c80c68b7af3022667d5fd7b96990d1bbbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1777 zcmbtVZBx@g5Ppu9#+E3h3L?HCMlD4NARHbN~&WD9xHgFKxc^f71Pru6-+XydD|9l*5aNgJcgx$;Z${QnPpz)`hKIT zd)(eFJ0Eq!afL4I3bzfR9}3`-85NoDH zj{i~d_&#rNN-t*{mgAZB-n#HB&aO%$daB|I`cxz^q+%M+6wIi2j#(8iFsCAoc_}R@ zSX8luWd#`(E6A!?MULjs(HOKDN>iq$Tio8$H_H3M@D;2v%(W9&_MX~&psiT+Waw_K z3+)6s#}R5*!}LtQ*{Zzl*$nAqzHpXr(RZnp>Ho33m*Z*jd4ge~lfl!_(;XB>Ea8SB zJo>OED3v!Iu|GX}zIftft?pGA`jh831D3Y%rzHMzhxmDdOXg+R*>;F-BPj><~9*S~sd`M5~d|SMflp>HOfe1#EFzdO}tBuv2V(m!t zYDdkz4Li#%>#gwXE|F~H0(h#e>e!y%^ru8r({4BiqUdwqG>B2j3tkFxzQF!ZFxkB6 zcAEG5d&4lD?kX5AgT>?W7@r&G|6#kZ$#+E3h3L@SRtCpgqAPQ1$r4;Q<5wsl~{KIU+N&{)aBx#XHaK_8C z$RIlY@Bw@%$Fpf2FYv=oGn4E&XHU*|E?+j^e|-H0U>uLb=)&~~R1AjEjT;dR;bw%S zxRh>5>2?@*kO*TKNvVz~xU1lv0*xW$RSY*ireKUg&0CgmvL<(3;WEq@bi1l?(3uDN%2OOWIGJ?7f97xD4B1OCA z=wjKB$k9J49^K(}PU+<=-Lzf9+FlV}#okhBME6ykLyw9W22@Pofr5uBCNZVr5vEn7 zF(ai}1#>Fqv7jKMVi8#tOUTh2+8RTAlG2o^X(qR}wbk;D&^-mq4AZT|mA$7n@5UER zdNOo2*V$HroZtwxt8Tc4*JxGVaxI2*B47BOZ_#t8mFfSnyp-c<@HxdW+s@!==;<~J zBbIPo7cPBRDN5y8TkKB{pDdm@xmR;5484hyn?6gM_~R0Pp-uce!6ouC>{P2w$+*?h z!Ja%#)J$<@v$V06+bphaF!UE}XIryU>MQl$0Wn27w4BE@4)3r6;RP zo5j6@xVv}I*ju%-+%%sHujUZRhE9Q}+N!qYY7Ku%L^Z6sy(@|y_Y9pFl{n=kKj%~I z{{)lGn`otZzrHsN(&?^(;Vf7*DvuF5^gHN|;XGL{kTgfSv_z64pTLrz(ecsu>7{3g ze8AqIkL13F7cQcoH1hYOG4i;Cfo7~%2*@{(N*+-tx{na}g5WVa|1yM*p-96a&Kx3q zjL2`q7=ncO7Cr18hS+=h$9(Y7WepU!i5|dZ(mHSjS7{B>Pw5(>Bn=RLH?8vOYAjUw IC{m&DPh24P9RL6T diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$8.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$8.class deleted file mode 100644 index a2c55400f112d5d0e0ad5b81ae4f871e227a3c61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1995 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 Jx1}{${WHjaKyUy6 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.class deleted file mode 100644 index 3108e02e2cd672c3b05992e0597ba981de3411ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6247 zcmcIod3+RC9skbmW@odRa0CKuX=x~-O_qd(KoJtahBU}xNNf_o5PD2DL$YDB8+SJe zh^Vm?v5IZ2SFv8zidqj^34~(twzb}8J*(EM-naH2#qaOUZrHFBNJ}Lj-h1=r{jTrt zc)!`l|NHP605y1~5XP!BYsrl zj2}zzDIK5I@fjVT)$utUpVwf7<8dq55HnLLE2Y63OZ4NEt>X0pdhtJ6&hv)f9xboE)0bohD=T3AD2-0Zhf17^e$27Ts`8H$UWvARSPamGi`@r5J2I=-aiaUEaQP&6dDvqg#4&`%%dRi&xybmkwbbTHhO zlTBAvQ!^5=QcMn2)G}quZ|#X#17a0l%yQt&Ea+zzEWD@y9bX}?wv6&+%a&=luHuri zu#z?0wTFDNOqUDO8!nM)K6d8>)QEtrw3WFJtDg^hm<(CwYlL4>1}xf@`=qoOf44%Z z(UurYMy!odsq-^(O4U*cAOoB6A_JRb2+Qzd88*tW4s{0BVvT`XS*?~;6TWKTYxug3 zZy5L{zGYw)UZCUK2EK#u8d#4P8rXnF1K-0FI=*k<2l%0ZAK?iDKbGMqvi+EBKgrlO z@KgMZp`#*M-Hj@Dns~K}sGl2n3coP$OZBT zW_F}GDQc*1YPxwtXSW#{h5yg8Zp13@&Zw3WP`)&P7$-B&-3Zc5s}DeZ$cznIExVYz72#Z} z%n63cjPuh&LqWIIHQ3{eI-6G>gJmyd2-EUMeDrMfrb37VL9CV{bU7J!a#}iIQ%`O zL|PyQD1d7IBjG{PLS}=;jVD%_`!BWpC^kBd{hH0bl1_SyirUwJQ zQOw}@5N3{{WE2HzJxi_KYCT)6HMK5PYgaIM9PT5S$w@mxdB@?p2fF7dJnm6=9;7B7 zv~aA&G>)C{($<;SiMhBDm*XZ}#pY@WZXt3e(Tea#p>CeHcybqd_;(w6@e)$*w5`Go zXyp^_leUJI%c>n)X}zojVYgZd#vZj2^b6E#8{c}>N)Xr8O0f1}JJ&{r+j{yy$4j}> z2=`g+N1=`mO~(!$of_v(9XoYu&t*pg|DWZ_NshRLGUM2rs3QAF3Za`Q-lbG7B4E>( zoWdLzf3_0;3szpG$!=x$9Q)X~-9^Nyj_+O4ncB>>ASuM>y;WnF+k6`HI!+=`>(Q!D z;IjKsBU5cbpy13ZuX~kVs+W52!xe#oQoW|u7w`mpCoumME_Y%30bM(K_NkI9ypLc( zhnt#t+d4c;+BymXo{}raP}Vkvg~I3p@qHQno5UQX82@RSmm+$@^x8g} zJWPM?SJrGIvNep@ZtnO*<8ixs>2I-1_IkK-k!OT!i~gL39f+cjGUZ9^FBtcj{cbnk ziO0&|I*W4nh`VwWeHGKuuOqIJ^)r00Nn4-6Z7F>&T8uDPs)}M{pT|C@xtX&^ha4xcU^X@gU$mrnW0=tO7cb%Dg9DT+I-~D%(yW=*DR*>5x3B zI*sa%fOlNjQm(3*r6B>-tz2J2m4I6b(E*e)_!ls!gE+*WFAoy9+i@)p^ULcFY{Q)d zXT~(*jV}y=M6V76egBW5Ul_I7fwo{-8 z+JA7Zj$y(%!-qZCYh#BHXYrQUT6liwu2VYM2~~iXOUjaXA70@=>=Wa2zEn&c5jV$alwU*kyZo*MD3j>N915g%|Q)}}yASKg)^dXTXy Sm!FH}-Tv2rFW~y?0{;V(ws=SY diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/ReWriteMethod.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/ReWriteMethod.class deleted file mode 100644 index fd7202c4790ff3fb2968a5ced38fa13b7b0e2a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2621 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$ModuleLifeCycleEventListener.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$ModuleLifeCycleEventListener.class deleted file mode 100644 index a9f8bc28ad34629f408a55b5b75311865b32f659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmbtRF;2rk5S$H(O-z7@4vCTi8cw1O1&T!^BqItc=+^cUoprvGd~txUQSbmBg*Xfn z4GBe>-C6BuXSDPF@%jef9OD=}F?I=&voqaDj6K5OYAJR>7+qT{O={SC@r0+7tZ=nr zqjSz#Rm)m=wq@>~RpA;@rK?$6l?Hs{%GStaJ-=qlb7|B!In$4lz7$3}@oDRiJ1{wY zAS8FLZ3>xbBZQ+B{IiOe9Alqwzt-k|vVWb=v|mX0#R~P`_4vz#GHmDSHm{@zUz~2_ q<|m4aO^!qaLNDYEP@k}cIG`T3yE;S^`azicNHDlO4BP~xX!r?&Rjqyi diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.class deleted file mode 100644 index 801aa88c3fdfdc15426eba8de764ad158aaf3df7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmbtS!AiqG5PehA#MY{{H^HL^y}01D9;87*hMtp`8Aj}o^L zZ$S^a%wvY(y*H2f{Mvi~xWp{LL4d;mQ^Lu;N$Z>=wdC+U$@!*XT}8@Pthppi?zF=& zm)5cka6}lk8w6jj*Q`^*%UP6|LdaajGL|B13Sp&AWAi2wQ?e+emMbnrm(ZfNr(N@3 z1M~AIg11y96JGz(NlhV@7NOJpp`7>g)!x|}7(bf2O!!vi&PHco?v9I0Hj;4FCkw)K z%OY~ASK=YgIH?HFeHi~tm$2x?-6rG{2m|+5z`!HyVgxuGV{bdbq^8vj12)6t z2f^PTic=v)=n00^R*#=^C*Wb%k>b>OI~uMtl#l#w$diGj+|7UGHrnlalM0FrKlGC( z!=g2k{>JSIFR53L8T8$#L(QgJekcwGeOJgfcLPG^T9Lbau(~;I>FyDyfm8q^CuT(#?<}5Im;cYnJl0u1FXb ztm;iHC#-5(Z8h3EzCr&&poVGsPtgk4lvu+Iw&??wvLei4fjlb5B4G@7uf^_N#qM7bSk_5ptWboW zDb{itFUezsmF%z3zhmMv+1d1BioZywnpsXhRm~bAYF4(zhg6wa>)0T)fKAM&QMz}q IFsGOQ0;gvXUH||9 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.class deleted file mode 100644 index ffa0e6e4c6ba04c8c21ce49dc63b586a8b611342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmcIjO-sW-5S^_xF|}%~UmzX}+DjKaHl+uPiVzWOQ9N$aF{CD&vYQ0Of9Am-;Exig ztskwHVg(Po%bVGm_xA1X%j?rK035=O2_+NOP1rDDi$U=k#oZ<9I8`1JJd+YtD->Fz zW?+bZA7z(8eBks%CU_{M&)bO#q;ET39B~l_u5bnKWf9jxcHQ`%d$B?u2`PM3{55BMHahj6dz$~KsnO}!O}k1nnV>L=Gm^1C zjquBscj?tD2DM)cCWb*lp*_5SlOQCX-Kn0{222dAPAJwi(>a(b5TSvGw4E zc$}e3j#6D2iJgo)fliPf5`(?j>C-u=XT2c?jX63^ilsvs3>f5SEYKgxX)4%ev`uoIo&*-ZnyU9>;>u9$R9)yb`;B8|Y_>eGu>$iy W;7>9X5C~dz&}}C`d-Ylm5Iz9w4pnFX diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/AffectStatistic.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/AffectStatistic.class deleted file mode 100644 index 7f27c093553a83804d4b66e18ef7beb93441bc94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2984 zcmbVO*>V#{6g^{08X=Dt8DqyR2Er1rC?O;UWJthl4&I1Z0$H4vG+1LsGeR0UK)xhj zke56psl=2+RVpue$*1HKQkCU&_edVg!lWpdThn)LpL6ck(jWi)@+*MT_&S9{xNhP` z3LUt<2L~}Hmyb-`Od%mH^H@l6S(MwQB$nmpExCMbB9}rBu6N-!?sVZU?#bm76ZeyN zAdR1<2=$pyLwyXU0V9*{ep1simD^`p)nSeoSK2`e8DeggzMx*US!tR z%bA++ih2J@rr=lYOj&qh)vjioa>dPDQW53?5jeHLDNtFOhb#5K)}l23h0#b9DjoB_ zDB9I*#2f}Uw$o%F;VO3nLy@;p90T1lr^>V_$|^vWjgb8nz8Z%)eu zH43Hcrt)QAa(Cir4rNpAYeCUXXkcu2m}WL5#w$9a;oCM2dA_$r1G{#2_Gl2gi5eVP ziI;Y~z^;12jkM6x>mt5Xb*wP!@dDs%&T%%&YLm+O^=iSs=E$)eXql%|vWYDm!*NR7 zx;1WyT8TG@g%KRK@Fos(GFsdHa@}z`VkRD1SVhT#gEb3};F5o(up%GJ7CiWkvnn6F zC?46x5TA`{p@PTkP777kECi@?7Fww!Vu^_B_{zdKCgk$Ag(rAw;T+Ce$YRFAGt3$| z_u5y>Hr}QD8ZXvx>YFzyueGfl&9R;$@T&$UcI8xIYrMHD9NMJgvA4Vet1-3vMY#PW zufC*Hw7tLyo^nQ_y`#~yvgip>sn}l8z`@bEomX90GeS*8&%g9)-11KbzV>1djqU_i z;+hE=Y$8i}HhSrWBH`-yJR2W(MKZMGwZ(Xi;E$Uxdg%CiZ+z2vgnhQm-4*{tun zteoR}*)d5_bDr5a%5Tm?{MPP3zwBrjIHGn(xo2}n_DMc-7`UFG#{xR}1RNND4rBZU zI_^J5=g)|3J;r}fKqtBO&>2W0h5__q2yby`>Ejs1nDS%qhR_vyOaGAy+i{k=LR(f9Lr1BIZAq3mTaLkwg;r5~bAG9A%qAro;ii7CZCf>X#a z^bR>RTxDQ?Ql-ROet{mc_byIuqR+tj*l=tUX#?M2T0Zp~_zio{$ES9R9H7AAxK_D| zeI2;>?Z3ZINxd;hy(2KW9!HXVC;4}pDzEbMCNr=|ZBp|Y#A!K!cc?GU{c= zPadY~ByQkcK6UaGFi4B^Kh4rM-W}z;_h{`w$KU8P@xF=azi=Te^;zbES4Eip9961n zjsL`IPE0<>pblcIobqQKFpWN(jU+hTl$dTxOos{PR|IBwN+#Hj5X2S1&?eqsmLx$Z zqXsm=WfIK3l0fG`My@+59Y%hHmJY^f;37TP)8y~9XA)G3NPQMl*Ei&m^#3hQj%uw{?oZ+XOoRm!PCJq?*PDz!4 dC)AqIA2Dzy{|q-p7f6cs1QZ8{~HsWX$(x`2rL zzW)k8)N>S2&(U-I=#NsLJ4ustI_aq=C-0rRJnwSv`#$&n{m*ZI0O-RHQ9O>9HlrKY zqnO4GDPET16)9ega^j}^^2KZN%a9^1MMlnMr4X{~iy8UFv1#O@n1$JbIowi_S5b(- zilPIyv^XEZ>rpsxqwr9aVnN022o_Z=sdz)hn+h5;GdTrEk{P?88+kKrqz!#;p`g2l zl}+1=dd7ByK1eZWTQg>^=!i24Hk~ys)9Y8D$NvwoXG%fSpq&*8T9c+FQpG}AI1@%X z&ylvIoiXxLhGWWpd9cZwHC+Yg*0)kHEF&iz-7L)K^$TLgDCWJAy9sN?roUQFcqyYG z+<7BIQ|EoVbS~;##xoVi+sd$@y$}b`lmL;6Qyy3cnjvObl-cA|w zrY`L{1;aCKYrj-Lty@iZ$dVyVTCOoem5uS9>5{Qac7gqEC9}o6NSf(U!<$vm!J+Xb z*AoRQsh!wWnHY8K1v4w03Z|V?ldfZ_7!)B7KG)E+IF5tLmidw z6|ppIT7DP_1crk1&mWTJO8aAy&HZMkn`^ZIHE4RxBs2`J%_{6-MEVU(t71-BdSj7oCi_Xv(VU zSW^ziWaeu)fV&!=#C{d;XgGqS8t$P_!wHiuISPNuG;My}nQ8X6lFL9GB&NWOUDPn~jO4O#{#JZMAOFS^0niiMjT~aD41uaycuw2iu zBrW%?L#}=RWi?d|tchbAF*(_7CfRm2{Ye+2Xr&L2`E8eU7oCu87s*++CGQT>FW@b%y2JJNv4d?4cS*VTxc)x& zvF&0jX}FshNy;M_^*111_Bu){S20G9rT>iWU#e(OF|J|)ii$};o(4>DwgK1h6x%3Q K>$H3PeCL0XWHHnL diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$1.class deleted file mode 100644 index b9845f24fa74dcfd58307492322ab004a9495aa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1114 zcmb_b+iuf95Ivilli<=23cWy~P}3$9YN!M+RERVe6p@QWN|5N&#@Qqe8@qDs0KdZv z&wzvwLj3?f3NhHrY)3SLQAc=(yd&u* zTXQWg+uXAio?R}qd~UraMIk2b4C$5|c$TQxDrvnWdOVPRk#tSv)TiQhhkU|`rtDbK z9otU7F8qPp)nI7Y(vd@6$2sUaZevHs9o%JDQz@q8PTy>}t-u;oY$3a4&vQK;yXu*# z%suQdl&C@GtU)F<$ecCER1Gp`4KnS~u{8gr(74Z_R~<)qMajowF=oij6*N0TVfhRP zXD8A?OsA{!k3Slp{n^BX%RmW!n#&*6PNnd#l^@Yq)S877_4WT$(_F7>J6wiCM^l)1 z(U{gx6pDw{c9|hwdER_Qe*Y}$GaIy9Y1%cGSy9uZA|$bZ^W+x^y+@QHpz;;$!e~1D~^z%2*0tU7{BthGnuh>0~K0MIMAUyHL@@)OaC?(NJq*(>r5kmys?mJI(SV7rufI zW1^{g;RE;zCi*7EGfPv%1Vd78=FB;B_M7wb&Drn2zkUO-iMu9rT#nIl#e{*YCNj7- zkL$Q$AZs9JpunJa_uWpW$WX02vTbqCwYkl$R=;g^xZkklz;a|DtTy*~Qv{aVKJcun zc+GoWw?YToveEOz_V9Fz@b0_5+kL?BI6Di#+#W-;A{&BXvF`ffS+8x2V3*q-S(fY4 z;ocq(T%{iwqbebW^b_9~!7#d~Jg7_FsBq7-x$}l09v)Ua-suSPeKmtfGn4OARgu1m zfMF?HZ}C32Txr!@Pi(3D678^t6s0mTER4G_n2!dIIOw|4?-;mcV1wcPOsYGJyh~vY z+JGpe4N45P*?>~kFJv!p#IPo7lPI^L${EKz;&H@as-0z^7)J@425!euMvCF($+`WX z1~VkXrh43OT03@2I9&sG7DQ#2-Pg0wPe8c8!>_yjF~h{y-hG%V1nlMmPrEYe>2 zlNXX$A<1wWDe_VXwIhUu{6}b?5iNYdDGehOQ{l6pNU&ca(yG!4e~6@Zt2jf5XUQ5R zc`gZx?>y}kdX>B*B=vmZ5Nw3{cWmoJk7Gm~7bsE{uZ}fb4CA{*nuc{OlT4GpPCuz7 Q($b_OIY$-BUzn=Gf&U?=O^v`!c062v8 z1cq=VPCrKzh+{T^EROZ#I8MmX+w$j~7~a)zGJzcCq|B)V=5bn1&-7yfXQj-!e&n$j z!+ANmpkYbF`wY?gs#Qx*G0f#nw_pciF9pFsn!*!&4 zhOb8RYkZv>Hh0QKq3&5uIoq}3$CC|=g;y;@foUmOt}$=fB3Q$(nkiA*j0y@}*s)duGzvA=6_fAf` zL=dsPf0lbP4-C7N&30bMNta6nnBiEU?H#0xd=~0Np+#P8aV>GG zX^Lvya-EuniyAI5e9;ryZy)B4&SHAnuWzVHXFJrKW|;4dQHDgpZFr_oY2P2z3nnGo zb?n1)I`-mOIl8Rj107eetl_GTYq+lCLwuy;V|>EUTv*KKPR^!O)l%H{1TWoA`Q$B4 zq^z<--Nv7$1SD=^>Uz?Poq06md`%9MdVF(4(5g88d=jo zkr!d=C_!jg(NV^#4hw4tbGQKN3z1~m&}*e*XA?FDLwrt8$H ziPp}E+YEcVuLi}y?ATR8Sr$Zwx$fOoLmk_`f?IXyHqJv5=anAebiJ}svsY%;jJ#W> z=K(>T+_orBM8*&&l!`zM2S$UDJ=XnWq|~}hhDfKwwf1!~uxW`wBbD>KLRZBzk7+!* zqhuh8(jnkmOOXe zqBlb4VK?)C^eF4H2h&@J!QBFP7i?9yKwfuMUn#XO`pqU(1^v6PoxZ~|eLwajeO=z# zZ@8em1V)esws&+}{dNWYhx(@OjVbzwh=Wc5STZTEW%|GfBP4HWS{S3FNJh~%v?sdRkgwu<^ratQP~r&tI403gasGlN`xPVXHymNVW1jti zvoyZI{=^dd3uY*c&qFbM8H)RO&k&{&yop!vD&Zq^E#z{P#%q2y?&1Jm_p^5wqZlJ^ za(5gVMEubN4x$f}H0}fY8%r=~7$McEB&Y<3Xe3K8M<%3dbUbq(Z0q!=l*FSTqBu;& plqHE$3Ev+Z diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.class deleted file mode 100644 index 0998b2aab34a56a2f76eb9469bc15e7b0b4bb73a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21600 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 AkpKVy diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource$1.class deleted file mode 100644 index 71173e5f3a047db2ea32a43c432dd4c1d694ec9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1734 zcmb_dTT|0O6#lliKnYT=;uX;yn_y^OGs`yjYp!7EKI1T{ zO_5K$>Ua!niLm@_)5{JsJS`YbMdy}T{fJ-+ohtjryGtd^a{6mS-84csapEH zc+G2;UkGRfap$?u*PNPb2trRynzrdrF+9&T3N*jYkeG8ybf&g~X^WLwr6}ANyl9c7 zqu?0aTIa4Q*O4(H55}M_*|u;4j)IoY8bl~NLg!Srxwj(re9C7ozsbx%^+s)N|Gv)+XhOinB|{B2YSY*9pJX;*KzUial8e85u)M%{MK5$rmp79k<>q z$bk$Y1&|JlwP?!x_5ZJ)LsDUs^#$9o9M81N%fjDwN(vsTc!Y5ko#;~0jjW0ZOe%P+ zVhYnLT5(QAJ31H!jy3wy_G;Ct!3{%rbO(p&7FHW~W9kHA+Me&$D#G^l zrK4$(e2SkvPSU^q7&^ zM!x`lxtR1SF> S6ZGdah)Xm}6I_}``uzq_hpJrw diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.class deleted file mode 100644 index dd8258d5130b80220ca091f06073ee0a36ff176c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5545 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

    w1r(=NFq2b&EZ`l zj);ey4oPaYd>A$yMBOXxyvidDMjlCI7b2te8#xp6G6v%1-9+-rLRYcO)Mf)eDTr+| zjsD?>Wy`ULoisD>0$uz>ElYE0r06B1DSIeXp|l^BM4}(4);-GBcZnc4%oq^Y3PBT9 zc!_EJU77SnCKQ^G!AiEj&=HZ&565jK{|jkn5p&9DCQ_NKXV{SoM6x7ds&}2XqS3|3 zcd85Wx%fG3Gq+IVJe&>XcRR)lkR%`V7&}(2Xq(gcO$81!#J1~JwXR;c*rk%fsFJxu z37Yr%k=7U3W@MUC%0`kT3LtQlg@K(5oU}&A;kRFtsEp2|^GTx$*(k&>$tq;ePu;QY zr|#JKQ+I6ssXO-n)EygyxR1eKiqgc?i`H)Pk{|cE(LKb`=m3@NB@bRk_mQuCg6Ew* zyM@)e&|oeT6OoJ+P!p=`sj&IocYw7Bsp-$0N2jY}xL^P#-=< zM7F6lM^7E32_6Vn(co3mRfN3-;*9~rV)2$@^m0tu3Vdn7RG&e|(n=-X9DJ$37ZFdi zk2vB*9PuJ_wGvOhUW1k=FX)*NbSwnLjt#Ex1MlgOzZ^4JT{}oeAk4kBduifM^6nBb z2dR>2C(TeIAL)OJCbfHN+uB8i&;T9P*6y3Km%?p>G#N8d@8i11=qh{*)LO)zqA7!P zbQwKMQ2&@RQe=*`$T%dtibT858e)-)h^gi__|<^pG{x6tK)XNehY-hm$W!mD^zEbo z*FDPZo_arso`4-LEvyaFG^oOhr8S))(v*h4)qX}tT3r_oRQd<$MB%!qA*i^{7+*rp zaGr5vIwcnV#~v#`Oq2<>Hb9k4aS@KF}j6+K)3RXXum{v@T+tezeQh%24CZM=x+Xq?kO8b zJIf+;ciD7$u&j!{p(5}ifWw{8?K<%HgX?@1i$RRBS|L!sm9EFvAic-4q0^19!7JQG zUqvhebjzyqF^kqscn3&9>t<*U{6kA%#zTR!;}pzzsTnfeN(n^%ZLsK(=w;Ep9dxac zci`RS_|{AMr!<~p2k0#FYjh`Tbe9Hw@C!49{wcxFD1^q{2PjIx!q4(jqkB}ZrVnWa zIv=1l6dIuqKB;aWQPW4@x)WT>=w7_Mj~;*~l3dP$q=HSsXiY8G4N&b9s*|9vUzDY9 zIY^66d1IjUAU&kM2kBuLTarPLz6mGrDDscm)2(jmu0SeLfRx}KO8{oXsr!dSX*oYk9V6dk?;HgLE zx8Luf#%Luv)$O5qm7qO9^9QKug8D#Z(0(}m0(4j6E!atw@^WE)XfG|Q4Aq9c1JoR? zt3>BLwD@tF&`|C?h0C9*^gV&;zLB2CFX9P*uc^C*BOBoH1QZC;59tW{YnnmNQ9b<_ z>G}m)MK1z7eu8S^MIgdY5lb(F%BzUa*J0*2=r8D3(C63KQh$^FmVN{JZ==V4P=6ag zdVg0D%Dxhg>^V zJZtE^Rb}G7*OtBvhF+eLUHxr7jOphP9A7g|2Xk~ky z=P6n>NUJ69pSg$5D)hTGBHoaj4N{wzqO}G71)*x;UeVf0u(TZo1*rWL4m`69Zt@%^ z{BVp=jjDlsXG*P2c2~%>~sYF-#|prw8QR4XnP_2Sl~2H%xuo@*a1-k&UJ!7we_0# zC{}mTN-gYzYFHvP1o98IOO>Oho(h6fQD@7&V5z_}A?Qg|flNM`PsVCvHbr@k5`2y1 zU#f8guW3TXBMnX080rRsd&Y@qcV0$O|BLkbzxb# zwTxY@DOdSbfxgUwT$Wb7W;<5Kb{ADq|0H2o)-JoUR`->_;n_A!1k4$i%qAUKttzst zwq!Y;DR>o2I(A;>rM0kJv8vK7=DmAX!Sj_>k*=f_Rx3&Adi6vr__`UX3F;diw_Uq7 zArMLoUlRyVdPQp9Lz~oGy^>e{6`6Mkp_dBMxh8#E-Z=u!OH0Zv3fxKTjO~B0YHzx>wa;l8U4dIKQ7~OxvVCRXjzA>HDuI>fSX%Td z(sr#$2E1Wx>ctcc#HO?hA_ZBmGP?U4x#vi?Y+af6y%il~2IFw0Z3f454mMO0INe^U z?M6_%(q$zu)t>ZuN#3wWAm%g+bcQ_lZ7Qdkn(}4M^J!7v);wNaTF>RXE%0A<@$Jgi zWMOeuE(P^u;B)pbwkleZ_3C~>P20Nk2HV%nsP052Ud5n^FCY!%O%zZx@d^&n4Xyf= ziNiQzLZKv(U^?1vd7u&LQ$a+=27>L}mtUnCV0|)BHZc#|z=DZII3_A^sj~?WOD67u zy)^gInw5zvY9{I!6iDd`DsItuAip}`xdk=aO7r!!&{hcS2|N;{`sMtBDv;|kRs?!C z;7?0H;H;LlRa8kbEXCyWB$>FU*9_s2MtSyr`Rj?s&W;Z40H0Mh3No*l8%vcP&=<-8$}!zZts` z$<**ofzh^RZfipV-BjVKYu~M_8M58C#ei&07l+Q8XDwhOx80J*4B4zl6MvH(P0hAL zbpP$No1KY`XG&+K_zPY^O2 z+<`+Qk0C}z9--rBgdQS1@+%^_$A~_J@gN`^;<}s2;4?9dy{@@k%!#^f1qb9+#f!fT*ICaen5iYy+UJ$t*c;p`grh43SW$07kvpV0y*7wwM_@c5F>c})8DMH2x=|kiR4jMT31XBhk(gxoD e3qv|e=lQn-A7FrcoTnb9(6MM2M!8$(`~L+zVU<+? diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.class deleted file mode 100644 index 2cc9f91c1254f219c16db889e59655e2ead7cfd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3526 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleJarLoadCallback.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleJarLoadCallback.class deleted file mode 100644 index d148e38251ba53bccf6716f3e242dc46342dca79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/SandboxClassFileTransformer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/SandboxClassFileTransformer.class deleted file mode 100644 index 2759fe6a8f35011c975cb3c8d78d3b8cfba5ef78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7204 zcmb_h`F|VL5&y0&d1YmNM1+76S_Fh*%d!O_1hA7daT17&6Apz0$EC2AR`LdE<*Zf? zE>P$}FG5>dpoQMFgtpK&9Ci{?p!A?EJ?KI2yR?+ji$9*re)MqwEAdhgC*fw%yfcV*;oYrRiub5^ZxDXmEGD;zW}j$o70vrZ^M28M zKs2|B=7X*H5N;2$xkF6v4C2H1h-mH#;O-zkijS%Ico3h!CslkZNQzIZxF>+msQ7FU z_hSDd+=tHv@OjaHL43bo#REZ{iZ6=hON;Pj90=k;JS3Wj19(IbPOF#+A}Vx`;$Q%W zgvN&hcvO5m62MnfJf@%}o6lqnTR~_zZ)f6#YXE@nqgM z;zh^I#y#TrR+owVZN{WwIm2ebF)SfvRb46igc;9zbn(rVTolu87B*Y@Sk}1QD(Gp0 zy6@tml)Zgw!q{Nj`jm<%6!^qcfi`4uyNy}BP%sJ#;-d|>m2%uYR|tM?*lOuHqcEW- zDJ)o0OQ6)Dr_)B#NjSPgWzD35fx5CKFge}QX^pst7F)-jBUl-m|<@hCX;@c)U!Ku+Z1ze(dUet zG|h!|^_`Di!gV-l)(cEZvURJF&f7V|CX$OYh9f`Gd5cM>XmjU@t_oG<$Kkx5B6;=l z!02FiV@>9OT_|l4pSzSrc7HIc@aUr|qEJ4)a3K;-}V%Aa6zW}*1y_9){>Bfw4ebUU^!ly;7 z@M7t3F_dAOFdR~yHg{!>JFU!j>jqRjsp4xYb})OZ__~U3sQ9LWjjtSAFJy!V26;p6 zEM?#3u5RYvPA<(!b_!N^)xU`v+~Evz$|_}Ak*dUYUM5y>P6Mfp61cckrGn)=tKh7z z?gb_c<^am6%62nV%Ct? zqMO4sq>*7Bn=Kg27pa0tuP%&~@1}?p)_>g%5z~seGC3J2mssLUTBi|Hu}DttHEO1~ zcx6O)BC=d9&G(wwY=kk+iZdeWhuJ;)7)!J2Ts*d$DL}<9HT(*{R`DARzs2tqY?;-` zlTuPG<|-LU+xc8%ET4Cn;`NEhSkZ|TWzE@V$O5!Kt!E2HpN8M#4;n7UB?{Iw1aeN@ z!1A>?F_E_&BjrV=aLPYw_!FK}@n;Qx!SlR=H2f7WX!sjmR4~*)Wh);k-F$_Jyitu* zeT;?9#9(DZbq#A=w~~fi4R3ZQwuW*1ogUaw723nfM3Q9BRB6!{sWi2Qf8d`i{APuf zY!G23WERGS8;ng=c|u*!(eN*EstVm^#d$teDQvB9t4d*&sxe7)&pMH5i83$8_lsNQ zRh677{;eQZ4@_}WSHCM14Avu`e+7%ZWffahVk$WA*oDl^luQxwbfuigT4?sP8%0g( zhWDIMV(zD1nNO=o6)=Ob>JRW@m%O|Wc%4^K5z!N>AE6iMNhfblu>>Wn`z}>*`n(J~ z&|T~K+H>^7yTL!SiA6v_*iiVhg5F~&Fv^@%J7A`0c@~sJsZuwWWY(D>e-@kahi{!uAxf*^C)=4&T0?jTXnB) zTMD`=5ASI;T7h@T*z|LM$`~s$4$i2-Qk!FWC1pi;4eSze)6B=Lg7K~eSkX%v3$jm% zhgI9LyNk!fAdvnm+lfcZ6AVQ+#<*%S2QMAgQb*t=Iy2_r_tL$08%APf>>{-Uj zp2e%|S^2UL@^1@!IE$l|JlEN*z*k`dM_Z}uFgY%Bwc>mmXVg!gUXdel{w6sR2sF!)z`!R* z0tLSu2^?DFNFbq-ht(fjaqgSh3;K`}+mA)PJ%-&zwRD!afTye2Uc2)85-}70c5UQ9^vFATvK-&N1breuhP{FroQN<+J$|O)`-D@vJTuT_-TQtsI#J`BPzyln( zmtTuqyhonfy#)NFGvdv-t_JfWar;y<-(QpY`kFg0uHN~Pn#?!QV)NAwR`2{+P39YM sQw`>}YUZbEFe`W~-d2NIt!93v26Gc#Od#_P46+YW%zC=mhV|k90nL;P&Hw-a diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/CoreServer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/CoreServer.class deleted file mode 100644 index b6f639a51bad99da6c1990d728847a31b3b16ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmaKoKTpFj5XGNM+LZFAh3?GlQcJ9zpaQ8snO4vCHIq$*#Hfe*lkLR?an zp##f1-%q~h=llNo`~q-`ag0%nD}kN~_r_)dCzI(5x3x_V?X$q(VW;W6GR}q=*8=?w zRf*H85V)C4lU!|;v{cC@%i8HTs_wGPQwVc`Xm9j1Nwh1aDom252_SI}^PxHNHq3lK)8!BIyWE=a#Q8iiSQ;rsA#L#_k$hE7zrbkndz_9UKli!k` zHSq*y|2`kut8I$?l)$L{R-0j!=AepI+J;X62EbK(b(M*t%DDO@X=A z{pqp1;Z!ueY!&sQu5Im9w3=?0iq5WP5L>JH;94_I?k*wQtFE*ALg312odr6kE!*<$ z3S1vPt@FsLKz!CIv5ua+Wt&U&O3`#z^kSJS>AYj;6dYsQ z^zN5RuIb-NJOFz777k=KvyQ!PZSeMTk-M|(n&;LlrY+$Qr@G7~Cs}GU);9#k|G(^` z;G|Z93S2r_7y+eZGO|M%Bs{0!xt7hC{fCwN5)4);m`-vd6V+{lcXf@2PN_O-&d}>M zIuAthTiJA-ALM;AL|4JnjqOFf>fb#ZhIvgJU=5bKa6#>2JB}N!c_i-p81V z3m8%{j1d*1(wu~*;tH;+xP>u+bItY&YMZHB<&x=A9DYmOQSl7lsQ4JSsqmB3*piBh zckv$e-HhY6v5If;oxqvq@^W#@G&}{*ReTR!VDcovn(CI-UKHqS0yel5$TU}<)NRkI zm<_2*zoNj@Nuq6;p7%m~D92{t!h9ego3MlNRh^9i`{>jL+2QKE&wQZ;1U& zD~1m_cB74BFXHq~689roXM@wYgv+$(=c5XuQSc$=4L*h38-0b?YqSacL@U7T@OK7% zEHyY4VhPzTJSDTbeH0-s(9A03XKSM!${g`!tjqxtYx_v1Q+w!?dGA5xY!6+nJY0<+X2PtKn8KY9@kg}#h$9E+ zUi$?-=`(GApmz^x!Drtd`v1njKF+>;bb!G%YU-W8{Nq{5hDZ zIlq7$shVyCA7XJi+Q29LQ8dpL+~psgPa6bfeO&IPGryuo%0u|*fxx7+?r|-K`~LwB CN-E0$ diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$1.class deleted file mode 100644 index a40b7ba0d84f651562c5aa39293c24627db4e80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmbtUT~8B16g@+0mo5v`g7}G4t+o_lTSXD8ybw$<#TttwzL?Bzhcb29X?C}W8h?&I zz{Kwde}F&AcxPLM@K6(I(z|!g+&TBoy(jbQ_m7_dZsC3!!szBJG2=+u^w?!1a zu^(%@N^m1at3>la`Z8K!SSg->XLgGrxvH9iVZ0`N@ua)!h+vaD9wFJ9a=Ev~1F6@2 zFsaLDu-1KF1gjnoLqW@j$FCt@q1zapK)E6$rbJQKG}?%``)Y%C`dQ7jeOGiMsr=Bu zJcHR#-M|%(q^@)FNOu<6e2>$G)_m7fq4ZlDBHB?+0}B>xOj#I#Wnol%WmGI0;BAJn zckgpD%!QHabm)kIMGJRu*T9m6dzhke9eY~&3PVQMWP99i*>$Ha+{nN(!_q*`ZX`W> zou({FByUBKf7)x33K-Id{D}kZ&7DBK?oDrbAon13k+{0PBmE}znY(%{`Er>A`|?Ce ztEr%63)hpKQ1n&ZFXEr3|7NS`Z1t083%%{dwp~-LmIz2>8C}6)jI=NPZN*S1)((2u zhyoHo^$^mVSXB#i=0CR}N-ZIV`GM^}I$GrD1xbS%4wlJifzrb=ME_BY5jsxZ3avF_ zmgYW#mA+!=V;qwqo1z$?j?-kPdQr$?l2#NSvoVS|6YpuR783D^A}f6Y`-a2^%=Elu z_LO$MBb7jZ?+Xl_DFK}+izL}+#QB^axh)j%BF<{{`1)DT#__CxbL1px>pUI5K>iRe Y;!=!F<1!}5%MvzBU;Q&t!p&6r540F@S^xk5 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$2.class deleted file mode 100644 index 1b42182855aeee5ed9059bc53268e53710177b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2268 zcmcgt+foxj5IvJb7UC)q@qPo1LL#s+;x*zeqM{Mh;O)h#%`${dExXk025;p*_~NtQ zV3jEP;0O3gR(a`8RugzwRH{r>dU|@MyU+HV>G|^g(`NvAOn0Fh85UU3Mbk-JvsHnilI6`CrejykifPmq z=MCRfh=4xfx>6M#)AuD!$D*M{RVSUN z`e+Nvv!qXv;)9GSIsVj=3w#E?1}a;!?A4VeuiA{OcU65y_$=uI#$C(teA}(wlEIue zqv3*%i@2m?J9g;k!B!o;*rsDA`gL4JQO6aG>$r+*0(}bs>dDW^^bQe>r zZFJtYJL?Gy47PQZa-is{6xu9J;uaeBH-tFK5ZBl9TI7vr)PHky?f6bGzF+k`**?kf zKn}Wa=#8WBmeE^Nr z{u(1SM0%QI^xuhHv}-qM*J+-hu{V2k2_ieRgjjZX3GwU)B;Gc5?;+ViyMeFROLBW7 zLNE5=0L{pg8!fF1%HB_F9Q6(24Ub3JcNFv;V$0a@prv=Px(uzSlh;0?D~@n6&W2?q z!zrm7TdL0LGB&-(<`%Sr=%j?-pyNBi_<;-|JuL)^B8Ev3$3u~5z}B09Lf8k%Cqb4& f1T;;042N-~VH?08_LJ5_wr(2vw*>`^b#(m%amSi} diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.class deleted file mode 100644 index ce3fe053bacac2b6fe7170db613c3ba816d30830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12462 zcmcgy34EMYwLd4@H~I1AuW(rz%P?8$&|@VI!n_~ zihxiR5fDMGf>xvy5tXe;N`z8CQ4kfx4HOjRxjoECDJD2jE1@=Ts( zaJh$1l@_xNp5x)UCe7!0qU$sdd*x=nNG>pVp}~thyx62AJm28cO{(BCEm6n+#rK(gtRO*GeDj3aN!J^zeEUXV|-en@wuw4F+Fi zQX99Jypdbw@g|cu^Tp!rB_3`wc?)m#@TJoBGSPFn9NJCZ#@jvoK7+3?`AWXZ(l9+SE`;Ncw}zS`iRNg;ut*Wi#zJDH0(%zYl-X>i1(I7dAk zGdOPWE|Uhh-=y8V+u#9{uH|cF#P$gI*Lrxb;Ch`LJ|G5P@8KKde4~dy=;52B(aj#- zC+82z;lm#O2$R(u3OSLcpdF1mQG|{^9C6y5$Sxj-IMVHl2D=(|_*&F6ye$fZ0+11Bm zfuOHBB>;J|Cl>2VST|qw;P``qzNq8d;lyGC36pda2;};^x|yo8cO(upg+pC|?s&w3 z(DdGLXFTX!;zYyoh~L?0hiv82itK87bvxh2Owv$0RY21(lPb?SK9yqOC`qU*SRr7p zf{ztTE@jGV3U@k8r7eMw(;DyXa3Wjmjv$_3ApCalQacimd-q{ptS5lcUY@;scYrmt z8wB7{V_nqk#F|6Vm>u$?pZba=$E9tQisH7I?Z0}X-KXqA{(xQJS|GYQ5b9K}ZNqIm z)S+(k{dPQxuBNx_uy@(MpdIS=ZRv@G`^7UrVy@loclu(1a0tG6V4ZTEX&y{d5+Nss zh;m|WVgJ=m?1IkDh!c%Mu+Sey7WiXfMCGE1!wNy7TR|i@>i099HF4umAna>%g3#L3 zV?!>OE?tuB@PbIh9$;F$ePT^1L6El4DjjB;DWmU>Nhs#*j;%*(231;BWFH3^0H}1s zU1G<8HKKxP=>%2;0h}Zi&Ja!O4oDQa(wpsAkAz!lY}#UxK&V>=ravlg+xi?}=IKjb zDn0-^bRYRf$LO3Y_4aEr!&bojkO^NmbLn!xXkR$2h#vPtEhx+0%xaZit%MHFoPcWEU4F0H? z6AVY4q+2C2QtQ)*D|ctCPsmjWax{G@%8T_tZKv_of4Ka)1=d0 zz^$2@Z(9OgPSb!t=&aoZqgTfP_^RxYJeqOG$qQnAk?^hn`cGoC?D$k}9xVq|d76WO zan?z3Gy`3cb|;<6B*-4roGVtAwVom0db}PvE%>EQp8yTqXy~uj+5&7xY*!?kc53XyD@eN zBhL~e6F1A$O`EF8G)qq#QFu|p-cUH^6(aWzII&uB>Y&9B@FAu%GY5?m@l9OF zF`bq&y*U_ky6qqe+L)8%VkXsNS2&I?GgpI5rz#~G8QKUyQpt{POaQef74rG8tvXD`zknK4UCwDnB=5)Aa zI;N>U6n2saP;Jp?=(84mn)VACgK`+Mc$kkM1`^(gz2eA%QI1UDMbnAfrq^PLLQIU} zCwau;uk%w_Kul15q9DXF(ydx0|4*n$MOmpv-7QHiep*KKC_Rlqbjz(8w@$9z-5a#{ z89rw5vyxvrTwKAl%2l9y&fw=Q{)VK%H~9sFzh&{aMe%+K;un|}CIuXCqPd&A$<`KsN2v5=>E*lpkip-x`1||{Q-iJ7W7`);8y82f z@Y+EseFwaOkT)(wQtfr~Smm#)7HpJChD{wiu-r2ERf~VXuNnM9i+{vFMwVudQ{=Y9 zloJskeq!-Y`E?A-__o=q@>H=~qo}tAwSA4nZy;fjfIqYN=K^GP5*JA*w`}z`dR3*{ z5{Ske?7_GTIF!A$6ExRhH?GcQTAww96J>Isw=d{h<8;~aU~EEF6Pc<7#_fr$`#XCc zqsZVl1+QO@jky$5V+wMn^G~?vF)C!#-)5?q0Bo6hwbRM9!|D_6GJ}#6M@+4tI@OwK zjUBUf1qAD*RJn(Lby5?1y{P!L#qThxov+f@((!OQ-HfaC+WuJF4(gdR7WVGh+qh@1 z#cERdjfDDsnV8FyNIHpBO`Eyz7ot+>rq!ep7!$op=>)M@^pMcjys-s+92I=cg>l$8rD>;bX<^iu$&O;4!?r}#RgOR zCSXhpkhg(bF%^eHOlv3Gi##5!7!^^gdXx)|A8&H?TzHW~dE&=<=%b#=D{I`l{uMx8!8qBnfShGbps1?poeYs}>MN~N}~ zRrmSW_7~@;x})co#_C=DI|ca-e|`%G}T*L5w1FIn7q?A z{pC#~zZIXxkdKmOKoM*^SCF$2^gRx~&Gq);3y4pxklmJgOZwt?z=;JhL*+$d;Xdr# zLtY}mi8SL*5Y~4(RkLqUDDG-?V*TOB)ov%4yhO4&v{lOWiLx9Ybf%`Vuo|os4)Foog=_&5EKnSE&`Wgm&8tMv1dToqACa&C`7O{!>Chd_M#8@7<1CwzDuEs~8 zN$td=o_Aw);@$gHYZ&h7v7 zPb@Yj-|?NKi$&SAE6~ z(;<&NV;nz+yH?7>715l^Au6n_93*p?iVl-eIYL%@-VhZZrjkdM^yhIbp*S` zs-pwAv$Q;Yf$qayA$^hVcXeM2TXOKMiXWrW2WVm0l=h3B)z`%%G_`$*${wfE%I6M| zr={|_s-tN22m~xTjTS&`0WDVN9Fne2r2-sR!tqsTaUPvQ=hIwTO=r*=I*2!=l>1kj zYtRF03_A3#@(O#bt|j$2iC%W%<+dr{~>A-kRz8^^FDP1;?mjKUw7k&rn6n zAu7BnpAWtF7FQ`%OWMnTSJlxGs&20uq#FEchsgH``qd7vMnDq<;c$q`X(ybH&_aq* z1;sGhaau>asD=6gNsPAAwX}`)0*31;KsQh?-H4XgDmY55~Y-*>+ z=y7jpq3RJ@(LO>e+tF+le&-F*`9pMpv{_x&)R?cN*Q84~jh9}VCcRFi(PlLyJ=KGB zVJesFkw!$fAY*SOFMSNjb{jJKyr^}AS^$Fr6?krhkB?ESfVD}xJ4Bls^J?JF#rR#qjrk+g)?N;}+R~UW129Zm zYs&Kn=~4k~m@Yd)m*+@=8f9pukS@<3rfrAl^u_}9czbzXd4bAI_eF7|p{~jeBxoME zW+x3GUgUfy3?2Y*a=sH}D`y?YtzacW3L5~b6aY1V63+!8t^_5XPY=*VbO_KsNSA|{ zIzcZxk%_yIivvjAJ%H~P+~1D-J8`}TQG5W})LjfP4Z_*3O@+;_D^lbny5xc-yzCt(VSI?2ug5P8M=~KD5POL9i(C;%mF;nvqOn%w3q-!YC$(b z!1%D~cJl{3mZ@bgM(+yzt{kST_S51K0(ZPW|0%NDbLCB2d!ByT(Kbwe;S|hMod^|0 zEJ_f>GDOZ{MfISqu4B}_pDHB$aq|pyZ$ysiZ0$iTA$$UZv;)~XNLNd4q%-g_%y-X% zjGhAnKTk_=T?Z&P0L;tiMey-UprV(RmtM$qV2XN$UR7xAO%BptcaX&M0?MiT3xXg= zHV9qEh#9A?zU=opd+2`_4 ztBUiW$^^_ym#N!cbvr^KWL?-Lr#|(pJP*k3#N)`e!*t#ein{p|b0y;K)ip!3%cZ1# z^%N4j+pDW;MrfeDs(Og7K~m)p(VoM!YAo%%4tIWzY+0(I06C{S)0xe^M@M+S!)`b|3wSeypI|ry$OO#_Q-O^ivE)6>X>2=?#SBRj3bs zhMw{<@4ZQH0U?>r-vBZauI_YxZF{AdyLXVT16Uu>NL>$dz5%}*hpFQTeJ~FZJ6pfG zspbgXoU5nseE?zMQHAA)^qj9#qZ$QLA~jA&QV_k1KWr_a8OX9~E+QX$sE!Nq2f`*@ z$i?`}-V)_y11z0^f4=}Kxd^wJD(@vT5|g@IX~LB&!9dStNUJc?YG&G`#q!nLjk8uRr{dz6eRT&P(shY(Z9QT*1{kOAsB=(&&#YxC~T}jI=>A1515t%)Bcp%wA{=Z yCpPUrGwaDYAw7WRzhH3={TaoJtQPV>$NIl%`owqRZ_qzkP{?oL&(?oYQ24*tHxxbq diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet$1.class deleted file mode 100644 index 8675497ed3148d4fe14ca39f26d54852c6887e27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket$1.class deleted file mode 100644 index fd6a4a8f0fd4ba77f030fb86687706a7fae5b9c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1923 zcmcIkTTc^F5dKbEy0l%Pa#Oh|YSB`VrHG1xC}}XMDe_Q*QRBnu_N1J;-EDT4i~qnx zAMn8!{R_UBNDMys1N>3OIirZC*D$T&hK8FA9qZgmn2v1=)0d8|VTK`^Y1|p~Ecx7w#XV1W3{yGBEg8bJ zWYrT!S@`}dV?z`?$9yS#Q!%(D3%tOM z@_NPaxLqtbn}+GQ!tjKqzVeSE=WuE&X|ht>g*jIsQ;a zR~SMWrzjXYbJ7-%)+zbn58AB^~n^)NxUrE+e611XqZJC&s}LJ$~s_X3@z*qw?h9R6MxC;~&B0WqGEfPruJwsX*6IIYVXk!PEx2WrP zHDrA^vX0EuCe~4=_oIXvJ`v{LX5Sx*Kx?3yjYF=Kufz diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket.class deleted file mode 100644 index ef4fffa4069f084b18a9a595b44b4e7aa5751f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3343 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 XwgCNeu>monw9tDay*JUj4K@D(9bPgg diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/BitUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/BitUtils.class deleted file mode 100644 index e8fb4cf7fcc8975c1242f68876c4e10ada7bca16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcma)4J#W)c6g@AtV-gZlQk+6c3J3|MZIoAm)CE)t5J-_y7z!Qe^z2&cOZ^eqP6Z1S z3qJv|AQqM^Ody8-0DcI+fvIqwft_dRew=&XJ?B38``Ncs0Jm|i4jU_VT*eg_T^FkY z)q6V8#g2g0U*8w7AEt+)Kx?d%@X0*(!|a*zBO>i_8mMSrW!mI_LAyB8xxio?q_I?y z_LZ;X^dy$KN)G+>r3}(6l=DJI@_{a%)8}`|q4QBf=KknlwElv5tny<4F(Ou|Y!Vg% zHG|#HGWANJa==P+uTa79u9}t9F4_Y1y>y-h;bU#|HUAL|r|LvC;GpW_Y6Cs232gko zK7l1OKt?K=$fy1^45;R2noXpdso*H&N^zVfdD(DBmJ-Xw1YDgzif08CJAJbmZouMu zn^OTnRB2sil3vg|8($zkm*sP`rVP~h0gXQmsN+1dx6GSF%;onSR;AzC{EEsuIM!lw zcW}C6ZQGvR`-twqvxnPG*K=Nb&IdU5;*Bjn{rX`oc*la_Su5u((_SK1hflPETl^>b vjE7h)`LDCLNA3$~Q8?MK#K@d2Ttu5%mKnET*UsQ_kPw}pY!vVaSJ3$ly7zwp diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$1.class deleted file mode 100644 index 21fd5c71b22efb868555ec256231b68d56db76bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1222 zcmb7ETTc@~6#j;mZd(?p73Ja$W#uB56%`@GI6ujUxGTeY0s zjOp*WWeHOfuFKSr8!{3&CF3S$Wz1ooVL*haHg|T_tXrrVd+U~Imo?9GJsG!z+id}N z1S|+x6mVC-l7MB*GE7oa)T5@T)D-ooDXQUmrdsnYTm4m|GR+{T9mn)mZCH*DG5Nw}bOQ2P9IwpU-U-$jEEOhxsg>5Ivox%*k{nqphV=MNNOS(|q>ZWHYj3 zHKpr2&59bT8PHHo&yoLJW@3=;O*h>mmgp0wMp%dLg(gSdD8C;3e@Zyun-I5YEstBVw`aHO`XV vMx&R8isY6=`7?ikteE=)C{=$DK7ez?VVozNppm4MUBpO4>BFO9dZqs-YmFJl diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$EventFactory.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$EventFactory.class deleted file mode 100644 index f27b42d4c91624eecf8fa8dd0e97949f47d8c1bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4666 zcmcIo`*##q9sk_TW3s~l5hyRKMcG0ikVyjAmZX@5LJdu!CO{iO?PPaI24-j0-Pt^> z^@UbjYo!lstrZ_=t37(8o|?sSj@DoOlRO@epYP0MGYPw4a*pmf_kF*g@ArQ0_kQo4 z{pWu^{2PFNyrGa4)%9hlUR*P)}J!Pa5ml7=ZA z8>Bt0qf^Em9h-1j!xbG{;A$x9*a}aBuc4%42QGHtD^ivvt4J2;*p8}(86CSYyAE@h z*YMRWcH>zc3SX1#IUQfeH>CDW$-X7ow>4Z9o4+I3cO`pX!}m0NU!i@_@tok8LQB`a z^9rrU{erEqan$kb)79dnT|R3~y6o9B>gO%@yj6Cj9e1_{(@sUfI5A^;!AUD0_~m&v zM?B9iA9t-v#pdYI(Y#+YE!UZ}CN1;wOwp`ZUSZOoGxL7gHmiZ-njyfGzVGIePy;kC zU$(7)`diP=msm`6HAS;Zj%kY_5n4_J2KJ?$PF<}*sG=vWNTfkw{di#IuRLLuVpjAM zb9uWIIKEfW@B(pX%T`HYEVb#h+AmL;R>{gw+hnO&B$QbqJ^iMTWEaj%UbgcAZEg!! ztgx1KX2+c=&kCw#^7-8V+^E5{^bH)N{Toa45@&{694$%V>C_fQ{HLT!oV(?UE$%5q zE>ftlHzk0=*5yZl&Ju6*pJ)ub|HCGkajY+9PBsbT@-)utEcU=r`~Kyky{qcv<0KGvOsW zhV4s?=Al**|4}NTv(sgNwo(_mmP%;MX6W+jLa(f{wk7lAKC6qos_@|5S2R*A+69M^ z$(>KAT&rkei3)vp*LvJ?-4$HEmRc}jr)s5Y~T(2M6x#x{1k5q{?BMw(;LnymR$2u`;t|4 zgX9qs!M8R1+`x7Gf^qxqT*e#zFpe4cC4Ob#*SMkKHwJ!-cMQCX8wP$S+3#^f;Xq2f z@MIeJ97YTbZybdqO_^9Nk|=Cm;y>uQPBKy!SO6Nd_S^1+ch$hxGus+;HYoW zEd~Bxo37R*BpAZJXOOezis(oLad!5BhfX-N&rSj>5&Mu}FE$P*8%KJ3`Eh0P<4%4Z$S~~m^Bd|A zTP91zvTc72E$_3E!C~g@(y5-u5!Q`p0zQL>*y7g@204qu%H-EzhJF9|Gg`YB(AM)F z8~j~o63{G@pgqcThUp7THdBe|S*915Ub~IfOj{XH@+dtD9s3VQSdS))uyExQDf^(UfhhZlAb~9TPR|-1PAU+)I-`v4Bt3 zaNpl)NK0sH57yE47a0Iw!l-%~PpNB|RIj3_UdNnz16S3XctyR%c>gxuQP)F)wnikx z1d$FfK9hjY64ih{xKWqi`mBy2_Ox>35hh03h(^wC2@$flv1_8chELt(wB$bANT|uy z)nv)*2?CuAXFtXoBRHXCTmOYNDgyiif5oR2KEm$P+@pgZAh)zl6C9UaYG>NZG{kh8 zN&2N6x`q1>-ohTWfW1+*ORDeU-l(-NYHf&G`=uog)Ee@*M>b#m0lNAlx%?9zQ#UcD z-p4uh0iIERL0;X0r#=i9wm&kpzAzuBLjGtz9>*xD(CId^*cLoN4Ut32*lCUl%j?kk zZwzWUvweM%-E^EAxeZBN33CtkvG9Q zL`?DjtYGb4z`>Opmpnl6#u4Bs#$#ia0niO8mMJf5OhOYA~Vhg+ZFF@2CgJJ~PM;Q_MW&HrNthIa6uA^ti${tMxP2@C)L diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool.class deleted file mode 100644 index a180b919c9eab1c9e81aaaee17a0bd4bed5ab90d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14235 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ExceptionUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ExceptionUtils.class deleted file mode 100644 index b19ed27252cd0534babc18887a659415537516b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmb7DO;giQ6g{s^n>M7h6e##Dg4howz!ruPJ2K-;l|?HHcP}ARUQLruk|ON<8~gyr z4I4M;xbO$~qa5!`Gi@q3qnq51ch9}|o%8bZ*Y_U)wy~ulhX*PiYEZEvgGU-xv8LfM z)>S-FQDw;P3Ri@C4C!j^h(T$3$2LQ;C0zT>uy5Lahno&%$}P|0&Jp*8jN_ydo``^9 zyJdNOgFC|HCO3MgeIwxRvFV)|mgn2XFcgmQ^31Xaq43LSV7Qn#}4Mo9qkaYD3YiOJluJfI_7lp| zG^pzZROK_2sJjv^H%oT_tuaH36i86HWM$MTo}HC>1PBR`7? zA;$0n^l$h(jOT9SWr<%HCha}vIla%h=RQ66{`~X(0Kh#g%D9SaF~o5_M&77^V-ju% zFfImF#!XC!36nAMrUV=lUP{6(33nKZs`1GV%xaN;R84PN<&ItEWvY0_SzG;-wC7mI(k!L8JIjON)$d?XtMi))T zcJ1IPLwG8+&JYm=F!UE}*II6Dmo2}<%ML{b3!cfHb?(~&w}Wvb;N}O~U=x!(46@-h zeACL=f;4b)SJO4V!zs1ynvPeu-L0Y(RK1FXyAq}q%wSf*01^tRKd0b6<{6TLqB-2% z(w04=VODdtZ+;lJ z3TIx01dFZd>Fj3aWqOSv^ItMbo?o$D?ljwr+E;GvptVF_dsi*=yt^HAo{^z{o}3rm z3v@C)DU|I}m5wxtQMxtG(KQoF42zxx$WrH1gdvJS43Rxg=oiA|0q^(04t~hr5ZV<_ zcn^`t$`?dlH(@Wqo?|Ex>}|q*M4PPGF6fc>(09lps1R(izM=;)TJI9sVT@yf>?9q+ zd9u&&3PrNZc#C&r!?-~8$OuuX!*l|F<04@~#0IWFej`zi;?b~vN0TGPQ bc$?lNeTkDrB1+fl2(+an-J&CSyp;S45Ik^G diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_DECODE_STATE.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_DECODE_STATE.class deleted file mode 100644 index 4c5f26b2d5b2a2f93eee456245e442b55651de64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1331 zcmb_bZBNrs6n^en)~%Gc4HYK7pi{SjDt#%e}*v|3SC>z}EXc$JIA%-s=Z;)jzbY>@`7449Oj%Qj2(%Y_n3| zGfW2K?Qo*UkGb0yYG3B^LkcO2Y#1i$j%RQ6J1sld*^l#r|Oj^RzNe#DQt?sBiK zo4vsC+NJz(5=zy5i@Qx8ID#}{mOb7f0ja-P8RBb>=k(SYZeAm5Gv8#8d+!~pP||eT zUf3=MDJL9>HOq}IHwQu+Uca+8jBM7a{i^Br1IylUL%?!x$ztOkt8?{IX>tLxvH{^*vHGoy!ko-)J4#R*#ey|4j(P^T7s$ z&!{vI_s^JIl~F1$(IeI9WlQB*p%$Q>1Ot;9Q5^EfNMaf{Ks_ew0qtU`Ct#luJBRd< zEQVY3j|(4rP52qiM)+04!W(KzE_}hrIb?y4UBPGQM7u!YHs(S&Gy1IylYME^#6=Vo3sP{j=~ z(i19{u_EI+gYn5qxCMqu z@*a>COX+}pLF^pyPvkLVXith5dq?;wOh@=-#KIGbCe40D;vAB|$1dS-(;u~q!X4ZV zz21x#=?`KZoI7x{Kp7$s_4_7-F(W;SsWt5St1S%lHndrpfU$q)w3z z9YqSAfzVMCp);8LLAZE_X1FGGFksda9SoYMU_wB*UQMKA9E0o-8TJ7)RC_!ke~cNz R#gM}&S%pqWc!H7j%pXeqNN4~6 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec.class deleted file mode 100644 index 9d80041f77f64220da36e90dcfc532424906aa2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6660 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 JlaM&AM!y_KQ&a!| diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$State.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$State.class deleted file mode 100644 index bf8fb3021738ddc7571e45f7a7587be8c5ef0415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmbVLTTc@~6#j;8yX~^2bwT9jy=n`>a+jopK%kmU8c1BkRG+5Hic7Y;$#zSOzknBC zeDQB+NyKP0Jo}@JXNE>f^u^95bN0;n=A7?b=I5`kKLE^QB?AQ|4U?EsF|1-*!vJQ) zW~PzT$Y=`0Y#M_?&ZRLV&U^-F(|en7z_g!oe+7@ygGgu5S5`~sVm2w`l0K@ zM0fhX!qc30S6NPfxy$XJ=3iz}UZ15`G(b;KSsxXQ0g^;oO5zRV$3$fW0vTMx2pC35 zyF*eetqt}WeP>8~B#mK=_LQ_86Mh^M9sDBt^m;%zcheC&lONofJ@eNANP!p#}pCBU@ zO_55!RP>}&vZ?QcOSEZ9Yf2mab}iXP);<9f1kUp{q|0~6;yvZ_0S|CYOwWVgCr#v8 P#1)bn-B9ol`Sp?Cf0!ID}hq zlx57xsK~f2A#u~LYr5mqZ3#-zvUGdOR2@fmWZaPuopV)J=NrSB+R#irSW1f$V)lBe zuB}MOl^&~4)O^D=%)C~&w1#c#mYX;E(#e-~wKi`Xt}gaoB%tF1o-1kf)x2sNRkf<- zA3s^mJE~Qy)}Io>)_t&|Ww-{nJk#ytUSfV9n=lx?EFqj7Ccns3y+(TbN`|G+Hdd>; zT~VthBR$Ngns-#&5bGcqaUU6ugnVbYnKhDK6xpJNGpnzAxp@Fx|5&9L}#ejm07>?qYf;>J^uppL;7?5#K!F@cC@le4Mh7^1w1{Dt^^m_?S z)mqLMO;cZ1O|M=}X%bF~v(E%)mibmS%+X9$*VKliXB^?{%)q70Y++s~s4CEej5EPe z?Dbi3wpb}%DHRtB(-KZ~bUApCE$TO_k9EzZ$vT2K-t>ip@y@;sOnsn5q4LPCulv_9 z%+sJ}w~0$k7v?JE8w)~ccGn`ewGLh&o2|s}I77TZyL=e58o!?Z-Ijcui0L)3Si|xk z66^0fm4x1`pThIQoNF7_vUg?Vp!^tM=j~&w4x>jHjZZzof1Ixh_i>Ix5?1DToU5}4 z@d=3K!dsAD@F|3kIVL#+hY`gGIKd~y--VONawQOk0|XTjZ|||(7DBnV2ropo5P6Mg z?j>TcA?J>~M!W^wM@W!Lgq=T4a)(IjDB(nsJ|8GZ0@4=}BMWSCg17!LV zN#O^NzPFuRH*qi^`#v)I?uExTkI5$66G-s6LbmhtO6Rru*LIF!A z?wGhMP>4HElQvO&5h!lN^+aafb|j$JYD5aFF>5Of z9d}c}SWmZ@8?DAk^rE{RMD3akT0~0KG?cAP*^X7*1C6W^cLbKIVY=uBv>o}~EN=N#`C(O2q?PPJ9knE7-=EC)Q#4Q!GMmv3fBynn>wss72$jC+}!*|c+POh34AmFUl9uA!D z?YD9k60kPXZaa(~$7+jqZw<@pZfuNU+=hhq zvc6c=e_6mizqH3nVC-c0ktTr|XFye-(TcliEb=`T`BF8kDG~J6lnw}7%+XQk^r?}y zMC2Jy3jQtc5W>?BpnYMaV?trff&C16ll1JPlbAx8(ex=~1~3e@EY@6N#^BkZ-ptGN zujCmu@e{kNzK-`5+D8oYr+@amZ!iv^do)^(RDYoGX6X>-FIL;EpJzWK=QR(L_2aZ9 zW~Rw)hLdM`Vh#(OuDF&tV}YBPr&ao#GprRt*0{>ggl4}ovDhc9^}K7i&a{Rbe*xMd B-EIH? diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NamespaceConvert.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NamespaceConvert.class deleted file mode 100644 index 98ff4bb7784f4915b4e55764fb2c902fac6ce1e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1261 zcmb7D-%ry}6#niu)^!vZgW*q96mbmYDxi{JNXA5?DFZV_-^^{fj$+r℘Wc(pSX< zqYuVs|0v^WS7G9o;LE+|o}Tla@0{=S=dW+y0W4rSi$Ppck;YU8msMQBbOu)y%w%y5 z#X-!Xq+l*f->)mU!Js;#A^oN>B|~1{6K%n5;naC8@GPgk!jQgaIaaXBkSxw_Go&i+ z4uy{BmLsdJh9SMD!my)c*A(`)@T~A1J5#}~=3;F*_#1YEd_L`5V{gwp%xZ`I?)y@O{hVe$(QQbhln7w(D)_ z1S_+>x)_k*H-^&5aTtbb0hQVi&8Qm%^9F--RX+3JAk;+@+f zDaUr?E77upLogC5T+9eCS}AhS7L6QLh|1Gm)n%k1$yw~VEkl1{(CRnCg3CR`?2^5Q zys-;Y^t%nx@5%5u)Q_wb*(4{OIeKxr8QlY=FJPa@NMMxCbmYt;Pqx+xz!=8qMLU8C zI>Y2A6rG?u$M%tUk4!%K0ckQnk}uhXlZ$XBIMb2uNv zKO~TlTcPwBiG8H<1Nrm;l&{Dn@%)JEFol8AQj|E3$u7=?PRqG6ah{Ap7h}$9Y3>Kq S17t(8{hC$}o4yc5UHlCxxh>8B diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NetworkUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NetworkUtils.class deleted file mode 100644 index 35720fb1752e39319f5f19f21d29f873075464a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Sequencer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Sequencer.class deleted file mode 100644 index aa2b4c6930e2ddc16e9f27d66261749dfa0cb32e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmb7B+e!m55It$vZd+H|YOVL%TU*fuUllh=wq=bK(T^*gszBES+g=3{va>C#=JFQ!~&f=bAsC1QA`9JE@bH!!W$`rVB=>5_u-_GNbkx$}eJwg|7C<4^l zZ(!{Yv*okyN*g%YcDYJ`Etq==$bLR3y?fhZXkQJ+#DW*8{8pW(b> a=8^Jpu#5$I0ai06FY}92CWfUftMLOuK89`p diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SpyUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SpyUtils.class deleted file mode 100644 index 1ce92dcc174cae3998404bba011d401323ac5883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1771 zcmd5++fvg|6kUg2lGapf@rqZx(yB!9E{Jjy(0UCrQ++xOM;Z)CCrLs41;4=0Kp$Xq z^ub5{0cV`iKXKeAX=xNuAI-zg+4q&T_sPfaZ{7pw!>ue-6tgJdgo2YQPATZkK*wnX zXB6})IGe>eoL6x{#YF{|R9seZMMb}g0hx7G!C)4hC}yw&*A!f5$XLEnUz&8RfI%;t z?!3-ztIDffpIeyMeeTRu-DkS#dO~jmmaWT3i$b0Yub&}3V39t^kmxB+GbBgc8Nsln zY&qgiW4}3WhWcV}xPokE{u&#vN1Wi-Io*Paj(lPEfY|KsdsiAbM@#$;PfT zES?a{#9kZph|PUp!Kj8Y++fJJJ<%8cWV&0O6DBd!`8dW*Wb9Wku3-X`VWS5kXn0O| zoT_>5BDL>qR}M|l)Y7gaC&{3>&Iq^d7Q&|5s?$`XS{e@GCc~*ea`NjYY1oNf45hy( zwdTNZB!s+ChF@RODV8?W^5x2IurQApwzfZg(h0<@@My=TD)+|76(cen1+CxtjXJik zh!I_y2jYoM0}1z*;ZTDpY|PezaS?>IMull}Pt4q;g}N<*nmfaAKfcsa#~6g>mdD2% z#S~*fUer~ON)q5t@tVyN8^{08p5ipR>A$7YuaKcjt_+;M1& diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnCaughtException.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnCaughtException.class deleted file mode 100644 index b5d2b137e946e6f59afe6eba16283e19eed81535..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmbVIJx{|h5Pc450%@U8i3+i?@gZS}im9ke1yjTTrMu%=jjO~)NnHB3n2;Fw0sJV$ z84wIGahC4?p}-BcTO?aEA56VEa9QY%F<6_xh*s~I-At{Ki#X-h5&orz5F#j@nJFtg0A zxU`kxuF(a*Gh^ZAd2_jv>b}v|3>jKdxSF(g|Fpx9+*(&jb)~(5{x5}7|A`Jlv=|2e zaKNztvxXaI8eOVydpJNq%k#nL&?A&1LL=%2RHNgQC$LAl1&AppAKf<1b+Asj|2c&X QVthns6XUfu2?f}C2Vs6{y#N3J diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnsafeUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnsafeUtils.class deleted file mode 100644 index 136956c098e7d038a176ee2f67e4b59f68df1cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 zcmb7CO>fgc5Pj=}IB^{kQfMh3rRAd}fwB_UA|zC(Kv?Av+5@-sW|M5Rv60uQ`m^8? zBo2r(KMFCn195x9l4p0`ym|AX{q_6%4*<`x@1c$@7q{xT?comYdf3Lj%b#b4e z_CiNGeaTSi_D&h9hw)G`v;rNe!XLhk0*G_u>W7vQR!9JAHpd$&9J?Kj^n{xPVzDSjli(8BD^z3 zjfHt7rLwj}X{{)SMp)W=o3{8`Nh1<9%mt~}ZfR$OG||!cpjUz}uW@rFdLhKnv??un z(D?(Xc0Xkgq(U_r_R3|7Aup6!LfC~%FEINY(5B&$T_cav$>_Y&{|5Fo5Bp?mIk<)< z-Ti`qt7wteKpWRcBujpqivb%Qr&C#=`o3RXkP=&<_7lz*VmOoy%BLej8z7s;kv@FJ3I&kJ!7xf?DH|7 z*87SNkK?pT=>xS%#1ITSYf~5w*7=tz$+kjnpA+b;bLo~mb9p%OskMh|dFPiS{?qE| zlPQD4-81uz)u&!oI%|Bjr9xdL}w6EBnl%6y0dc%=h!~Wj|hH^f)C)M5bGqO zu&bNd*`1r+pWm-<09UwhF>^5|9OO19%!Idy)keugWh?m{#yYBQ38TQQGF8=uCiI2( z;&aW(>++p27u^Bxl`s(8)c_~gdQEUm>8E-1$v+A2jdfElR9O**jlP4`5EkxivaOsGO7<4r0{l`TX2AtPI8Syv`u zlq9^Tv6K~KUk6vzLa$lOFhP!v6RFab?$)FXt1ka$|u1jEHsHx?|})}-5r9{ot3G#>l_ zekkMHAO@9-ZPM5OYx~~sy?%VYy#qMMfsHC^HVW7_v16jnQ0&M^CS8Vl^Uj%wso;T# z#{Aly_+HX(4H*i3HS!tCj*R@PG<1D^E8KuQRY!Ru7z!;jJ$Dw8dl@raIGzf*2&5}q z!6(y@$08cJ>VbPo`#eo#K)WEIBvM8EMo8UeFjbzG-q)7EFjxaQjzp4b%HEpM=8<|@ zi$_PsN#}0~U5aZDRH{AyQfAmzmh3bu)x>TIduWufihYK&e;2T!PwSi?UJ;FW?iME743vN$1#iB#I_t~ zwEQRV1mb}g9zfbw1Y*4NHzD9VwworTNKA|5>wC|=_k7>^z7zlP*Do)KXo1QyEhb6O zog~F5m%!|(3Of6+yr(_U zvQ5o;oPAK+Gj#8^AX)FYE)EHbFPfI=yj?d0jg(ExSnsrIhFjHYO+?aV zTi2Rfnrrep3`$MLhotQK$Q03l^cTw?-i>iZS*OO!QXSnZB$ z;bpU3Y&jm<0&efXe6wBF+USBaydO-Zx?dm;p!f8};;ljC++gVCJPKVu_9a=d zJFaf5nA~XRPic?KT%n+)S8X$eUZZIq&MP!QBe3z`(kXO~#$_rg^a-sgbd9bHn)VO* zUA%5rI(j4Qi{gQ9INZ?+&2q+fXj;(qm*N--(MP0m*!GMT+En9zux>lBOFhN^(x3|^ z^f$eYZ%GW#5J_}_hG_)zQG6RBG=_D$XMGkilUkcsvJ?| zCrqPAL6pP>;b0s`CoxlkV>Cr?VD)BS2#R1j=Ow2tsYTSjXWbso&1er&nSM9 zKMm>xBnk8qKo~=2#+e9ihB(N9V!6B%#5DF8F~V+yh~GjE&Nr(*rTB|G{y6y^U6_hB z0KCrY=zMhQXVf_#(qQG7Kpf)?##z8*06zyn6_HCm9TjOOpzXWRkiWjOU1GEJo=+@} z^Y3F8>7mG{nBokcIEg=LMqnQu6w>_+D^`6}eNJb-qSUXH*gm4M@OV|0i{Pf0K8Z^X@H=@92)H|5SM(^!2GEY z6`ANVWr4x9p6oGxuy+M}0h6nkEp&@s2M^YFxLY&`4OCkI-<6(fhX<6X8`{SRfIuSoy^ diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.class deleted file mode 100644 index b554e5e221295d857997aa53be823ea2cd1b1b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6699 zcmcIp349dg75{(9CKEP82mzur;Sdm$&FU)NNk9V<4dy_jSPpF`n;{w4-3hz1A=Fx_ zrPV4{dsnPIu$3OxVm%;Iti7$hYfszS*50h z-^@Po;v%CeuwA z*j+;2C$etR@ctkch?oWVfRGOg*)8O5ng1bK{^20*5li>rBSJnZ6|f6sDLXPP-Lz%%s9;ol!d; zF=AGq(Pu<94aXxXBhlYyk3@_iE3(m@6t zby^9tJ00&clUEphG4|AS+EF96#z^@$k0|DwV|(SlEgCgb%(n}U4LWam zOJfIZGkj6UmSesohInJl7*J3YS?$<8$%~VAddT%b4lAQ!eNor*jw{bOR^(zw+xW8X zt02l{R-)e=QKCnzpNa<+97j#^J3l(PMPFUAg zDUCcxbbJwC((z?HuH!3sLdRF}H635aH&_dGd{er=g>Ne?FQ$3CTe*!mwwmeq4xVI{ zWp=u@4npeuy9GcuGvY0$1wzv9x}IpDLU;aT8rs zv&Bcp)wo8-)8g#U@N*r%z%vRfCoV4M@wn2XW(J@-iWtL>m63<3ISXjxE@x;gF8! zahR9TVlu|Z)K5c}&xx8Rr*&3@3JYofEVc8ybfOM4acUA(gwM7mm2;3+>id9z)e|CdP^e@ z)frZ*BN2_I`_0~TpKp%4l4JF}I=35fE4J+l-V?`e1s)sI8}cu`y`~(2ljy@jdxC`jZNDN$%BTb8oqA zI|R%aVrtVoS8b39tq%~|fM72`dw!^w*vfywMU-=xFq*#S0HX|ruy~8Z@_u7y)eGa#WHVhRu!{!p`9Gy_Y{MlC?a$rZYNR^sbXhF+=6r^ zzhE$DrPOqqi2-M@NVVpr_?%)0j6d)4j~#_`U*;}3eyxApwKT55N&I}Y3_S4oS0nc@ zeq*a(n+GB33Uciz;eQ|)+J}-*(?ck|pIiwpBCSFxX+1x{&A}AR#Y%Fu-fXVBm>k!+ zQh6-OHHlPY-odA=Y&w9z+I=YN3O9|SyaZQ;9z^LVG{qU!(pRA{iYXij@8$G>tF#tn zY%ipli%^Y|seUmU(cmhd?}^PSZ^9~EN=GUJy7vTmL_ib}C~9viyCW0=|;2+t0TqDrivM(g(+ zc{*Hr5Y?lYUc&L3oHKKwQE-^zPh~5DX*eAroPqQBrLzTRx=w}Yc!*ewD*-Vh>s|-e z&?$a&U=**yD`}><=S4uqda`3{IVO%yL#g%xsx++Au>KGc^!(kxVO}vgo&Kr?G({A} zLrwcI!*#MN>^r%R4bRDL2^L+Rsjwfj*r2ctI|iH<&(N5#lBJvGV}xn9lWGg4>*3C=2iP5_+z}E>tmH<|)3&u$#^Kk{l=H zrB4rmagkln9FS$R0}o>%k(KA7kkFF_K4~n@G)`e-6b%C7)bPV-l)(_w?LK$EcyP93 zI&Hg@Io{3v(!*`ui+RlMQ<&e4Sj%);$KLf!pbgA{s|o8hunA(C{nrtd8xh6L^i?31 zRP12E*oXl)Lw05%-kIHLI~WwpPq$eDc8!KjwI1fr<1zs+C@)GrcxB|JzT95g8X85D zY$UBNuw9t2$CSCusUD-b%xS_@)KyowT*T+9UG8+Bo9}XG_}qmqw?w!pbk9l`b3#-9RSk8t zK3NG~sjQU3=U}qYm2tRB{r+d7D>S iHH6uF@azkOPWCgE)t=)3`&?kqz&}qe;gA diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$And.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$And.class deleted file mode 100644 index a2c1d309d7821a17ed93004632e058c82a30fa1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2078 zcmbtVU2hXd6g^|FJ@&E*fncclDruqENzLLUB*9LAVDdppklG+3pfBU~mMpAy!+u17 zcmN6UAK;M(cm)X&0Tn-hUjz??-dQ_tqAC)bO4fMq-FxqzbLZTdPiyZ#0vN<472P<= zQC5+_Ajgmj1%p|1VR#2lVMMw|(_kjtPeJxaC;E8HUlqjXA?@>cY0_ zqAv7XD^1-OPNVML)eYA(^)Rq(y(t1?$@KL3)_=8ll|iYw4U=K#oaLC8!)D#|u86u# zp51eWO!JJ0mu)$&6OWToNmm>vhOi&(PPq76M`1o)^oJ zwrL7!06Fp;G*9Y+8+wL0ZOKX4wNb4nBpnSqagJdu=E!xVA@e60_HEG`4L?LUH0;L# z4d+qQZ~;>qrZJ;oRxTG&BT0S#_cv0I1IIA3y<~>+_b0X`%kdk-ooyXaF*Le~VmUh8 zk_CChWi7u2gjkb@RGPbK2LBNS9bpFw#jTV_f=P=;W74)s(}fLDHP^OHBd}bjDobZQ zGZ2;&#nEU?HJ1ZA&0;8JGYypKHt43?0(1>LBH8qS1WDFeB*_Et{sFcM_BsmKO{=^w zfCADeqL-fbw!*Ln`^cgMDK09)q_|qem_;!vy?dfed_dybDw3B!K%xIsMPdDKkbZ$w z>6Lt_r1GhcBkAM_&+%OPIcoV-jt^Ec`OLsO@B}K^eD*Ce&t&|;r|8Wq(x#ufn4EZt z?vA}<@iAvFzx|z8-a>nZt`bGbXLYgkijXLfT&5$cB|>+C@ae?oBw;S&5QcCX!>C~t zmoSETRPj5;@h2uAs5Lgd_h@eJQ^aFTMSYkh<~8ccLCVfj_7D!^M`R@HPH&#z2>Pfe z3Cj8jKSy18fTNU=q#8bs;TJ-7oN_dZYIzFeDU#1uKGxp#6fifJLdnAOtljkXVCJpQhUhUD)p8eh_`r#9!ir zzG7k^YJ%_n2mgl;2D!Vf4aAVJyzI=}nK^UL-E;5Hqi=@*rZE>qJH{kjk0OBacC=x_ zo!#ibO{AhoBO@UzA;%E8r|PP`z%ZA3SyGI;%r&*bD_q{%t;-hIs}$4S6=6Q*6^$bClA&;IgPW?mZU#ekO|=*T>n20& zv91eqN#m9!C|2}A;Gtt>O_n%ovmlfPk@y@(u!HV;MBHyPfheDJYs(@|`P z^5n@W|63N*K0rJ@^!5{BIhswHqLx!>ie#AaizM8%bSZ9nTYMOneZZWlii~4=BpK#? z;Qc4Cvutx^dzJ5a?jXZT=qK4_!!Z@HqPi~XJ^8Drw)ifOA&M!6J3j5&O00Wdj-e0z zG2B94!gLG?3`m%XVHUR;?w%j{BsuaSL*Zg~B@`H5U8n|q>cQ&uiG(!eniL| zT{IhL978waw4w{Hg9wDOM|%yh9|R`R-pY3bo*y8%$}(RN`iO9D&z-DI9u`8uLO2ml zgg#(wG7+AhkL30dPDZj{5ea~%`;eZ!53^5yf93WFDF~O#h=-aa3764>A!0C$EJYV+ zT*j!!FM|-p`Y?z~#F;p>n64m6_o%ti`5{~(9mBNWhu|N?C5#-QL&8aD9YnAF zM?F+X9QXnKQK+*?RB}vx@T}kLyf?G6JAdwOZUG!%y9^s^WlZ78H2P}mL}(n=dYPQ z<)rc(C%no@Hgi$f*=^YyJWo^L=gpsIddUN4;iu^@d*&IPF}8Ru*RNsK_kN@BYY?-* zb`}M;E^EwSn$aSoNRVi}k&0(7m3i0w@i1s>6tXIz>F< k3}(NG$EXadT47{il^MVa$2+{jD{(D0=dIuYuP!Qo0YGCV3IG5A diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/Matcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/Matcher.class deleted file mode 100644 index 5726500400fe8357ab6d5b28be8a06beffd044e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/Access.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/Access.class deleted file mode 100644 index 913e26576503258c7df82cef449f6cf829376821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmXYsu}%Xq42GRj?%HdC!c)LPBu2IlRAK?7ZfuSlAg5d+CC-UwW8eXJD1@(M@n`+| z{oDTe{rU!gJGg3L)54{Kh08C+ct;9Ou5VryEJa9eM79c6Qyq9Pem1?_-zZQp llh*;dxx5N<0O4t6Q`uH7DwmaA<*IUBc{Wj!&!x`b;t%T?PX7P^ diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByAsm.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByAsm.class deleted file mode 100644 index 7bacf4426eddea4b454c89a9e16efa224d4120ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1612 zcmb`GZBNrs6vzK}?bcBW+fYyhVc^p?mHO~TK@Bh=X@X!fC5qw2ZK-gvYf0Np{V4hc zeB&DvpJI$3zz=0S?P^_2GZW*M-ky7U`n&)0zqj9ieEA088m=lhqoRnjLr`!|rQy7a z3#dg=T|q;^MFp1_3f!{nAYfnyO>PNSgm)O^no-}TThrUK8A=<%wKqF$)Ak>5)1l1R zhG%hSoBJY~CrLRx5CmG=u)Ma;9bs~l>xbR89&mTh^j_$e=i7QG6pr5Jp><&UdJy^@ zE9_8uC6-~dkDS$)D?xjSVQAkDdszmlRwsEy5!~;XjC7hN8bq~R#`LfZ=M zy|}a$@-QkLp}=}}j~^v66%nipmpkz*h8x=cQ*IG}=$rILmqJwpD<)~ zX}jrA$RaSvvqH^yV$^p~rBhf0Z6IA^QS)?WwfGvL%qT_c$k88A8=sJCOnrd#j%GQO zXdHz^V-+&yh%k>b%_e%)s1PsusWFvNmRwDkI^7vP%QxObdP_kMSBR4fF-GeZBp8Nq z0`~;nL_U62B0;kJRedbUTc45t6LY-}Q%W%>24M18m>ZdxlLIhH7Up&)W-`U>CQZ#Y zKBDj%<7sc@VuX7IMScT0_DbrrzDb*R7c*$~;b)U(Pm!+$NR!fXWcF0L)MBz!`S%*- zEXhV6vz!`8UqiAFO9`ivaw<7wfj0XImro diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKBehavior.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKBehavior.class deleted file mode 100644 index abc325d39f0ae32b9196f834469467d4c9ca1480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmb`F&u-H|5XQevLQGvl`CCG1Xz3{h#7bO?kdgpWXu_qaf(j1n&8FGP-bLPZ1nBO!z>TQlRC-_CrV??1kN1Mm<#A#R`*;v8;<*gz}5tpJ-0%}3g3 z|CpiO8J>ul;E6EDJX4cINzX^hPwjYb_mH8{w`0YyHq=JF$kSM5FGZYC+E)pG!Sn!is%AGLd*uLk|W{T%tCp;BiPF2R8&vNN=3U{Sc&JEIc zN$>e>h+I5YwUU+Q{LwI2GOsZ$PP-L^82 zy?>#N>{w5<%I3;5w3e*`4SuZrX*&I3Qe!~N(HRt)w*M?UBO7YS3~)~ayz3fvpQy_?tbZ0L-mhz%)G58#Q;$@Q-RuAW diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKClass.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKClass.class deleted file mode 100644 index 0d31afb27fb85f7ba6c5868be5fc805b3faa9049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmb_aTTc@~6#k}Lx@}p@)#3#eQAt}8CgBxA0ti~D#-yeX#+TXcScdG*lHFM%{3c&a z6cZo(0sbiCnQcpA<;ge?bIyEo&iT&m=dbTS0BmBdihH5@th zbQUo4luDl;g)a$1qNL#KG)DZuXy= N^nY`s|DBxW?r$lx#Lxf$ diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ArrayClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ArrayClassStructure.class deleted file mode 100644 index 2701bcea5d6e5784989b13c58c30f01c31551cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 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 N2J587U?Wznd;;0th0Oo} diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureFactory.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureFactory.class deleted file mode 100644 index 35280ab14314d9e7c06a0e5f11939b77d6ea08ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmb_d+fox*6kR6?HVHu?Ab3G-uLA+;@h%2YK&S$OK4eNueXvfNHa64gPW45Nmj8q^ z58kT$06)rdo$fG`1hvXC59vNTgFWI%nk%L%BEL0q+?fQRT|sR z>qa2mt*ZCZFg@QgqR@7Xx(v-{mTv^1ADLl9^Rgp@pt8GNm1gMqO)?raeM^Q`=dr+p z$?~>*E)7Szwd8JTst0iyu+Mblt5*WUdjbfIb*9~H?4~~2?L1#xAXc_w*IcRc6L_?T zvGVB=X}<+-d&ZjEh(Zc!$$F`qRoRnUmfx$OeWr{8W_Bxfs+H zB%6OEZmrJ$Gmrf^Ah4XYqaN#`|JT0yQ%ME3^lDR&0^6JaWS&jyKk0o zlAnk{ennWZ>R;umk82hvp9Ss=zJ;e0++{J2L-bOY zSCEd+vY(K8NPzSXjp;Uki8g>N4wD0Ll)nU0SthtU#$O7@W9SnERM0Q@HB0k-_!BY@ zi_`DWx3l>Vv_k*%%m-vM5Iad^P35ik2dio+i(kIK0mD0Vc0gjFf`JDV*k8 ztN5J7)!huyU26;w{ZK(Vpr&sF<_0veu}8R@;Vy;q-vDC7DBb`7 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$1.class deleted file mode 100644 index b3124e8d1506e5ff4cb434833b8f19df99d2c479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1527 zcmb_cTTc@~6#k}NT3VKi$f77JYSmtZ<>n<~NRVjK2$)#p!MEu$w2Qm5xI0_xpYYwE zVIpdL@CW##jAy2eVhD*EHraE|%$zyb@67ifU%vrZ#Qg&DxS`2SO>Px2h;k7XREwzL zb{?~N%rQ6}9+Z5kL@ar*9`GdD;-O#|-`M9J?gm`8+=hyM*;-*3*2>)TM3OugdknRn zQmXvG^&;t|aV(^Axr##HbJq;3lkJv>>2^-F{iHO{u({zyq00lm$(!8W?}To`qmn zgS8&*QZYw2d?~iluqong-V986Baa6=JofdvziH_LG1zq}MQqX)w0w4&Ih7WuUYRa6 zfz>Ilj-UAIw>yRh<&$zgiiG1jb(5_$&?!VI!KnwMg0FMw$+;eK2u2OXy;qz3pr3cK z5v8#wp7^>l(*Z4AM-F^a`JmTWBJ zP9Aq{+`}Rv?-YSoT41;w#Vt2#?h8-75lxpTVGpJ|x~@^o@bnZNG8Fdw?wT1thShTA zzkt!ZPbjd;rfDUe0zcq1Z8Uyi7|Fy;{ZfDIU(j$93UlIh%C)d`6d~(v9yjPjNKdRB zLB${Ym6r?^^P2q4L&1_2Z&Er zYlmRf*+XQiQ`RA})#=Z$J{bLRqB+tB%it`@Gsx;2n4n*OlNv+%oTPI&PZk-baDk}y z(CvG0YSoX(e8Iqb*d%2g>l1R?K^EGN^$R}f`&&;pJ{9(=nEciLc8;t%j0XA~J9 z`~m(Z$MM`WK+(bS&~}pCdvfxf^W~iHdDRO$9p<&M55DXnz(-AA7 zofqC3&s${a%DM)(*12cOeQa!y6dAN7#}QtXu%PW~Ewf6F5o1jfHf4A#q+AwL=^BI} z+=L&Ngtz1b!gIJ45m@1N#CDT!bKT-jL8ls+PJz7JasfBqFY{8wUcop+4`p)VxtiY; zMnInG!mc4of$2KFf(eF}oLO+VEGxs-Ia1H^4|^{}Fm(>sYK=2FE%V8_p=XFiQ&zI~ zjLsUCM5y!&j$yezQC=27(cMsRUxS7=4efZK;UOL=c&yUi;cJe6p2V6x307;bN%YfKrj3B$b11iMEwC8vR#cshiLkUMz$}lv{4SxyiW-AQH(A^0NX+<^U%Y5Bv@DxZy=7> zN--|u3dOlfPd0=7LPEi{&UuR7OHm~go$gY;Xv`d-MF#kngjRNlLHo$3fh^bQd?WJj X$Ia+EfLqbMB%OQcP{~WBEB*ceOT6R)P-ad$`$r0sI>#zbF8 z6Gh^M58y)?|7n-RfC?9FGt>EJzJC9Ce*XIY1Hd8{OVDsb$1rAf%;2VuTez)ORhY-FlTmenVcl{9&*ZMOxy{Y(UC)fT-?4*z(+NUh_G9Uq9*>=#2+b%C`%c`a z?G=|tQTte2^LE_F2ah6enTVUxmvM{XWi3?2hT*@JmE`5 zrYd9gcF+$U@l>h|PW_{z=2a*u<*UBq29fl;>mu$29SwB@CFll5&@eEE`x+h?n1^X# z0S^s~VVr6^!_uxUG1SlI8-$HvEUAGc51YL(*h>rb`PmHTZZ?K|O?8FN9Y;je%nQ`c ze#TvA1!30=l0w=Ow#g$e?fqARcSJ~8oc=F>;X+r$Ykn-kx16kGn5fm?q&1bqhVBqb zs;Y*87mLb^Fk3JFqVQCYVwSGQVY)(DxvVOSR(TpDFhEYws)ZcAfZmw<3fB0B+-H(< zxJdI5VZh#Fl-83e3T0GCB7DL|mzSzZI#XOt`qCe$G`c-cnZ_W*$mB> LXy}B}=u6LUvSQPW diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4$1.class deleted file mode 100644 index 943249a4731a6a6c4b47be361103ac68baa31e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1915 zcmb_dSyK~15dJ0!tb_$3N<4@N8ZZZ83F1ZY;IvXEp)4q@;%&0o3X6MCyBmZ*Vfo-u z`p&ynfuaxo0DqKa&jyf7pLVNurgygI>+Y|+XMX+u@e{xpp0**1lo--cv?J4oE@Yz^ zMotVPQ79N~M;>G1?`;X=67DbzY;YsVEz9<}r`y)j*19%haMxY*oQCQ(9L;5jmDczM zR~nvfC?(zX3Jk5@s_rK967Dj{Ma$A0f0xi+D5&<$j4Zv(5Sg)S8ben}x3o&b ztZL2@uNt({U9wefEOSQ}-}{RZ!34weU_DFbDelnbC<7~!D;v72dsBy5VwgxZJvX>j zS14DyRWGchOSV&2?CP4Pdatyq!d+AOyJ=Zq*bd<){+Dlt*#JTzE0LP!s)97Xc#b;C zAc=r{PT2}W$D+s8mu0@bPib_~ZaAtouM5%>|EP=+0ZY`(S*l^X6n|OsR_&UMd$=#7 z6X#{f=#bHk2Qns5kT5CZAs)$ij3*MNWK3g5!mNxr%**ISf=V~g%1!1O`c7xWk7qv_ z4CO#gQZtHH(M6RS4NREtXGDNwmYAzjeqeRhmpeIk^bWfxM$N>@6dHkei z2=iKvq30;w3;qF7NUxxuE{k@$JVLRUXcmBG>Kw5`Z#OQ0xF)GW-w~Q)nd~lDCbx@F zCh-m7FTQ3Ejjf~!_6Bj1`we zAd=lf%U87SL8`FaHaclJl>3fzA-u?B$#C0e+7N~?97hWoev1fuhd6tWUiJY)?33?E zhJfQ_^cwnnmvV5C$w677 z;O?&J9q5+l+j=V$j^5y*RkM9P2>q57w#XdeY#n#k8%^hNdnIU;33y4kB3x#8nU58@ zP+>@|db>8mkRe?AMXO=j{x&xqvJ4xZ#hnWGh3t2YDd{4^W}Mr|Es~3x^iW7XrzOer z1*6XQcqdkd2tt}O$z9hAc_=)0yWO-;#*229>0L5*(g|ACb)<4??otdMm6vIg16!i% za(SQ(uX?R#mJzHRC}Xy}_wi-a3! zxQHPQ87wf2{8h|~@AI~l4QVyTyO>+d%}KIF4G-{8!xdbm+a46%mNg z^NAl*l-)J@AFxbD>WW%P`ZBl#N=ejOMuJ}Y9~4VpkSHD^`H6Z7j8K`TIbd%wO6{@E zEL^6ReAEbylC4w>jY+IJt&mvRBcyf?(PtDtBXNZEPH|W%9ismm21*}kJQ<;1lsjSX z(9hmuf_?ahCEI1`C)+qCXcyOLl}2^PlBL!pSrWLOc|!a*y8JrXX~*a*euXNDdfkv9 nG@(l{MeP(>Zc^C+yoKA*x*YCAW7AY#pl_J42C0@$x>NlIo;W0g diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1$1.class deleted file mode 100644 index 828f7320f20dfa8b0335f5f78e7a1b885cb83dbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4888 zcmb_gTW}j!8UBtWYi)VsxNhxKjuW?uQ)D@gY}2G63TbUON!{2^QU|w53S}iPwo*y! zuGX&8(n8zxelHXV&?|(tJTPS@j#C1G;WEQ?$^$U)1azju3_P^Vz!OiD@86YIcBD|o zm1cC#?tjkt|L?ya>Fxjg=sbWve7_DINXsxGgDJxoWSER#6Q&}_;F!GLt|1#i9dh!L z7qV54Y22Z~mbsvzuMXSb)ZuE($ntE28}E!@4##V;J%R?@CFHw>@H!%}M6eDI3eSf$Jgngng-FhHrmTrW$EQt&%ZDv{GGV2TnQ7-vGnFt3 zxrD4F71kN~yyX~9#>xw2Fl!VFV~#zOc4lm|pwKvc%$PM2GfpO(7|s+N9;qA4Oy&() zR~WxwdFOE2$|a0!CS|0I#If02qG04FQr27|ZP}*BCTBS5Dbr3A7R4l%OHJ;gklI-z z+c9Al(h5zUjI5ELOb}WoKe@P`H*&-fk*!8LZ5D`E4JkAT!JJE*)1nrMmmaOeBJ50M z3LSkK9#znX@_EyCahUYaV+seWpvh2fIy-Q@zmV(L+R;nU;hmX$#@VItgILwM4^{B- zh#LdrnL@^~>}0tO$|*w?EY&%#5E`^5XzJC&nY=kVlS`TQAtRL~rD@no8`*Kg&d7U_ z7!u1Wj8$7n*NB0+9)-YMufmldsWRi+VO00qwsHKBbt5C$b@3?U#-%B2i5;!L#Z8XR z3bvpngdvl_=c^FCC=14-q>nF@Mrm1YFfuC|t;6$%pJ_YGy(5XSYRoaxw~rXp?lCvr z_h@)rp?%VH4j497bLgE)x!e@%yg&x|-BL!ZS`M!zqMJ+>iVCGgVGjjYp;$2gZC?f> zbXKCh-!EzkJ7VRAJknXg>7_%98KcnlzsjS+_0`cJ|GInfeRTi4kBaLjGZ?3WF)KGmRDrIj%|@>rjd8&(^;#)O6*k_ z9Z%p%9iPNCIyR$Q#}*k9=+V)OJ{{Zfl!m8uJcDO-T!l}tBA2>~n~2g{WZ$hiV(8TI z9KOP!*6~$5&mQD%UQ+*cd<|dM@eQ2R@lAY7$G7oPY6 z;*^f>iR450jELFR!obcmtj6K`UW@ z5!Xoz>R{1qFTV;bYZD41Rh6o+zpDI12e+t}?j#EJZmxKGDCA;8Y@nl+t;(qrnqZ>~_XDglw*l&|x+-(nOlTde3yGKRZ?#so`A z^HSFP-5X)DlhsCZtYSxuu_KleZgEQm8t*gi4T=ugzoIg9(MTm)k2O2}NHtlLaU+e@ zZ%@wT%)BG^V@qBeW2>+18y?tK#qedB^)9L%eLd98uIe=~xztC+i*kjAA2#opF|t%! zqOR1Q6)2N}BQK8rnGf>s747gXZljS(85Sz)W z@F=xY_eYwC)W1p=k(b`xY9zms%B~azT)`idoA`TILzDDsJ~c^ChC-ar0dzGsN|OgT zv(LLTTfIB8+q*Mw0^A$scRN1ClRNnI7=ozfyd&N<4;7Dw<`IZTYvvJ*H;3mDibu71 z)WqAm7Z8rePa|*^B-F;wq3-YkBJ-&KAx{U8C3W(9g30xhxcM{g!VU*9MD%MpV}+bajn(pWhY=ZmVgoX%4-LwcX7% zeLKRNqv12q-@>W@Zaz_?Ui@-2y57+{Q^CI8?_w%~K6%lY3-^8}PO)cabJcBhS(NGfhrYG$3;S#BfHav@{2oAc|Y7*C} z-$7Tu#~Sqqw5vb5!du9=o#8h|D+!F=A`H==TCE|Gce)~uXGxL>=xIBN*b-r9(dx+? zRo$mtWcA&i2jg9B3s_r%(SjPn_!C0v&xoqOV7+>mx3KqohegqdaokKfl;S(A2e&W_ z1YQpg;|L)a;YrHywpoPt0{;*aGaZaCpzR#i9X^NkhY2&ZfOby75@K$+g5N8bP)?(U zo+6=s0UL^z+}P!5QOb(-636Oq#Q%3}Q19a^^#QI?|GVpOxS#(5&AO0D diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1.class deleted file mode 100644 index c308041fa2f7694e643e2613ab8df403353b23a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1786 zcmb_cZBG+H5Pp`HUMYvvA}9iiTD2`NcLnhcBvGPClL9el6ZO+}yJ-*arQTgD{uDp> z6EygNfG_a}_@j)oZ6%c#{n94gnVa36XJ+=9`T6VX4*&~T)sP#&AZFAun}CkFIOY>D zV5*P2hJ^?;Ab~g*HQds$q~SJ$UT|IMuh~2ZWWX@irIqqK^R*Ew}MwZ7vJ z4-7?`#SUkm)AS%_#N?X>SIT0hi=S&X?r+hKbcO6D_h0txONLK9o(a@>h5t51SD>f% zU*QDCXG@r-iLBF*?n@>W6#?6*TK8=VviwhVhsWj!2_DQ>l3Gzk#geh8;?+-NiV?4i(G1;%QQDTp|%pcbSDCZeMaH20}QY)7-ipEF|4+I9>!qe5+SP?OkAc2 zRemO}bYeAel{A&1iEBusAJ<8bfQ`~}gVa9UM22J(L&y>!D3J*1?cZQW#@q5Yw&(KV diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5.class deleted file mode 100644 index cfd550b973fe068feb57a33a75e51bb32747d4e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 zcmcIlZBNrs6n^eDRwxzbKop#cI&m*bc@h0ELIQ|}Si}TELi}`Fn(Z!KyR;oJe}MnR zL=#O^j3oX5e~=%I=XRSfECym`oA%y&dhYX_bMJFczkdJx1;890D7Zav5H&$snPC>*`UL#tx@dJy^zD{PQC!rAH!*K2iWrMVo`N(8(pToEoYJj?YI zIlse@SoQX7hG9dv_R~hqwEb;vI%G*3p2eLV?h83?8xt}`hRt4vkzJq^HJPE1d`?4> z=ki9C@AKAL86pVDCvDmlzArrg=OR%kscyfqKO=9}JJIi+@Ll|;G*(VVQCgzl2DU`m z<#Hn#o_9sxOQz8dy2IVFzG+r%ORkQ(c4*o4PjV3y(K8Im*ji{@iHT>NkAB3DM; z@*2KnKN3<^nZKxfTJAQ6>+nWE*H0 z!mx%E<{3tQ>1EmXc~gppl-k3Sm|e)uO0s(z7I0s~MO>n@-ctgG{ONe@UF)PA$zZ$U zdk3w9`{ZW{U& zaDjUAQX@1fwNf$kO=4APhQ!JoBe8pgKBMp+v12563u&czg#J$$D88ld@d$lLM#5gB zpS{5Z`}P}4rp?k%wsA~Q6qjk1Ms3TIq23j;#BeqBkod2)`E{~W#ON!0ger-;(~uzK m&?cCqeu6C5>D>anft%61EN(^Lrs#c+o-|<%QY)`ytN8)s-6VYg diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.class deleted file mode 100644 index 66428be7384a8288a588ea2f98b7076330f70711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10032 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$1.class deleted file mode 100644 index 1d60a17f0791873c4f2c8dccfc9b78980619d9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1893 zcmcIlYflqF6g>llwd*34moHSrs%=r0;@dVP@-j#f69_T!i_`7cF4^wlJ`nuMAJRmz z(S#r1k22ob-3o#RKCEqab{=QWJ$LTCvp;@*+XFC(avEt|Q=wv1#R#se$l`|V-IUEO z6*=Tpf)o^tDY(th?Key>JHfD2F`TB(Ewjq2TwmX8>K?aiRcA{#99QUpZ(4ej`$j{! zy63xr;RiH5V{y-0X%82g8`kvp^V!7`5tmKd^rskJ<`QMjuQ8-%oSI_;$Y zis|`;Nw1i7o6DnPcy$C&PC!#>ip&hOsV#2T_2ufiFr;;LZp#oGzUkPWf;$X5C$LxH zAGV(fzkJA-grrKb>WUM%hL|^H1c(2TQRDI`DdcmuVL6^@*O!FfaB2$1HJpZ~p$EE# z2^1AfYPgGg8t&tPhKG2h;IW1$C}|kP5G8tod7dpY^>Wr~?^ly9on)$60EJA{6>CKqJD3Y;;e{ila5jHBa1f$8g~@QN>RSox4c2 z(A7eB3(7}YKghlpvTM=4nEhOcIiHy&?h7%uP6)}}RoKO;!z7W!h@>kfxk%s?ZMj5k ZL^zDgA@LPl4cA7f?Wad2RGQxO`vp^LC1L;o diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$2.class deleted file mode 100644 index c76da0542c445531e1d03478c555e7beb1ae9fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2750 zcmcImU2_vv7=BK&>9*T#8!7>z)Iw-ANh@1JL8UQB(}JZ5MNa|)uEQKMTrhVUhoE^hEG9#U5{J)bcBx?_jzIWEIk2(Y-l zuDQl-%g}wTun!O{)(yYrR2hzUfR=(WLJe1p8s9P$z;Z3sE1EZo(NP2Z%Qk#U*f+XDn%-JG5p+X<4mxol%0mF8<$Oy`zQY6 zES?cbNQY&?)-A^~?e#EiWL!}(gt&@B_=Mq&{Zzf=x_n#YtBOTjm9eCvh?0tHSe8*x zaUGwk_zYzgEBIW-s)`%9sp1%plZtdvM8>lW=~vrpGR-i!AA<0n;pDBCr!_G+(h0J6 zu0m3RWLT-W&R3zxEWO&N0}CZXG$j;G;ks^kB*fDs#b0(=F%z*!N%{q6?P;(sTVOdsGlwr@zg4$)rlDoJf3 z)v{ny1kzuS%C;~RrU;QU+L@fa6x!uwM(}d)we!+kw|kT%_77FTvBV7}WRPx`hFy26 z=I!934Ub#0$y@NL5Zrfd7a&g3x5prTyRdj%h!54G^c=!4NP?)AM}+=>l9{{@mU)QC z57dg_FqJ)o0e(Y*$|E6)-fvQi@PRe@G7vIEV`PhsknJ8C^L{~e?IEOM=0~s{#2%oh zH1#MSJufAs(eE%em5{O*Vv}O@SZoLKPw0){#y1lC{@L$)Q~F*uMQNQfxr6?Dw5$|3 zokTCy|Df_uOyDn^qxUQx<0hV3c@wSY27!mgmPCZ3jMv5`2B2BmmGVyr=PKJa* xqxpj3Smps#5kfofY6xh$G({MRdfufnGGd6XW7Py_U)-@p1uC-?vW diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK.class deleted file mode 100644 index fa9a0519c1a1b99eeb54436b3f74270e73992382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8172 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 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/EmptyClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/EmptyClassStructure.class deleted file mode 100644 index a434e059a8943a74778fd863c16a6902ff943ea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2326 zcmb_eOH&g;5bjArHi?m!JVZc)4@?kQ1)l{)6{JLCrSK36r94eGLo#t6soe=>E?&HN z@#4jcKSEDfQsocuM_KkPVcE??QYj9ZnVsqH>u3OpbXUE?Mf>jc8-%r1dQ)+#XqLwRnp?YdE9_6{xTxHFo! zG^+1Xo6GO!W<*rDLm-#eEJLL_FVZ4as|SYaP_tCD-m98rGqomtL)SXGnMGw=)ZlufLj+LUbc<{A9V@+{PNl%4NZS4M+!W4v3cE*eB%tG1 z+w0c7b5k_qDcWh&+S8fB;|0D+PQV_#dj~T$epTr+V7r!pzO2wJrJg{&G z8_47755^l=2W%pu41o;W`Jm*YlHG5Oq;L&oH0PddJI<&bx|)sv2|T{-5F k<2Iyml=)r3KQJ;k@gs=tg%3e#4eU1`QQRxajGN|#fAjw>1ONa4 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$1.class deleted file mode 100644 index 9dbef0456cd579702051da5e988567929d8e4833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316 zcmcIlTT>KA6#g1k24)9YkV}+6)Sy`wbwrbx1SBdK!7P|$5uy)P_0Ep$!0gP{%&dVt z=3nF&>9~y>IxXDMFs)%m zpe-sp;mB2idwI*Rn9_BMvM9~3B{wC9s%1KC`1M0;y@gWD9iV9nW5>Rf=}7EQ>BBJ$c`f?urZ? zHLnX(DmVdS!Sn1O25EDeKQ>4s}Y;nK9vb$1v{e3fa67W@I+d6 zGgAUHN5ax1JXE!ao8acifYPc)# z?Hk0Jm)~sNwWG=Zg(bz4Uhr#yWzRV(*-syK?XIY-EMkf58@P|p4Sa!|z@4Migy!tzksA0C1p~_%GVlN^ z23GNvhKB~;#t;k7QG6Umz{t43=e}F%9liRV_B0YTuEKdIRB3v053Z63v^%?~`(A5dLb2ZM1OPb(x!WBQexz-*tJZc$FrUp`l$v zg@g5q^=PmOHf#KbU8-j(u@CGIc;6Dv@nJiAmFXO{^6Nz(1o}CeLJR+Zo*Vla zBKHg}KXTTB0k&<_0Xp#(+x|ogr!mMG^+c$ZcU_K9SKqYIP_AoUmeG+fm1-XF;Q2|XU1r&&eeXl91)atS#wxk=G^BDak$ ph4>)H$^#YZ-p4pjQF1B9sq`=7O1#fxTxxBc?HPVLwKDAa`xlM$g`5BY diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$2.class deleted file mode 100644 index d0d7e06c4ee69266c8c24f2ad22e1676ff199900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2232 zcmcIlZBrXn6n<_0oCZKl=;(Esk%`-A%vt8?p3}71NUSu(y z!2qskct3+KT*=@vt}1G#4jun)7C>q9R-QdB`n#neoO8a~$WiG~{j-BHa6 z$1e%oE?R!wl&({e6=`m4*3D3Q)r!AmT7F=g&B$@hx{R!v9hhMhG_9yf_L8hS?)JPZ z!?4_D&Qj}~<2g}5pp-j4wfP4E>3P3u3-lKq&t7fTD|T>SR$OvU6@5#(4`kq|b&Hu+ z!3pRqo@WQKlQx&dV{>VInz8CCR7cr%n{;F#moIL}O_?B8wj+v+uEj8wn~jzmdsqo9 z9Lbvlh>s;ER=mg#)}&>33J9D|_B+`GqyK=j!<|TOH`-`^-YGhF9F7-=&dG8lttTbf zh_j~QriOWe-mKMY3 zz{q}i@)|v{tIIO1u~2o~!m^GP+-3rF+(A)C35LMUqjZMON@G@atm3YYdl=L4DL&Kj zCdSxyj-vap*vF>@^3PY+$`Y$?9|gwF2C~0i;T@8Z9|#P_%(yo0*8=~`q}MDz-^`13 zN`bDN>S|-_c9g_)NQ>YlJ=3nzxC?hAjdjuE?D;#~A=r+CGFnZBtM(S-q{T<l}v@DU9L_SCo&nF&I@!+@mfr z$T`iut!L=^;wjQa;|GWxoY+BkX=)dmz&AKgqDSBt^sY``*hMCVhidK<*oDr;w}1bZ zoI1IS*Z79L#JS1uXgeKyZqPqq3Oz6}flIi^2Y8k*cmY@O7&BPoJ00R0HgP?U&fvKT zV)7Q=CO(fzosB8R(u%kT4V=R}MC4s+);TAfaZ=~W8A19_3~HFr@ZRq*{(znk$Z<1; ze0G6A83|ByO7H_t7(3`!ULV9;S)f46`XuQzIa3@Hg%=o;I%hIEwRf508~kS|mF3Le EKa*i=0ssI2 diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$3.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$3.class deleted file mode 100644 index b3af529be903edff92ae99c5da3a292417d87895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2283 zcmcIle^VP(6g@AbEG*k51w>I)Y-3GA+r?tl7K+jU4K+|Tv>oe=`m%W?i<@0$cT>SX z{T6-#|J507i=FBCr{g#9t2pD2^ERP0!bpcfn7qC3zPsn$d*0dme*5d^#{e$iWPeF=e6$Z)xk|0N%zs19%sg^l;h0^Z-oE=(Q_)ZPw(=?-_XCz??vD+;F4Z zq`>ux6EtnW*`os57qb#4fVBsVNEev6iQry*HSw;lot^Soi=Ho`Z#DtXQ~#yuj7Nbb@ZdS@;lR7Cyqq7OGga@Dj$@V-5qnU;Vi$ zfx^LHos**Sc9|dx>=wK8rC5bB4nl#U#F^-0wGjqiwHr(M;BB6*EeiDHbqgC`Q}F@c z>fnx8ldfBFBQ4d@{8NG}1)fI*Q@7I^bBvg6p7#Cr``jl*j&woq6i;}gA)^(wNphIx z9d=qjnVflod_c~obQ~4&Dw*VEvVMeZ|Ea2VH{IJ^du6>o=Xw9Z&>f8P&dc)d6xpo) zKxp;wH-upbJV$F5DgFayapEV4;sd09;4Fm^j=hWlKE?AKN7_+%0WWgK_ymn?X@PT1 zWBp3(G@s>1==r4hBgB2AAK+M}ZT4=%;JtWu8+`)bB1fZN;1`%H6FT7BHUhhiHY{qInjur3YgidWQ lNg9{|olOh0)ASTMwgD$_HhJ$H&L?X&$5H-FMrHWq-#-GCipc-~ diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$4.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$4.class deleted file mode 100644 index a2e911edb053f0fc89d44927bb92a3ca74721c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2021 zcmcIlTT|0O6#lj?4TJ!d`$ZHLu{Q}KUa2T@5uKtBWnkpR*`|>O(xj85T=Xya7kuCD<1H&?l1h;>yM5y>$qk1b1ge2_XVvkikZIz_oEB2`1gHY)^VD4xh} z@@*bejBsx0g(dD5bGk>$gD?Gp~d>O80JrvO3iWg9xdKp`LKX5 zjzg4bMBo`JNL$Y1+SW2J`$tB!m2i`xC1-3{TriA*A79Xhq3Ax0VRCCjeU{(UHE~+< z!mg&5J;SzK3AY&D{6p4R{%Y@$?q&XS#|^JrtKQm z#WWN?oTMZpaE6x_!H1-)^X<>%}l_e#;RcY-dmbQ;(73eOOZi+8HOo-fUgb;YB^D|o;6LPPt}3n=jUwGq#HoIpH8e}guWN8^nqcq zm>>n1u5ZnOq=2 z2p41X1o=`GvPy~~$)@B!S_Gcj%!OA{sKy?pd4wdFX$%~W;fik;N5bDr(%4OpOjGum&A3^{C diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure.class deleted file mode 100644 index caf93490fc94ab9d87081787bab3077b4eabafe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4557 zcmb_fTUS#@6#ga&oRAy=QK2XzC@KUrc&imCUdzP>w1QCW^&}kOU`Q}IDA=pEwHIw` zFE8{5)E6GwwF;KHR+oM0Lw`d1PrBOLZ_WuxP6)_iB`jw4%`4zxH zeCxw5T=Jm-mleF?gB!1waOO1yulrDJ58hDlrVl0dKvNL*LA3`FA4Z@nxZ+0@M*SFr zA*pdct|IEk1Y)v@E0|Pp&4&b%a@q7@3fC3f@Sz5m{U}FNYB4RT8A(|THx<04;B5i5 zHx|{!Fj z3C)a*>4{)+N#&r^g7!}S3DntU4$e%jXkox+IT?$^P0cjovDKLCZRUZg$&@eixa{5< z)K9rA+whPPyQ+`$Xvwj{x}dnjh#6+5fV;72NWgPCKEmjf@i@JIY9g#B2DNaMGZmqD zM2ik-2}6!klOA)-AX?6@!KCF8>9Qb}6BmK{QQfqcRzjb^#>OTmCK$`%+_?hbM4%?E zQJ&ZfR2#|O7{O+k`iK)I0^N=4a!rm?nl4ibZ50FxoGHXP0;LgI0n(@y*f3yfk*j^$ zq!n=m?+6@;={JbMVZ$8jGNLRHD_HL|g2~pH6SL(pEOQ=DXqDyc5vVklJDcio!HH1j zbPA;xoiYl93l?O7xg47cBs<451(GVTCyit$P@SQo+qb6~^VKqeZH{Df)F!5)w(@Gh zO!1Df6xzj#m8(~vSid%Kw%{wQqf#kiHB9RV6TGrRJ@N{tay&chKk$xK*5J9 zKEfRpALA1RpQ`u_cUcQn+>?`^%WbFD6ANeF3Djn=nJM?dbbVFug^Dk6U&U9rui$GH z=Wt%2DxCZ&Y1Trvt&|X_M8W<@;2~UrM{r*v;h9Gf>0(JM^YD@`k+g3fe$uL> zH_W5-M@xkRY%5X3)<i`_WVUGA3!n0Id9)5%)x#kc2grWtM zJx2Kt9J(My7F$aVSt9%?5w_(=x&B;UQQrKbj;|uhClj9nrB>fl0XO^Zz#=vZETTf- zI~2L+INl`3n*~D6i`XJCi(Mot1sMS2eAq5=paQU@H{D?lm8pwDgOt41;=;)%|(~I z*Vsy(e`hZvaO@FkE-%vxqtuh95lnt3~?V zV`;gSo(Eon7Z-@S0bU-14BQZoV%X9!K)zkrXzAsVN2a18sZ%&jCweL83@I0_lF*QL z$hEHYS{LV}MP+dRi!ue>w5dVbWQVqgjJ(3wB=qjP*?M(kJ2VAKoswNk3w^kGt zqE@^V*h-HdWG}Jn4J@F30Xt=wvw?djOO7{9(LfaCEs>#T{;AH4BQ2tAe~zTSM3Q=?qv)IQ-`*t4lNEeKZM9N p-Ipb@7#FQ{m3cU1MU_CYOne!;+3&Pcodka+c4y&6k}`St`yUQH~sUgq;ZDEs`$4G3cDxs9FLRl1LKc0+IM}A0tRQ(bD10*6O z7JL97g}5`03b@`dd@j_&dmJ$_5BBc*Lc>0i$`5-;IST_=wZKugANWETp^_@ z3WlSJ%n~l*C={XKi_3%;BAtcV6_;7AcvVI*Peds%RL+YsuVh(K`K>{}VQ^BBD2D!I zAua`vMLOr_Wgew-`Zt&<84I0^V^I`Tuh9%AtwjH2Ap!R&N~7|a;nT1c;c6E*dvC?o zXm2zncgER_+}WH&sXD8YP~{&*7#qJbDdH)aqw`hKDK8>Ak$0`s-z!aj?J>F2nXB^5 zoQ^*n-P|L?E-g6u-w~Y>rp?W0xWLdQmD*^A8Bkv7q9?D>_xgC6eS zsfP}3dFZ0&;Wj*maht6)=oz;DT=Ea$LdlZB9*(9sq?hH=o3qi^!W8wjwwXzuW(SP= zx=Z6GWic$O0DkZdEO@?z6}(u&4qh(de4)C9EgJ6=D=2cXO>BKa@6hK{1_U*psymbs zlhI`+(#n>Jw6;x}KJKlQIn8?2M(`E(X9{X5*Axea+N&3=s2Q~}po(t$Z?Mw@@2v$t Sz{53Qs|ns;3*I&T?fnMM5;y$- diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ModifierAccess.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ModifierAccess.class deleted file mode 100644 index 5a1718f785fa958fe9586ad5b65239a73976bcf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcmbu7*>2N76o&svLY=s#4Ph%;+ESJ#q0}@;Tu_A6MUeubAO-cJcVow)6L~@QID&WL z1_=b>f(PKC5NDhKl4ak3t@%B3e7=9qEI)pJ`wpOohdK;wRj`a(I&R~RlDkT_m9&*~ zlysHcQ?jGszJ^^5CPT#w#$qCzFk)Z>hNUOM7xF1XsXgeN(&s1`I}EEs;X5a>XF1_( zZn+ex4Fj9Ir#uvDya<-$xgewCp&fW8cZJ0*Zcb;O8F7DX1@BBd2puz)!ZkfE?QI(?SzpkM(amn`2Da>!cS!t6lmH~!~)M{$&bm=P8s<@OyfIbTJ0($og zShw*Rg^x5U;46Y+R+Ddi2DVt{?5_+QPF(Uq=7R-A^cdMezgm z=Z;HBd@XTOby3d3iP2%?@TD~0%H->L{Dm~XmB}~q_@y+zoyj-zcrDHEWb&;%zMSUw bGWqp9zLMr2W%3(&yq@OwGx^QrlyCk5bQ{Zr diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure$Primitive.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure$Primitive.class deleted file mode 100644 index 45319747b62b45202eba709351f8cfaea22a5ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3120 zcmcImX?GK46n-YlEMcT!s6YV)p-LNsw8-9yO}fxPY_QW70&bJ(&`z1mU^1x`7jWM< z6#WH$!UYDf3hLprf5d;`@xJerHj#>+p3{7ooBO=?-uJoNocZIgTfYO?g>Mvyc%D68 zV2>9QFi?_^l`x(_2Q2nDEny-71(Py5W!MU)a3(><4)Z9>*dxPL;Nc9@&&t><<0S=^ zP_N3^C&O1z3-xIk`(?bW;9RKB$T%S5ynv~wu}prnUl(xV)RH32=X#$Sh|`8sV`VDS%>gKceRhP0hzR^s&UgX&Yu^s>K-EjYZ^JwK+W-J{-<$w>JZI?qT3U$ z!KPb4`y$j9^I}vI;XJl>baV)~+_p?LU0Sc^hdpwR$lYby$(YhWEYIS%*A;4hY2|Ly znQMErjaALAv+8$i<)tn2f3G0xY(n>H71J89*-C6|+}2$AtdpI|RLeWrt476>IHck! z^r*}6`yc6|w7sMyD}cy-dNkbX(Ues1h| z?u3LdRUF{Qryb9rOdhVTp_!-PbjCuNLa zl*lnEX_74ccAIFJBoQ4143>ih744s9oloR{?c^hI;TM^aN01wP! z<#jZ1BpK6I1<*LMnj_6|?ZE(RII@-_>qM<3z3Ka^Gq@kJ2eVlv0?>z1~_m;Q5YywE(nt~wCgdk%; zK?r9>GboyK3eMw#jHry5j5tH+fn(aHYnBWKbt;=RoC%8;3PypJ^8c0|r}dnzam&o` z4A+)RwpQTTg-q_brso_(E4rqo+1%Ba3`Z-tPEmJ@B(8FMoU=Rf!K!?OA#lUYn(ipW ze6&G2Vsi}AL~emRY)zY4W2R_l4Cf)wSR`pr=X7q(amN(%ZK32YnG}HOqcn(I4J{h( zn64WI;vS90>SC|piL8yt?(!1%LOa84@}-kFmr0~qJiDk-xXtV$?d-F8K2O7H)W=tA zfGg4cxcbbi>iExzHwzngncco$IYaZT%k`CMp7)MKMuI_^%@rNpm^8(?_3l+LW#_H& z)vhop)FFy20?M9;QR1 z&hX@EUFmixGv${*Dk@CjUSqha|$L8oX4C|8@XAh%ioW<6n@rCgO>2pedc$yy+i} z^u9qP5lLN_!qNt$_$LHjBM_F>U;5eFpI=O9@OwUYd&n|b^&NfqfdP~e#m}nm9TYhc qM-jz1PNA3j2>mVaZy_Y(G-Ex#iNi-|;dMWbQLm6?;=NXGh5rH}sYna} diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo deleted file mode 100644 index b4a26f05..00000000 --- a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo +++ /dev/null @@ -1,5 +0,0 @@ - ___ ____ __ ____ _ _ _ ____ ____ _____ __ - | \ \ / / \/ | / ___| / \ | \ | | _ \| __ ) / _ \ \/ / - _ | |\ \ / /| |\/| |____\___ \ / _ \ | \| | | | | _ \| | | \ / -| |_| | \ V / | | | |_____|__) / ___ \| |\ | |_| | |_) | |_| / \ - \___/ \_/ |_| |_| |____/_/ \_\_| \_|____/|____/ \___/_/\_\ \ No newline at end of file diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/version b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/version deleted file mode 100644 index 4fb5f668..00000000 --- a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/version +++ /dev/null @@ -1 +0,0 @@ -1.1.2-SNAPSHOT \ No newline at end of file diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$1.class deleted file mode 100644 index 18a806b8c3e01245f20c0a7f84b38dcfa9f240e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1397 zcmbtUZBG+H5Pr6;y;3TzP(-RIYSmI+&I*dLghZN}m{dQ|2K3|hy3i%py}Ea;{4Eoa zL=*k)k221-gi7$#$R)RPH#hUl%QJJ|e|-K5;1QmVA&I;>?j%WeY17Y=-eZck_Yfj;L=j%+?NgpW7~1`*uChQtfZ`q}vj@%n%RS($7C+*r+*P z$L6kV@+P+r`W@Tns@3!k?RPv7eqcME7Pe4rt{h=MZ}p`k8lIKb(|jVR(NZa)vpx2l@PvK$6<)sn)Ix+EuMR%@8dZf@em7&n%mv zzS|Y5#jspBH|OPrbE?sjPXEq+2lMnd7^lBOB$F|;0VIh-(nRUb;0kCp=&6FpK$9*m z9)T5?ju0sxBl^L(Vv5c<83I?49h?z5)0oB#N%LeNiC$d8EZG~t8o?Q>Z1E!^ld(^@ zwEG3|x0BW}65mKaL`@ECa+KutUy!q>$XVp*3&Rcah>@J5^JYklu|LKzjkx`fF`~FN V$Z(!KOx!!TOO=BVXnRP~^%L8XVb1^n diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$2.class deleted file mode 100644 index ad4bb3611e09b3939bed87831934c51594cf0832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1669 zcmbtUU31$+6g_J@QE^4MG@cJJQ3d+)h-kM3W8|NaMnGM;>ZY0PCYgZT+6 z%#+RHTYP6>AqyAR-)i$lyJ%EpBi%64l96s^aSO{vx@~lKEZntlPhc|H^W)-mft7|A z9k?>^Te2nH{i6dnmSMXU9lOtEqTlnQla$40fdU&3dTJm;?mudKfCb7RWeOTvpx# zM6qo0X{lW%EU+{_A9?7zfgdM|kzIA146Aa_Brz%b6%tq+i)7q!f$aLRrw$W83S$c^ z0vF_NqV!{xbam*59U44|y4q74zA4Mh*~?himq(K2TMxY;ifR5(C3{iZ!hIVRRBhyO z$wmQH3pE?7_+B9OtZre=#t&Gxv4ICRenj2IrjdR!QUebxJhbr$TQ;`wvoU>4&isGM z6w3n31=qc zllA9a8IaBs&gQ1UVf*p6jyx5|&FHWX?kUMIux;ut$&hiL8pCsbJfMrf`N8%E9dVx< z{fg1))G3sDn5d4@0@jfXx@v1zpy1R?BVdOXL~Ap%fo~?jx;dj}CplenMh*|P?`ldr z_=25nhW$+Ba)z0d(tHc}2m&8dsvyN5``z69ZxC~DkouLY6h7fNNgJ@6UFKLASm9HA z#ue@R-dGS^#pm2JzJB4#_^RcRo_~#rboozA@}FLK)q|DCxlv`NucRj1!+B124(GAacbmhVQS`$Gkz3Q`QwVAb*y0}Pph>8=~xwu-#SjkT?H!{<(^ z=|hn64)b;jD7U6h^MJWtn1u>=WDY%&|0t@ zF;iJD3U7fIZL+i%T$9_2+_U7kW{k)L7__|O2yepXzAtE)Jq1K!Smsj{E0i$9Nb`L7 zhGp269|-!gA$EdVRnjtvDBrIT!(daAX44te$sJQ{1eWXg3LY_B;46Xf=0s5O9Lp(_ z!@OJZOfhB2vUL2t82xK}i&Oa~9n*Gwa(^X)Rkx(zv4%0EHN?@Wp$lmR84XWBYZhA0 zD;U@C6gdsgFrnbNhDl6mc!8JFoF{#pTpo#GhE%iZO{!3+)s@nd`4~2L%ErQ~=WbWE zFxD*I|JBOSEd`xORF^1`FiF#8@tS*lT~M7#K4D$1AxZw>A}+l_RCY5Z4>s>KXRv4U=ouOW~M4 zyA+9KW_O{!J^X$qRCy5fPj8@53vOC?=^QK?-oB8(r^A`Y1cs7bL+|)6STRLtdp(BZzVVY8p zu3WPk?kMlvPj6JmJWL%6Sk$nj;V#2SP__N|0>fIt^6Dmc>=G|=v(~DcK6lF{@5nsl zf$#&<@}w|@Tjj1L%uKmuTcSw*EceAK;jG!N9i$o76DI*m?lOe4URf}V7i?F&Xx2+Y z7J11b&t$=~xUu}!}WTsD$M0{ECDTxCj%&dj{@f#XtlT1}3qh;emmNNNHF#u!ctl(pYC0+Rqz!jEsg216e%L zkTbA}r=*Dg7et(rUKzA}0PjMtlEhF^G9B(#%wkn~ue;q(4Z{1kJ{hhn3CH8zro`hG zskkCuil8aoZFi&B>QF*;j)eZ_b1)!p(w^<_NY4_!U-TLb1hdBw@nprUHR({88PcQ- zsEtaTGAPO>wK1I7Q@c%6M6kmpuZuv)jFkKh!*n9KUpTJ8cBv+;fHY}z*XItK+#!t* zC$_da5XYf;HxLye8MGF6nqvEaA(qG|`@nh;gf{m#o;^NU&kdyKI0|w?cFL8n*G1W; zE5Yex+6UdsGr5babTf_9EyN-bB|jPs(SH(CV2IKvO}6srGqWGSWZYtigNuvsu!shon8UtYQonLZQN$(6^)jsp)AtHO#9J}FhU*>Q P4a9MlMmo)o(U+bdC7*+W diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$5.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$5.class deleted file mode 100644 index 4d55745d516a6a29252371ef7a8fb23cb3a26e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1574 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 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$TestClassLoader.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$TestClassLoader.class deleted file mode 100644 index 3fd0903609e6a2b6a0c2240187a0d87d8ef8dc59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3168 zcmb_eYf}?f7=BI?vJw^uC{!!8XuafuMs2OuAPNzMidYR^>1`8MSWGs!yP?qAU+8E5 z1)Zs)b*9sAo#~(HFX-htXE({Jamt6x?3~+sd)~`=&;I$(ufG8}jUN*j!dy3p>j?~F zUc-$9VwjgFpGn$HIoy&%QNx1dxt+ir-0i_V+)v;E7Uk-54PVIlOAQwjNa8EW__chP_m(ZR8#sp6PnIa?LSw zroCd=WiwacX4+p*8LqiNh5~1)aNM#jZ$e-u)e(*9I|8vnZHYeh&snxPU$2%-XTc~{ zcrrLwD;t$NhGWTna2S&=kz0Y1aht0dOQs{B&)T->s8E_@xZMeShhMWI(@>#3Wkuj< z>dnAENQcf8pA4IyVu67+L_t@FLg&*PWpmB5YBmL9woz4)P}LAluz=>6ZmqITvUniS zBXOAxWW%q9ZgZ^>zC9sB3f*`{7D{i?Gs=%xXe!DYmQ;P3ENg*86OgOnp+I^^Ui*4` zmduAtYY?wvZ6p_`+6An)c`fEu0Q$Hkqut*$i^vws~ytHycboJu2}Le zj=ZHOoREpq@g5H7*pCspT4kBHn%9isuCT6jyo0?u9-*S6DhC@if!(dLZWfu2qd2C4 z5|80%aCLa7YgpHj$2U4Qut_vZj;U!j%}|bXe2ecSkneRAa9P6-0>uurzt@{V(7bc% zR;mhbw4(l&TS4U~TPJ>l78q?EDW>_FccoUhmzseP$hKG<^I^p-d#uHEHbvPT77T~A z9O4csoUK&MWur1#E}O0!Vwvtl7+7S{lq|Y_UhO62bEEAXX>%3ZUGHuw8H7d;+E}pN z6IP+lRDqw_33ByX-t>FzZN8j*2Ku~OD#sf^B*#rd6h2h;O ztuiP1P)iL?!U}^Ufw#J#-d<&>=s(K0{A33%OoUCUi1>9Dwi}>s-%NYTHQO^R+r4J; z?hJ+1HSqEQiL#nrd(s-zHysq{O3@gLps{CQC+lXdfB6fcpT~87JS&5EvOem%U=%#^#-0Kvl5Dwu8 z=a_6XR3sJt#kq@fI+J|{ZT|Ql7?rDC=VK#J(4E;Adxq|Pv90s5Om<`&JzK}Os4Afl z$$!F8iXNpIP;s2A1X374nx-cZR})Vvh^dTG6yi`4OyQNl^kp(jr{hwwXjM_1 sbTEZ22jfkJaa?72N_reKn5BjYKIJZgYdFk#kgFjWOk4!h+#|W`KO5XZ4FCWD diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.class deleted file mode 100644 index 8ed0a1594a00aa492b069ffe5ce50f980d90b5ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5169 zcmdT|TX)>l75Dn1T%r;SaUq1SR*-- zW)gF63B5pDT1qeU-U6l2KD2Z#+pAvf6HojS{zSXjN79UCPh{dYFRWQh(mAuw-uv5k z>C^xI^WOjt;;$-HOemOC(Sq~s*ozA)?!r?lJx!^28ih12rtyq|XH{InWfdILDhw3m zMW~oTNkLgf7baAgxT0WIg@uZWZLk$MDt2N{F0QI@;mPy9q^?SVH7Vwrg6mS|yn^Qx zJkOxzY+JY^7WX{iF>IL-o*%5n99|SI?TqE}6QgHF$1mlMU&@c3V;CH}!fRZw`lh8D zj%`$3SJ=MJeWzj?`fzZ|*}fF{VoQlpZbDB?c{YtH(d)zKgJJ~ zFfl(zpg-vgZE114r00E?Xfv^$z!8~5?f9Ij&zP1kT>V6FTc6Z2JztQs_0bynYb;u2 z3hVM0k~TciD|OEFH|fXFZr8y{KL*heN5s(KbGIbIz+%`MBMBi=n1n!NbS3$^87@P* z4vOK>x(DlYYrvE40m9H7`UY*mpw{{3iVQ4AIIJjdCKJ`!K+N7Gs1zCNBQqt2p+pHm zI> z=2DZ=UmnvRF|4R{sClRA8iI-(#n+yM`u>2dI~wlCK8Ac!4f#KEPqO}&hF;vK;Z@ww zupbX7cum8%@f`**bY>c5@aTOWWl+~jB|JNQMHoJ1kcRK#dkS9H@CLrG;0GFhh&MI- z2tQWvmWH3;ZH9wM+6Q@EZ*xHvkNTXe;HMgXhMzMWUiWa&v@5bL$v$x15BtXHa6`d6 z8h(XeOQgSHICblsJm0MvGX3=+F{qP;%Uos7%FaJ={FG$*TMfU%?-l$(!yoakhWGHc zhWGI&4Ikjo8gv|F=)dLBLUR0&VI)b(4S1RcjN8Da_ke|Ry%%G}M1t5rd>VW$6SIchjAr2xZYak6OoD#V&$n6#@Vo`{NJ zAj!?my;qJuPNNeujNe3TOll+|c_?j`K(%IgU47~`K|_@KH2nMVZ%3$Cab6e5s`b+FcK= zKzn+{ofXBC+$-mWlqb`x@fJui8U~I$8U>HtWVP@mJX6Sq5gV|T%$fr@x6ygGkfpj* z6f^W59;L{>xcDe93fXwFgaJ)&uYEb`<$Xy8l#vu`bzjgF!#BT`X#{uEhYFRxm@w>; z;}$(_qGuZH=-Njso$fSoVbj1O*x%`)1^skw3pRIQfS$FG0D~B!RZ7lkv?C86qLnO%mDy z4&x$@;u$=F%NVCmL6u1UitImgKUoy7a=cpM7JKZ#*v>Aw-8480+_9Vc$1w6hs4|G_S% z;KZ1MZxAtvv=up0_7uiw)q>NwfipN88l4nwBT+!d02>_I-$RDKQ(B@m=6NSTb0{Qh zpy>!ONHiS*28pI4z#!3dKw?P6w3PJ63H{AfdXkhp*9gP=1A73S%eZT5YwKr=`0789 zlJQ7$EM3ER+(S^tY1KlWx`*!fkhHt$j;=KA?Zv%xeGo6;z~epiDeo8fCE7m+CVL(< diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$1.class deleted file mode 100644 index 4001e3705abec28a70a8ca6fb75b2e7f52bcac46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2222 zcmbtW-B#RG6#mW(5M~GhEv5Fy+G?P~@DorJE48H{wSxnwAg!%c&ty)S(2z`%46P5) zXYs--T|m3MaP`_3@hx0_CliH=vlc97R!*{i&))m&{Uv|=_1o_N-or)?{diw5Q+oLz zk2Cl%hiQD2!!>-I#|*9;_#}r;+{mK`H}jaqEltiDnAgOo1{SpBb`ITI=QG^VPZXC7 zEDH2)OV6r@fuo{mHI~j}fxhyl+?IADc0D^`%?R{pHP_z`9;;NVBd)oTH6butc7iQi zdTvElq`kSlWk=GlR)S~t6B(;0ww)kUw(@Jzca*)bt^7D~u}0avj1;|hTz7ppz9FCr zCv|ox_Ct)}b%D0|psJWv+4a?OW2>UVHCge8;Dq)pW{i)2RxWCEr)!yeFeb zk(@hWsMaJiHv&JYh`?y;)MeeZm9AT}dNVqMu8MlZx~9f<%UJep=k^V_aaZ#&k6~X* zPCqfAeR~p+!0-`v{>P>}Irk-5PwSdrc;={j>;`^h;B$feYS0KBb=%b^aW=7fty9Kz zU-Hxze8&qS*WXxDaV@ACD4STqvWaszZ(;yvO}wd>3s^R=V&V&YY2YgptN7Z$x{15E zCotBkYyY=mCceRa6A$pMfrlo(!}lhB!2Kh+IZ!wg5*1EZGGLzcH|&xhs|^*JaB$B+ z)r7($&Qz=5jy6)(q`=Z~TzGC2D>io$P8c@ov8pEZFQ)>5)B7>6)xzLub6##7XP3h# zO1By!EGyE`V_7l`8h%wEThKjz(ke^|Ok1l@-PozI=`4n7r7&d?rmPgEEFQR}^mtiG zfY#cNb@pH8K}q0htMvApB(Wi)#EDf~(|G)-Q;}@OaT-11Mrm+H5LR7ZdP$`iXD&tX z5^E<&8-(kIT45&*6iUNQ2t3$s+_C3BAkP%)ji@FtR5+l&QrT2aJaf=R$`a^oLWtfo zTMz02{e@O~@w$$OZ<`?8us0h7d;1nqG>nO=8cxG_;YmY!MAi1f;^Oc+F7s`7hOfYE zZ?7I`fOpPxa_5v&lHqj$7a{N#pYD)u1=@Z|v@db(ptiPp zo9jU0p`SawLyDFfJt!A=7ZzpO>!0+gy~e+yePjn6doad-COyqdd(v0m$SZU%6?c#s z-9hdp@_XpIOEOE+Ov#@xMXl~-t+j_YUZH0Xz0b#X(D(c$PHE-WxTiH&N1cU^dI&kL zmze8iT;YF$5#MB#a~S07dNuY>u(^%qP4X+`3ZKqX($Bm8>GaXt$&Zg~SerffH%9(p1ONa4 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$2.class deleted file mode 100644 index 0ed16c24596e77ae236396e6f8dcaacc33f28a21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2492 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 VB5;$WN}&ZpREqRsZsX2={TFA7;S>M> diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.class deleted file mode 100644 index 8758ca50d45e3b63f15ad904d8bd604bd9c145d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3078 zcmcgu-E!Mh5dM_JmaDo`H%`MO$a)9CHlu94h;~C4*vIE9!P#Wu{SMHKs1F)K!;R z3pM+(`jC0t^;F$)dsHYYB&n%WQ?IP0uh@Uqz1l4Qs`Iz(b1zlt`oLh4r;POlB>re#zua!<`MQ*WBgvz<7qn5EX(O^~e_CeMrX=49NG zFw!j)YZxjQO%=3OvPwrvoh(EgpF@k|wpi|nC^#I!5gI$y`(XH^E-L72*SUXKtW3RvZ2E?dma z7PHk-dA>3`Jx{bTpPihXpDGlqc_ORfuFN71{k~z+RadFMNze`AsjlWbgDTU>09zG; zB;V_HARV1Z?0P*vRVwEtjCRee!^iJlswG;^S7*yJw5i@Gmu?ZA#2ztEUoxyk39G42 z2Fh$3e=|_qnwo~|aT*Z8T`Go8nLFD$b>6hW}SF!W9^~Uox)IoICY&;vozcsj|PaCa*mgO*kmRRsz~bQO>uy- z;pXcN?}u#th$D4d*z^~sr}LAAY&Boh=38g5Ng13F25BUp^hb0bBtfRM zzD>_6Nr_}6{Q}Z&wCTY+v_^g9AtY%Z4-D`w&d?Jz7CH9{XK9eecpvG0d4(SB1$v92 zoKE-mts?RYQ7t_@@&a=7PsFs|RqU&1^g^jg9B@T}SV&|5kj9$NtG!)t&p)`*oLH{+bQoVCHhr2jWe0l+2<05{* zCH#!beyQo8oUqgwy-Q(;N>1P_q-obf5oR%r5sH77BA+H1SdF%=M%z{@y*)=(0`c?o zwE)(OBqjQ03&gV_h|jx$I1qq%B=%Ymwdg92Ry27P$No1!uTaWY36wER5u7#Lf{ps$qIUv7pSJ;h)&}&)5YVaD04l5kK!ue6G_cwZ(911A@lOaS?*{1c z0MHZLb>$m7?8^0CI|Z2vzDFNt1dUDreM8`UOTG3T_1e=7aPT%9ciV8xw)<;%OMeNg t01jal^p~*e4o45(r(AmQ0p9WtA%asRk%-Y92z~>hjD|9X30%8&;y>f)2Jip? diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.class deleted file mode 100644 index 9690db2bde643de2ca60706b67b12f8a36cf7950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3664 zcmcJRZC4XV6vzJyfk0Rg1r@Yb+hXOZY<-}uqA12tgDcS_pb-@|VT8qGgS#6*drm#4 z+7D!2pr^I{0R2LJ*VF&(E)pT(kUr$a&CH#doqK=x-kJI1uU~!#a1K92Z~~)YeA9|g z@NF31MG(ShD=y-aY>mm*A;an6yC{eQl?#h`oV5*|0Zv#}(KWnb1)X})UeZ=d41^|;aCuKP91H+q zR2|AQUJ8y@Tjec^q>3dwCnil9%bqGB7?Cck_!K7#kKN+G0pf~7E)RhU>&@f7(m3MwoVRjlHqif7UYTM9?ccBLpuu_krvvbBNd3a-{N zZJ$-4V7#6$Y)3%mkSr?&UE7JAUbc(tek~u4PUz7YeIlJm&ZlN>&rinnbS$Z0sAg?R zm`}_+OGIM|@sBCGP>*r@2yma5l`=j-g|aYqt2(a7CKJineDr24dP^Fet!Z>M%>Tp= z`r2WM4c9Zqvn`Al3e@esJec0}|38KVFvbS{>(5KKlCktma(Wx)nOZU3QBAxz{5U8W zscF}aHC_dB(`J8DHqtkfiF+v?@9Tz}TQ;pF1?B#o$LZLf-~Tu%_ni81==H7Re{Ro3 zLf%IeCkVr^T~b?j!+{+t1#OmCk6Vr_FFXa^{gtZ{*%gtKXM8))^We-(l?pt)D}4`U z&BX`etb^_QVZw2Q?K1m#Q?U_yRx+?Hn#@Fr) zep|&{y5RM;V&(U?0;cNm>538z$u8r$X5>qP#+>aRsFSLKhqW^AUsZ8XJot={q!Zqw zsR@d_5+%`}z~No7K1w52i}S5up4zuk?F!QoAGHocEz8bgUp zD3sX5!JpsZ(9kBjq%Dn}EuSLHb~ifFgCpq0S++;%OoDEtXp6M*ly661<8i+9zQh^Y zI?C~W4A84V&XS(^njvb2sR>c@6-L;S9&7wp@bw4({tWzkS=GO8&&$J}tZe&!cUE^i z(_F@pREBttrZO#M^wfo71Z_0&G*Ju?#UNukME8g3qI6<}4};Tu7o5WjoX3y2P=V%U zfaW~(0L{WKG`?mpG-tQaC@le+*HzK+OHAPvZdI^)9k7aVwVy^}7b{=07prq0SRD^oz1kHF1yj(1SWA7GglV#Lvl})WY=3}1 z#GjzYBF7Is{pj&Wd3zOM8^M#UEwWMPgWl>st2UV*s-QA-1(At-Qss~od^OdFCigZiL z${#2<*djY8>uR1b3$|+qivo+;|A8~PEfCLnyGmfFV7qF)Q7tNeOBNk+(gm+1oo(sc zdf#NmwfO?(s_QC0=g4|paeL#x+mM;1H-_itDysBAV6MA6vSwRKhrwD__ZgcoB=g#Z z{*WzTbv2{&U4cs{QP)zG%0DcrT3~x_-M|+D$xXZL%AnyhTxKX1x}ki5p9_2PKw6G; z%hpD5PnCk+67JabKrzNq<~IXh$!Zh4&^*etYh38j_eF+1wdpndl3KCDbcblqN^C}3 z&#K6~CC97VZuyo9D&DSvFHPLWris_^x`_+eH1L&)uW`r3H@IWqu8AGoGx06H)71AS zetOTh=yFRQ@HNvG6sWZ?M*c1fw{gDBWq9OfhUVhC4gCZJ@@E=?2{jYzUaydQ@Xq#G@s#oL||vofnunL7BGhvqs}V zh%@Z@Woxg&nP)9==J){{P7fbH$nQ6#!x=P@?a*Ku%M_WR diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$2.class deleted file mode 100644 index 68d1eeb3f9c680b0ef6b852161ade3172cc0f945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1897 zcmbtVTT|0O6#f=ULqmiD3WAEaDCHU~0wPesS`??k3{;+c*@m?Zh6Iun@#pvxbi6P= zI6nKM9M6Vmkf9^hbhPZ+|f za>o=#VP7~wiP(AWi#dXsw;U_TG2}A;fitwpkjT4Rf}x{mIbyZ8Qx;x{mu=#76RdF~OL*ddwvCs|SF}y8q^L=jE z+^HCA;Fz}STTbPf2&(Ruf*B3>FstDl+BI}wR>7Qx1>`h5Ku*D;h9x{ykk{}C1r5u1 z%rI83(oao`hF)Bx{-}58ukE2{8PX@Cuiy#8i$*XT%>YApth7}1+}B5aG~0;MKaxO* zauVpekY%syURd`G&6%N11uIm(^`PUxhJbqM%`TN_;^>uJFO;6IuQH6Ep=RRqR4|Dk z#7Vne#n`UV05XVlx#pSfxIYXYwp?ZiXB8_V_@7q8D0ZXT4m(XR= zO#cp~iQ7q34o&m})ZvkjV8fr$^p18-=%O`AGV*firnTot3g?NEj~b#elA!*Gur?yB z-uGx8`GCYBTG9iDND{3O9Rs(AMobaNG{MarQ_%ZcK`;8yPi8NXf=dJ}jh&1Xq=rYn zq4g6|G30Su$y*XmMNpTCP7vn`tph|iQB?wL&6|2xZ;K~N&saL+`%ZuC`$l~r0~U;&d`+%CNntGLH!&*LCdXt zuzdETEN^!r0~RTXW|`@}ef!+?bpQDI^&5aGJWZevqe&dbSOVj?l0Yx6CNTlqz@(a7 zQ)^Q_m`-8{*A3iA(uSJ`ZW*|3;4VX4R^8B=WSA*9e%dE3!W!}T#bjJpy|DT_raQ`Xbj)WRfY3{VXA#Ne9N_k zN`qah2L7v1r({Nja7c?8?6z*~zn9_4LCi&llKIz;*pjaAg$Bs)MA5ByTs8tqm#Nis z7$RVJTiE2=+^%u2Vy~7rg(EvFc+Cx^pd2?VUzCC1^%i)cwPfwKINM?DS#m#F^c#UA z9=p2S8tr$BO(^fFEApOG^F!CGEDKrnHw?_0xQDEX6polkBWvJ+iHFFUc!ZpRyotwn z!Y~*`zt-@iTNgX2Gck_^6N^|P{L=hFafp6%L#2GNbiqUc%M4fBQDfgani#}sB2>Fg zf8~=k&5(*5ZkEfy3d8eGFgq<7!$4$I_jHqZcRDe;r)q?#jt^V9y0!egH zM@Jy@FB`l@C&)-U@!-Z40gGdN3O%#p!!WJozb-7=UM z8~={pPcS3c-M*VTjzkOUJZ+4TWQd*@XxxQiSo(blm-X5RGB`=2LCRGhz1625cW^PT L?&|xPdvNL(aEvQ( diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$4.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$4.class deleted file mode 100644 index a14ad9db4dc14e9db4398346033561a62624ed44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2134 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 T#`4#KF~o!N&&WeOdeHR;CEjNY diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.class deleted file mode 100644 index f9328b9304896a470e9eac3e6c76d5dffab568c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5991 zcmd5={a4%O6@CN;fl&$}gnYnK(zz`-Bo4IQ)`q7SQF+C>~>N4_vblQ>yF?&%Qj3yMsDpN+W2}^!_2Fqf+BIA-D z2kq%!YsS}cS*ZGkjBon!h%LS%<3&IE@RGRmEg9dI@v?-rSVq?(OPX$m=d|=i&5)o( zbzL*US+!8m3KANJGkV56E}_1+Z%TqMoIkHgXcg-win$rhNUAegO4?)jw3?k#jf@yO zLZ3O8p^l+gI-d)v+02YOqlV^}a-o8%pP$LEgcem(E102l-q1ptKBwwwEo7OKq&Tb= zv>^$*#FRil6IKQSGuj1Cme7>V6ikhlN_eg&^`&+8a}uVZsW}IH%u&gQ?x4jBMbmMF zgq^W@bx93nRed&O`G#{ky^t?0lwfyko;(~p&iVexN?KbmGkLurI0PENE#{J1?QzWsLK{ zvK`dASMY4m*V%M2tD1QuVi6fxD1R*MBvx+7t#>5Jp)f)zcC zaS6?d%&e{wDR0kx`sN6pghhKjA;-ARPM6}YON>rfL1+c4J9%Wh!u)YdB%Hh7J`A|^ zlfdhr>H~(WYF8IBAx-3Dh_U1L$dHKjZ9G_t*lli=!q#$b(u!dVr5o!13sRSP7Sf%b zSjn<3GSd_JqLJ1{Ggf7^P>3WJ1?`BaBMOdUK*F(F%A%Cs7rA2j7)2S&Nc8 zD1I#0wP^H!3k(Qk-&61^UX$^1_<*8_!lz;*$;tS1;?(%`Xf&3L#3dZMZP~q$$+9yEvApoaVtc%{ozauB z)_(VZuC17s*y@BN+^kJwt-y!+s^Z%&g6=>)z3^x?sy5Xc_OvG=qm%K7gdOtde`zO~Y}j#!N)8zQ^Ij4T$_ zEL+ot-mx*!W9_iT(LyA*U|u3A@ksJid_qE(D<>lH_@>NgOrDHSo=)(EqheE~Wo@yQ zj`B%F)9E&ooj!RRdR{!+&z*E!D-_h(Ets8Y3@7(u2cyfQjznl{p~11~QcS&2Ee!86 zvh9i?HpcQRTAQ80ZqY8w2HSE zqBU9XSsNIz>Y6VWorv(oxSucU;@1pGbY46TauniO;<+KX4(TQ@>hKtkjh3(tkMmlw zC*TQujw1=5=i+*6@n6uyD}Khd13Uu8GAhL-UT zD8c?UJkanDf2zLCKbi8ibxf|I_3ACO9a_UqVL-iQz&__~V;Y2z28?eirgsf%FhP0G#57q$$eJ@Xl%U;42KJ zl=yl@CeB)5f}G!jR`L9vstJ>SL)b^Rq-7Sd$5Qu7)+WR zX)9t3OPIiN88OXpa5mHX6C_rm7wlxJ;|e>O>aAqzBoupAoU`nE$LOnSX_Y8LUUi~y z%!70l0phfel|u1wjd^u|eg`h24KI@8m+&yJ`|vVZyh>JHaRus_gS4w$Ec&(-3tO@^ zP%FhESw{7~L*&2)9uY)7Y7<#XGB1g}7Ky?B!=CK2tK6$}>vdA~7Qa(oCsl7V(B5%T zG*G6fmw_xO>SjKQdRNEUcCNW860@c_%f7djB2U&y%m=5QOWia?)bkr2o;J{z3br*$ z>j;uBdn9{CO`g%6-}5``D(oMsk^MoIc;EwW5`U%h{zj**v7E27NZrCY{2f_*$S=Vk z;0ivXOFzcD_?IgpZa9uzEJwtZEfHZ$sz*c}Yl%qm6m@|4)y(MYXLi)l9{YFDId?ke dcIPZMIPsfgIe4~Fe3Dj?erg}>_2GBe_dn*ZHq-zB diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$1.class deleted file mode 100644 index 2685404386700e8fc9008af193895d227376fba9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 zcmbtUTT|0O6#ll9hQufZ1Qo?=)V5p##XE?D9h~V*1xGsg;>$K&+hDrEB(3;!{0Tm& zj1P{_{wT+@q1ukL4jqz7cK7Vr@7%sUKYxAu4j_+5IyBrcFapcKP24hY8yO8*gTy%v zvl`|!EHI>^x*J-H3{Ogq->|voR(OTmyRC*Da#^kT`}R8?i7>JqKM=N%buJxYZ}Nr+ z_qZd07ROaapss zD!amoR{DC^tN5N9MuPHe$FSQ`Ab6t5)4CD^#jY2e|msrIn)(u z;-w(E$#PxDS3Gj+R27DyjJgG59Y2aP5;es_t;M~j*m^_d%@ng;lx%Ad3I1EE7lH4H zFf8~o3VhE~kYhpYL9x*gRhPP!_km$D(*@mTyK-r3kR%)<^SDZ#bp#ALSURovM}2sR zJ`<-&dWL3eNYD!yx!KQPxvxlkqE!N;^iPovFpV_*rw+9+h6!4cevHOQgSbe03TvHK z3QJE{4={9qWCzNKH)hD0%Uy8#UpSo%oTKCC>3EXH3+Z(No^As#(-;HiW`AJ#3sN26 tZXZoLNY>k+f1wEQBFPh&A>(SiLU~bUuHibyX*NzWjYjq8n8&4*{u}Yt;Zy(s diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$2.class deleted file mode 100644 index c41ce4e0acdac93b553020cdbb54548fa20eada7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1750 zcmbtUTTc@~6#k}^E?u`$K=H1qs}u^X7VlgPlA4fINTk6RU#8ok-Ljp9-EHCT_!CUL z5Fd=s{wU*_Wuc9<3B)$-%$%9|&Uemy=luTj<0pUumeUx5sUwXCX{7K_$0Tw(rZBA` zuhZU)hFJ}B8XhsE!nzZfGs;Ex zTIWp>>~dR_X={}SVu7F*9qEM23~zG(i8ZywkX-euf?>GiNU`2(R)k;X6_+fdCC}#W z7WW;sj*Uqb27|FCrSMl>9t47xEC0vCEKpRMCs*sj-eD;84~y?QmS_tZTJJ^J@?}xY z7gQL7k(t5jOQrW+2EBM-i`~%iWT4?O!^~OScO0iTotorChEirk<|qu|GkhvFc$-@; zmo;mn(hzpI(3f4W$9J6|6qIKxg53;#!J9F7Dc&->Judb|?;ZOxrCs0jTD~pbI_k;C zPswdgML_B(O561UN7mknuoDV}L~Zr}x8YItQ}0gDW?{lwmr zk%7w?rxNLRsaKLtQ8o(<*?$wSVTs}6d2r90e1@@(({kPS_K(VF={!zP1;a3PAa!+ng= RY?StfXjC5^7H*}|e*ud}=w|=` diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.class deleted file mode 100644 index 22da2da88c8ad5ec76ccc62d2b56c371fc9b4280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2595 zcmbtW=~LTA6#p#CJ$M|JwvvV%Fy;HhW4t9{qL`|Usf{_z)pIsB?&1T%dwRD2P^P0Xs8)6jz% z6?ZkLn3snyReT+RhHo{ZxYviIiUke*n3ur&8W!7q+2ny$ww)b@;Z~Gs`+*>P7@l;bM5V!Jqz{A>;<;#_$pQyMsqbMu&ZLj_H7Evvg5b`ucJv3)Ae?Y-5LegkdBt@ zdAH_SV#Sv6961+;8EK7<_b|#3as27fc82?%1UKN`jtGnsQ+0fgM-16cgj^vwlysd) zJZEfdR$7|T@dH*>tT9Zr6UX;#L&zivQzcfQFj1YzO-B}wbv!|i;Tn0Y8R-A5+?3Avw)KO5*S>3*VV+rT$)cl*?}B8D`q5 zafYX!;dIB%W;$=$LHV6`8UBv9bSLVZ)RdDgkgyY8dfDknUrKt~9cH6zC$}zTI$N$3 zf|G1*cIw_-y0D(3${#p`leH`kGmam~aYgec-pZaW?FvhF)2Q`s9;7|b_42hU_4-!d zG)T8H6B+8aVJm*_(TF>Ay%)wZ&0jB|Y?Oo83)1^FUZGjq6VGI1;$9EI89!a!3tloj zZ5Q#2YT>lkE}U+saulD?TVaG=A3ztF909bxPbY(RMte`01v8 z@Bu!g6T?Tu+%1_|A0qVd01gt-u4wmfP~M=Y_!_-$pcYA9-!URZQ~48Gk&xH&$Iw?3 z(d$#Kg#D6mKoYJs2?r(NJ!Nn^F{&J6sOK%QE7_u=WRDU39XBSAF+5Fwscko;wh4L? zfy}!_T76D?0x>KhPR%=p0%lRAN7p{?qK5gpMf0K74U2A5*Zr6r#E8$t9eheIN)uO% zVBN%j2cHp4A<6QNt_IaOeTBGj!o>-vkc0`shTfZ`y$e(Ib(%B-$x-P27XH-6uHh?u NvowkyNh7m2@*nBR{VxCj diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$1.class deleted file mode 100644 index e00433824188850fd7660e80a147bd16911b1d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 zcmb_cZBG+H5Pr5TJ$jt>g!+bpsHc_|Siz4F60Ox>swIJ7NKDN3Slh$v9^M_u-|;8- zK}?J>e)dNhXOD&w>?JheF1I^7JNwK$bF=g3?~h*qmatSn9`{TbxNjl{$G`)VG!G3t zGEg>9VaUfFFLE9;yll8ZmkZx(iI(8I2VEWswbKd?`6m&}DCTYuN-kALC|C0JFmPoQ z)dCfVf$z(3lT2zNlFJ0S;wdj)Wq4J-Ak5hS9KQb(((-eCimj_bC{F(ef`KxPr zS<@Lw)C@c|q`_wy=Fa1;@5rnlx^ge}0u>pkG88tvwi5AvNU5_DvxJ5W8NM`j#ev|y zP;K69?MgRZPK|C*QTSdIOUgG-U^n7Wif#|Q(c5xPdt6CHAIyD~(r#`9`=Kjec>32* zrLG2p zE<(|ju?*>AX3P3c6whohJTI^PUz4*#mJLI57*6L%Bxb0K8ekX&vu#~V)NZr%jlm-A zC6ZQ=p%*YK)o);x@5p?mRR))7%##f;i6V{Hj;&y0oK|F?pfR$b66;|#=!C{9RkI^M z&F!pRZf@u7mF5w$Z~LfbVlzeOrcWW4PLNBuO5T|Llq{~3t&Z{u%^JB-ss2Xp2qS&C w(?M!dWYmMYL2`~XH))(CIfL7nO6FJt*$INQXF%`3g$Hu z=M*d`SX7W_NC!>ZHuUm8aMYkEz{?+UULu3_dF1OU|OyxOd*?GTEcwg zxt8$#qALT>bsXVslS+~MVvQizZD|J^49~MCggL*%kSe-$!7x#=rFhwH)rgYU9Fj~` zT#Gw9+_S@VPnZhbV$jP{3a{vJ-xstjpNu_5fxJ{)S!@dH9YZ1BO}=lNq9bHrJ`uYV zzfw3~3*8xu#0+MvNyE=FXr%*7><6|heFY}N;&JHv#OjvakUVI66goW;M{Wp@;ZtRg zcev?r*)XfMJz)iFvDOVs3di;XLGd;t*sZ`5ywwA*^tOya#`ReA;l6KB*tIRU?OEcf z9bWxhY#Qc6PbgbT(sEqimW>x8Xu5R;%Q{w2(4pa!4jlyrt2*xDo`U;29^fIvQd}Jj zHA=@>%uw~j9U2y=SgVZ!L+0;0Q1FQ1%_#Vz-UGvQpLDzFxgWZfRT_mf)+vU3*gp(o zzuPn3T1QR8Ff3{(4e?q~KFX@>770T#89+-L?cX5rNf=JsO~b%X3O&f`P$Q< z4EgW<{bME3coBQK)e?1^TAlNeVJ15O-7AIAr0OUUImR{M8nxqbFsNXeOqi6^yp#0l zI8D+sG}}OeUO>w&d;!aSL*g^75}2TWnsk6XGW4JAYGD%7v?BcojgbZ=DD8z1g>B%8n04ZLYnKifhn3z(VjwM_^4RI<+S<-)rI&F diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$3.class deleted file mode 100644 index 2b16143e6ea74adf89756189122c3c3d66687581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1919 zcmb_dS#Q%o5dOADOkC5ZC--e=db&{VmO=?>6%=Sit3Dy2jk8VMI_qLPZTUI;1SBr; zfOzIdA!Z%ZL=dA^YOHv7$FtuzGdnZ;^VhfU0B+$~8fjeDq2opx8b)hMO8@8B$@@3CtOW<)ZD?EbclbUgFl)Zp{j~ESJ1}>n#sO5L&k93rol< zm$tB0ea{v_kn?2dd#)?|byCUkK+F;3yd#}(f#G@fm@vmS7`k#^Supe!9VuScYbB!O zC6^=vMbGB$2KODcj)h&yEe4|?rSNku4+25U!tvN+&XSj!Cv#O{Z!_FVc9ZWome>_C zv|fp@?#sNI&nb7hBQb-OXj1#V40?Xw7CWKi$w0$xhRMUwH;L10PDOGuhC*jV;>Zo* zGrTWu@m+4YTvn`=(w4BpxkT&QC57t*p`dtM5$sy%3to%Ci}5G3m2o~1y}j=X6n1^h ztNXTCa@5gZOiaURMa$~sFW4i7#TXVs$NoFl#r_2o94wy%Fy4G z6=WzXDx0-k?$*W1Cc{X!FxIjw)}Uk>*{V~gvNnBQ6MLS&Z7out@IxvL)iC@p|F+Iu z>KmikmhFEkqe&S{l$rm{mw%!{hWk-pDAa1A>`&B*96K)4U7&-Z z2P~6O6+w4MC;fZTN74+<7SKTtppQ>{0vrE=jt{izKtH`xqys#~0KG>VS{TGItw=vY zW28X^LEjYCDvb(jXyPL}yT79AE4nk~XiPOxdm{_-WYZF%Ew`W#9iR{4G|mwASwicg z@myw+c+ST>voTM4eBuYR&p6QpZ#CJ7%umOl2T%lffnYmuiNd4CE4UibT!V=rnhlUF OO{4nt(3N{JmHrKU5+m^d diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$4.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$4.class deleted file mode 100644 index feeb2b4ec03cb26869052a539a4b4398d7c0b3d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1769 zcmb_c+iuf95IviwacvAuTUzerW*|*3E@`>8s#HY*1qFg=RSATIHqMf`IO}3Np?nUX zzynb6fOzJk5M#$`B8X8V)t0@xv$N;S%+AcO-`{@#DBz(A1=lrLq^F0rQADEWw2~)@>mzFS} zd#)vXzv#-qa~(%`+oV$DzE~s3bz9oO2E&uwF=5W_FrRr(SS2qNR~DPXddE;mc9ZYfrsxP6nA=Uy z{ot3v`C91CXe4GZ6HOX?mO(4+TVgM;UFj<@85WL0-y>GH?1tn)+oRCwkvMWgcnqH^ zyS&3qhs%apt?ddcSWC2SP*OOy9|(%K8NqG^p5Uz*yb^C2{fz60=!1RVps;IOZriiO zBRjnM*~Bzl3O%80DM`z5eOor3ilFJ%6)fwxje-shCv@m2C|J?4iaQGK>bQsd42wy1 zFwiI+r!h^{lXPfMoD!`zRvEH?-+_V$46ld5ANC#?rh24NqIN5*Gz@8?Qw&RC|1gZb zZqImQ9X1Wau&A9h#0x?BD66ttBn%_DutX+$MwMkC8exhm9qzP6^)16pt~}S5udxPY z$baweA1jH*i`dJpmZ;m*>YR@Z)44wAxD-N@s>4L&2-kos)Q-o%pn_$yVNz1_9-&Xi zNs^wT*#=Vd0$P6l3t0XeQlDv+!Z`giqyy|AOaGa!7A7!7E7Fh97->*~(q4$QNvjY` z&DIYva)5LXN{cpLk}n rIvphT81xW|056a{g-e)?#>*6!kmf3`VUlK(w5QM*J}MS*F{AzgWZC(+ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.class deleted file mode 100644 index 28ca99a441781cf048eae0e63656eafb9a3cf6a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3436 zcmb_fZCle;7`_iJgw`Nfc^NRB+qzj=Mkcx`19_`K>jK5L;5ytO4F?)*lbWP}KWQKJ z1MZsJe!zazu05v#p}j27Yt4t8oTty*{ha6J^q+tK_#40^_QDv&Jqh21FoN$T+z%rt z_7B47!j#zjAYmqi5N5-~F&D->7R1+L7)d-5461~sF#0eh;c*xdObPBMLSIV4(=Y~o z%8x=yldvpdg+WeP7I%^*-F3Ok&^2RPrZ>wFh>fi?1e5kQXXw>Ti?3A61@7eZLWw95 z%{KJXy6%`_e@qN|MU!+q)(pF>=q0nD7j$KBzpS{rwOz0el~=mQT~9G=hb!DF>XyNk zRmV2C>n3f>bL>)yED%dlclk6!T(C!@6`y6(_`nm58YI2TS9M1(bB{Y@w!37y9w#si z&sy@}L{3rnx#eX&hwJ5JksB|$qaCXxUwQ~srAnr1v0}KU?dkivQX)5$8i{xY>!b3z zauS*TM&_CLEb)icLxWd5)3#g*X@=oU)$+_TUpHNo!n$Btwx`#AX6VywXII&)((x!F zL?k|OQFt=kt2$QNTI4$v@)iVq!4?E^MaMp%LkMT>s$=jaQzXgFre`}LVkhGUZZbS< zC0jh*+2x*+)JsOSqmM!%ehS^s1oTlDMqhh#z+6rog;P=RZ)0(|Y z)Kc`Uf$6c9;9NpI#prgk18gWNns1BhQaYnjXKU(4gG{Xu$wv2q?ioeX+GThfYi#G! z=W44z(sNns@oFdIXX9L<#|F z_~ewUmMh+CI+~1{Tg%XuWb{nksF_Sd^>pQ)WYW*GbOkx}Om!UFsk!%}Stfj}R_cTO z(ZOGryZD@LPNQ^P13JOP^rH7?v{Pthf*OAZ_J%$>aEsnuHDZLs0NH227xN>k+Oj_ie|=k05vc8O{fS z>3lGlK0?p$xSBXZuP`2{86P3@zz_z==P0c)GCWUTkMMQPpg9q zn}84$Jb0PzD!Qw>n2*o5cL0}YCfHBV5J-&fj95JjoVU8lOeB>>PC3c(d?Fp`r`#+g zO$*6$)?Q}Iw|({?kY)?TQ(qYE5*!KC`^8X`pIH`&TZ60`y1mY>{;Yb_9n+j-NqQ)I z`Iwb&2b;c`S;con8FWu7`@XkKlj>@=-NJd+Y%i9(362FGe@pQ~o}HJi|s_!vp(YS;<3@~ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventTypeChecker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventTypeChecker.class deleted file mode 100644 index c1cbe8b697dbfcedb16792d9589a23a4204c181b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3439 zcmd5*_WxcNI0<$^Otr^m`%Canto!y#Im(F(C{n3#3 zEko@p$2YS4JHel)1o{`VOZh@}E3=%q@o5 z?0iPrcIWPgdOK6#=;-ZCgHUg0E*u@bo%x{WR@U3f&@V?K5ptH(Rsed_mSg$z0&|mH z)$Ny$Al1V%JGDXeI^%9rX*GwN3@D(Axo$EYYb z$17b0ytZ>v$_7;^NBZMMx8a#;$>NPY7ifR!1vtyfbQnnM z7{QppNHBMnuieB$Sx-2wpQuUStd48=Uc(PMws1!SeN%?1VO!u%w~PLjmeO|b>rfbD zjUVeci-eB5Oy6fzVe|o`Dx>p^EJjm|b{I`Fy2t1vB z#sa7gIP5v@D;U6Po1?*&qd|Oyiw7L>7(41i3hAb!p99Ij=0DJG{eiwGi2aFpNR9_Y z56Ovu^oQhRKn6lG7?7cmoC?TWA$dC>!>m~Z0Xj?D39R7+*6F{OJZ;QX(sT_AC{Rz4 mw2aeu1oQYhXfNYkYDcMml*0PXrBN|0a)bQMWK}VZp+ph3^<9SN4R`>rdNad0V(oM8IIL zDkXwtkB6ZMX&Rq6*d29~bF?$n*x`HJiL~^bdy$AlondTEZYi##Krrm~@6R_}zvXaG zHhGgfJ9{lBoC(i%>hR9|%XNZLVD5crw(2m^d+kH5~}vN@+CGt+UWhRw zGB1_XiwxOHb%P~9j2LPIKXCu%iCu+EzvtrQ!+%e@UANHb3tb9!6Sz3vU0Ch__} ziGAH+%kZo+Y?NMOREMpeE@7ptqf>8sGfHHHb3fC9Z5 zuC&_vDebTMQQ(Rj(!AeOF|U733KvaQVmN+3Qd+jeh72V=@g=2v&13Bh3j@8}lY#hw zjI*k=2!g1s#b({chxmx$XeawodU+x?O;)l|!chxLHm+mY#`joZ`0+5ao{bwg$1oGy zqntj_@~%n8Wf_*~(q&=nH)G=_Zdq8h@dIu%+#ND0DkZT!Jg&B!yUiWpYKFN%AjbQ> z`Tc!LXZU%L(ElnDJteNxp}M{u_`f7Iq0n(?T+S$r{l||@Njz3bN?F(C>eWY7UfRCr zQ6yBV|J8rS2(MY}zVk%1{H|Ymk&Q3&?%2|qooT594_Vpm5=$`Jzqac@RtNy6E zff=gr6QF8BU(rMw^~dNxAcJY-XiRZQ?QvRJM3zRtWbHXv?G-W)pCkJRa?j$^A5&|7 z7=S5~E8zroIX5|d6B-GE+=rf#4!EUEuB?I;XBMfg~5$I?J{oGHJ4bF5ymJT3G zIFAactrDcMOO3wS1KTVRgt1MbIF^9q8UDn0zxpbfxz=TxLaIKC3nZMu=eS7y2&r^kzBn@WH>3N|8UO$Q diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.class deleted file mode 100644 index 99218cf6b40b9728f32f230c8d4c5ec404bae97f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmbtS%Sr<=6g{bRs%>qxir~_P-~$Y}lh#5J1YvODqpmYEfu_tPHIpg*EmwjIKfsR? z@3f^_Vd%mHlAM#9+;eX7`Stz*-~xM9tYN2uRt38ZUPo!=x(uCTKQsv!u?j>W_;8%? zROl!$6D~%I$0~JFOUvcN@m@4mq4eie`=rlMzBZ9$X!=UayDSN$eH1}VOv^W+i2K5- z9M8$J8>p1wxiIC6a58l~G*)t{2SSJPN5ZXk(%Nj~WHeLKiv$6?5X8_BOA;9_3sbFf z$54GRnGNNQ%KaRz%6>i+W5IB6pJ}HO*;lC|<2|j76HXaTzOM?!EEyJyGyGT5b{%D` zGdvYN*S~7V&@H;RpiqB`k3*E`gXN7;C#f`ggu29+X!cIe-oRdIRYHZv>XfZfTpb&P b_h(Vqq@BEZsL>81c8gF64K$}L!#3~@&lcNe diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedEventListener.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedEventListener.class deleted file mode 100644 index 929ef5f9b3bd81196c8de9945b24ec98a73128de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmb_aO=}x55PjpXO&zyMoivRTdgv_)r2<1wZUUjCP;eV)jqlp^P|NH}?yl_mZ{-xo zAwQr$DrB^A-48JI(1T`}8ND~7r}=Sra|@u0!zQZOi|{?bZ$IyJG5wVKQ`RcJek-9mlS zo(r!Mm$PC!);3|4n!>Z?Tz#;f^L#e-Ji3^(_5Ed`M~Iv)Q-oJXYsvN0C=NhX-tC3? z>t%v){Ld&t^J0akD((_a?mi#kwh9PxM?9I-h6On~aC1Fe1#kwa)93 zi*UMjh(83;E6neb^jfH+LHPJzwIytaxmBv|S9KXrIPrw;x)wp<)pwO5|NJAu&M%(9 zICtN}THqxrvR|@BvTPOc@&d7uL`pn~ub*6luFCR;*iZ&G@JMXy;R2f2l!zpLEF=N^ oMouN<{sy*6;NC-V2@KFD*b=)fkec|XQg4?OJJ=N;nmz;W0Zb^<`v3p{ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.class deleted file mode 100644 index da1c464249d4f59e3f0f56581cd4faf582c27773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmbtSO>fgc5PfSqaca^JQtXz7LPH6prK%+m6;ex4RTU8_1&KtJP%o^VRq7JkW$l!5 z=h6#5f(sWeoTxx5cYX@LfD>ib4N3$@EPH2X_Pv=mv;O|;%PD|6Sh7&S4GSi!1>98j zmWi5$92QJ0nz+r7UkjojU1!j13p)(PX51DGbT8R22p2KO~DLBlJHK} z_CEjys~PvCFCGPIFyn(pmKC;$5m-fB#tfac9@m?5^lr?xwwkR<5m#}IVP=r?Z%v9# zhzI{QP=<*?g{R)W@KaRi@(c7+fG(dYiL_oI&n3%Lbn!FTC)#Kz(wfhLI!0+{HfG<$S+b4gm0a1*oj_ZAYp@SzKgu5osAtI? z(x6Icq{$&wvt;KE24CNoqOmta#|BZNaShAHxFXlF#onV4qkqYi#zn%bhV z_qE+8ibhalru;&c9`0)_E9IP@qfBYlW8g|w;Ftvc>F^$9Q{yp9`UwnukjTo&CDJ%K sG$gaH)>0SU7jl<6QYl8hBKMr8oc~77u$rl%1S2$n3Y{}t&rtKf0iFi0SO5S3 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$1.class deleted file mode 100644 index 3a0fe1bda0d6a790e2203e9905c1576a0f405e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1143 zcmb_c+iuf95IyU-acbO#-nichB`FdPyn>KW08uF+MTx@m+Fo1-dslcj75oqnydXd- zhzCA^k3x*ysEq_tsT520&Kd2QGqXDDU%!9+1aKcM7gd~fv4L|%bl$}UTy${B!DRl>D&*;i=ShL5N!#oun!($aQskYK zYb^-A?1n1yd71<~;Qn|o^EH=Ipx*g!xe?mESk-4E;Gz#&Ejm#80`5{eCbOpqLg=sqoE=A%yPB^!>KfCZA+N7D7srBWkfQr69u^ zDI6VRnWPOnCmHmAL>ZQI5zn;7u-^PjxHUo>3v|^O9J+xOddWkPMVGZlF+Vm?qL%o5r77bcFH5zpTSF4ME0I9GrE&u=k diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$2.class deleted file mode 100644 index 13fcc60098a7806c760db8d0aedfb97b5512b644..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1290 zcmb_c%Wl&^6g`uqaqGHGo0j*RhLWTbj=BXQp#Y*%LO_kedh86TQ+q~uoC-dR1?92m zh7AI~331159ukp4r7S$Y=X%aPbFa?$=bvvU0CursBabUKF5#+)uGzSb8y0R_xMkrs zL;g`9gXA$owp{5j#JC}5tqCtVz*A9p?Ftx(*jRaTkw^|yxApdoiVsE1urf|iC5Gi8ZW=WD`eKlNwNFbv4@@iDGbJDN z`4OinJd=K?bRc`pRNcZ|2U}QjuxOSN?m5`TeG6p=6;v5ob8ehr&78yyx$L%b;Xw1lpgGt24C}^V`w341e`FDx`@Yb+RIAmfp>pM1j%h0YaKbS{w`BNXPwFHd zL_!)NCCM_2J&~k>3>%~{9%P!N4X@7A=>Le4O=HoUI2yxd`5)m*2Q@6vU1YH6iZ0MY zb|Pd`^aL4-fI{^%*cW7~$H*Qd_mNT=EYrG*EUllA!!L?|!y)9HQm}#oAu`RV+)j!q zH!fgwfv*!px-MtL_1VOesl?)J;`gbQ;1n?QWF_mz(soJ=Q$awS+pt^It4iV%9v%O3gjt`(N`T0-+TK1E>?WK_`4Ibgwr;5-fgc5Pj<;HgViG4IhP;(i|dGT8Tx78;DCP1X9{aC2Cc18rw_aV0%^DsSp<~ zT)6OGI3Oer`~ZFwVr*g*p-8#-vNP}PyqTTZ-Cw_d`~>hA-6m?dZKIAm7IrM$wXiE- zW|JW8JrWoWJRM021D9Nq)2m3P6#K4zFE1%mX(m0LC>c>qW0lB0gMlVr`Tda6^oTNg zt!Ig+MjYCwR6XU?&w@C}o(r7rSDgF7nLxd-eI>9l2x4_Ii(HkA$PJn4475k#86`oE z=VU!^Q=s)Kj#YB5lXof+a0*m3pm_65wWsVY)Z%HZMJk(UfB5$0jE5*t+t0gbmF#iO z{fjx*Ma+7+Tb|hdJLDHZ-st_6m+){(SLDEi<=`4R7WM=#D!t~#CI#AgJsDCwmP2={ zyi8zJZMkv~X6YPPnjc;MBXtNgAlmJGaQt-|FnD@RW^G1K7#VEsgTrqS2j5|QWn`em ztI09I2ROVsg>PdGZAJo{=*%-57MQvJg&!A${21oK>#K#ImI`mI7JgnTyt!KVWr@(h XE$+;~7B<*+*sEb1>ueir@0ra%IjHx7Q-c%2q|xx|%EilEETMmO{Y)6I+^#M3ep@TyGIOmyIVrWw zYVrO~f*kH^^&u0lH=T*FdtbIFCPeZyXCnY(v>lMuyRL@RE@%0^rM*Z1O3 zsl(}`wc2(C)DvdEkz9-2@FK6Y2!z#fvmbV`Ct>)<^P{>a1VS%PKmLOTgaL+e>mljT TU=sPfQ;aZ9(x@BZG)aE|m)wT3 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$NameRegexWithSubClassesExtFilter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$NameRegexWithSubClassesExtFilter.class deleted file mode 100644 index e55a9b27fa04c42720c038fe530ee14cfb07c9b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1244 zcmb_bO>Yx15Pg$PlQ!MbGy%#-fgn{S4FRKGi#QNKsQ5iJh9SOzL+g)&WFNF&?v zFzKjcPHo9l?KAaL9clB7Fsd(@+dG#dDMA@_McX7g>h8}XyC;NvD-IN4-P4ge8uopa z97{iBq~gUL8J@^Q+js)ztrdjYk?gBCs;kDQ+Vt8(KU1jEmt*rvhejm?_aKT?GQkOh z#md{BcL4Tw%{nm6vw~(UVcixxRHhdPnI1w_rw36d90ux_E`n3veajTnz2|XkQj^F5 zp>%PpESz22nS1MxZATXc6kROiUJ*4yw9t1o*Brv$Wew#(i?i$s#nif=SK9oCqTgP? zgZixDvxt3zhnErm*SA8AKXD#}B~ZC+jpo1YaJ-Ba9!ng(%Q67B@$eI<(R}n7xsQzJ zu*%~V-UV%7i7Hs7DqO}I%*gpzLz!p0vb>b7Hc;V8i&c4LJ6*-KNv9^yHY=C^V8@KV nU=iBPc-@QL2`}OLY^C#O<14Rc>p|)js2lb$P6{V^d`IL%*{RWSxgmItcMj8vXCw zo6c0!;dpM0G_477gz2xWuGsAKGAkwbXV-r|v`2|LT%2{gm_X=-=!dV+fG|K5svhDt TD_jJ;ZW%+2;w12fxQvq@{jG^= diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Worker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Worker.class deleted file mode 100644 index c0c8cf4dce9af921a49af410f49bce228f2ade48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmb_Z!AiqW5S(peo~gA~y?GYVix2#Th#**swAk||S!-kR9_Gd3w|Vdb{3vma_UxrB z>!m+`?VBcV5FeZ#@X`g&CeO&nFSsFtB{NjNynEBTxmzz~3gtOE) za_6~_BCR-tYi{{>K9|s@9OSa(H5(ie=DDveSF4OOw&l9EfnAaLH~Ye^F56tCY|W0B z(%64>PdBOJ4H@1#CruYa0%81PY%6w4JIzYTTf+Tz6HM6YQMx|cuJXd`9SA#rIN7Rt nOd#~M`iS)J6sZwnWj&a#?_#KUqH{umy*N>p;6O1_JdBfXExoH^ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase.class deleted file mode 100644 index 577890d8adad7c549573be9fe9b7afd2f6c81b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6721 zcmcgxYjjjs75>g-k~^7PUPAz(4=4l(3Cx5@5krcFgg_txngn7XwA@T?l1papz|0+l z+S+QZ)nZlD(x=t*;;Y%cU-tE?=n2_wt87e60RJzjGgRZy*DK2D6g8 z&pCIWefIwLKKtx*^Meboy$+xr-z!HW(ox(7Q$Z$z15q4AHi{DD3@Zk!41P{x{Q3W53VgVkJ!yl86k4x@PL~tyEPb&CS1fP!J(I}SUxRm^ueEWC= zPk1YoD0ni8Iy~hKC=opEwM!%TjMok;I3bOpqR%LJR$#$4Ev)Kp9Y#g{c2reUq4fz``) z351(6{S-W{%`o+C`E;M2?b7;E9Er7Ml3Hq)mNjJG9SmDTMowURQ8mW1yQnr@gs4f& z>C|e5RH{?rnk+bIre&=X%Qa#LmfGyUKRAguNqgT1HymW#kMRyxuf3j+<%k zoVHAMFtI;R9TOY$0itUw$ytk~o2#mdnpjnpGIEwcbRd&A9lz7qw*A^6Es@g9!GtGB z^%-=oIL%?nTSh9;sasqr#?=qzorPtrb5vmVSSKAh;5n-D;w2hu)=728iftT^OY$u$ z&ev&W4Rdg<?Vk25qv|@`uOR+qc3??`ueIS)+)(15Dq(}mTg3qb= zJiZ_WpH#64n*}jqNS@r$h$&db%Xo!pPsOV^qv9;iF?ahI*x6mh2wqb$im$8qhJ3t^Z#ufi-O?e> z(jo4a4sj>w<8o)k-O?d`#T{GaqA`gQ>zTKUc}zQCBnIrVDp9DryfSMKC-r)I^h(ou zJ==O+<9coDdOh=cuWVnhm#9PW8ksuYQ1LB%TRP`E0(V`X72`E~+V4s4m1Uq=42WyX zPzB72)T+|L?+RQeB;AA~GsAW8lbs@WTn%0mInD&yuSVn*_Y2Duf0u6W+pi~CO-=DP zxm{hw{C+EM5So?YMWLpc9`;cv7jDX!1IA!J%cHi!$^?2H)q#4;t)ng-DP9X)x&mvf zok5{S;f9j9_+nAC!Wc)YyckT)>VttpT%a zOGvx|s|4>lVW)DQ!Q#mGgHsEKbH?37mp7PJI?}Jr*Yn1gr6W~&^~+it59YNLi|Nwp zEnB3j5u@P6*<+-7-X)yMke1t~AEppW-_84xX?H3;e!FOQ0!DHV>XzKh5*=4fo56K1 zg=qc6Vpb43cd`^7NoIJLq|h2Jr5@mt(Yt!Nuv<5RONFk zd)raQ7BIKwEJ8J-DCs#35etiRC_Rg^SD~EZ%MjZ5j3LbD5T8HdSCAj$ZKUlSQ5^x; zMqxlXc2Ic87JiB}#IZe6X5->+u|wJBbb!A-nOzg8Chtbq7a* zPX0+mx=5KaJX6FAG+TaBIbZV%lo8ApXsg7W+7ZkZc<>zNjp7FCb7MP4ZW7qGVgxq} zDsU4U^9A0(f`;(&x#2UoWdsXD=zjjc=apht8AJz^Z_E%p~*;x#3nVcXqX=y2d?jF+Ed4t|08_$5Ch{fe>lYsSxcbmOr46s+NY8u3?Hra%a7t`&Zszq2_y=a;pH%c; zT=m~rg8yJO+wa7iw!yQV)m$@YVXFYj^0S;WiED^#&QGyjBj5VSZO`TC2qw@u^OkunnJj@1j7Bai|1@S?c!OBhb{_thhK)f!zD3xxW-}`wIXMUj|^wepmmy?= z3r;vjmSK*Ckixr2H&8$wtD<#mPa(aXZ&cFtW#z=G5gSOOq)ns|(q__1@`62i5|aK8 D=Uph( diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$1.class deleted file mode 100644 index 860cef9493e098230d985b8ed5dbe449cb887909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2407 zcmb_eTT|Os5dMyBENm-a9GWzjQrf7AZ7zZ|ZAnei1ji6klM4{iklv2v6Gx6Lfi5JS zPXA8((wB5fOZw26zV=6Tx<@jB#1#{!VTPl#tJUte-|pGtzyJB;PXOm(WH5v&xlGID zd=>?K*pCZYe1wm)_yjX@cTvHoQm9B_Hit{NESJx+n8cNST+Lw)RRz}+)D$c*3~g~s z>p0E85;wRzZ(4$3px)+NTsIwE$`w*bBe5lH|4twRvKWdi0^hXsP(?;*|B>lwQw$4r z!|CYUG8??X_4Zar_qg3`I8XIW?hDV?4aXIFhugd*T)j%dQW$?J(yWq6m3uO7de*c} z|1yJFd_z88&a5Yk(i%gm>NF|E!MbUSn?a``+*RI?v=r)&!L2p!no{m6Q!;A?bT;OTprczpG$V&UjjA80vue~TJgRqSlt{wd8Zg(6Eh~dbJ&yB}Re4|^A?1~e( zhKTxjB(}FEWrI_VYqnuIo@uw1g#XBCD!8HIbJSJ5jT0({@s^5XIIiL(>J-a%+zz)U zI$^geSWM61@~2~jkPpwi#qE}UtI;L|3K|Ue zZa!lIx7sP4}LxOze0x{%TSARawvWnigIviT2Di1+AB#gB#Uy2OvVKc ziR(ET47rx@@7m^OAQqbp!^KiGoWg>v_%8J*&4Rq+w)A#DLs7py~$VSmtU3m+nitEx*mK?pfJMz20_im5D zu(S5=3i@zEh{vxc*##@#I+i6v8HVuaMwy~Jvg9^H_$Gv z`*j5333qLVi~H&9mZ6uhk8dMUp4djR{5w+5LhE;EO_McPA4X_@Ec7spckv!c^rf78 z^q$5TKInS=g?uLI-EyIC>^G!$pwOfLFJyL*E&qxHNjXx|Hu)SX!}yQLN5Tq>x5pLpZ^mP=sXB9b1HfWgC%-j55I^%hyL3W~-*# zGPrHkd7T@p8!f}PZ%xk@TTyL3JLR3{P|e3L?#vP%ea{d%dvt< z2CMLne7>1kTNVS$4C#v7pcK2RmLqP3t-A1*cwN%cQ*}*lFLTe5^0qQ9vu4od97lK+ zoBO^Xaqiu~)kh@>t}|nKLd6`zp=ntJh9}8fgb3@M* zaUb_3_SUd$aH{dNW7@87In8+yJaQWCNk@UNSw@_khPznSa1URqxUXRa z4>Wuwm#^^+!x`~(O_)I`qV38LKlazdpr0a#1Y}32;#&>hffAZc3U{EBr;jq^qY+?p zr)ezIR|$cNI>Y@W|8Lbr|5ePY#6@0I%;5s=_Dry;)kIi=a{ay^_Q;4 zO|jtALemsJje=A`4wd1gz!7n62Zf=tDT2F>wH}JO219RQAf8oGL27|VElZ;z?|MyR zHKZA7T%*C`(PYr%1oDFEb!rfbey*_RySR|$c8x@srGRk-7|v3-B*43kO8|0lv?Who z3hBa%bd)1UudkB)4)EQ}q$}#I-K&E>TodB)zmwbsE8n`dEki|w>LVj`#XLx!e+Q~$ zd7vsO^zDZiR*kCLqzh?>*1b9c@q~L0!}wl0x69B@XS+u7GLgjS+ngQr)0N)?hNDR3 z^Kvo)^rYbwJ!xFgZv=(@PvR6=ou=IllGF6;Ee>vi6^AyV6ib^(6<;9zOJw~4tr@b0 zavpuOKNflD#fSKaB>Ga0L3&SP44-U!{gr&C=-pz^p~2sg*@8-sjz5vzLaz856p}hg zN!!#*XbeL?As-8e8SedzQzWo09O>!WHF=4A8tLccH3f;O4=Q20h^%r6N0l-3DdQMa zE@MoYz-?tR!rC9Bc#U-tXK_yEf<+WCK$#S2pN2AaoGb@vuV4tJNH+|F_>^3wh}HP- Q3}&ETJwg1=;6^6<4?Oa_{Qv*} diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$3.class deleted file mode 100644 index 4a92fee8d4bdf6d29e5db8303c8630913798286b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2414 zcmb_e>sJ#;6#va8vLvh$5Vbx^X-y>r!cwsm}i z{g~{=r8GXqCuw|&DS5iA;xkDUB{AKDE4V6`&(j#kwQgMR!3;_&Zm1}$m}Tf|b1U0& z>VYM0akpYxg5g-T$=h5v9bM8zVn`v;7Pfyk5CKW_MG}E;T6)MLp)UWi>18JvW~+wN z(z#{Uc#Z4Lc1!oTU9UM$^$qR|&({sd6?%)?ydhk@M8te(e?HF7Uv&&_t#H?r^fogoqh`?NY+JY` zi+i3Ra_;T8o1K&(ICjN!g^D?bBW0Nch9~iOgy7bl7B}sE*cM|QdMz1IBC6&iQF>-r zBD6LWc-in!99d;ZOZiBQVd7w|onBA`VHq*pIQY|@>NwaThNDY9H`eC)`gS_fOHSY# zBC6xT*xDMG1x`6G+lJ+Mrrnqq{$r=E;+BRlP}T4bPHPyz2@NN4O2Zjc8BWw(XHD1z z$1Yg>`)37i_-32(GOyt_7F68Pa2Jajmaxq5LEIbQ>!uz>rQse{G~CCRDjsN9#X}8W z$>nQ&!*E_aT^EL52=Th|!;eF?z#k%$0k?K}D!$e59Vn97ICF=3a@k3SO!)RKZa4IW zT9Z6bQDb-zr~i%0=fAR8H9cR@n_)P2@b%39G96YfLpe^#q3~fCmJKYM?I^5lHmZgN zyTYkw))^8x*-Xac?1s2?JP?MShVbv%=0+gqNXbBMBv^zpFJC5%Sk>0Sd_C^MMxGu!nzk}R%R^B?6B~2NI@My41&}exW-}erc$l^#< zLg-nKE;aS4)1X1L1M7YsIq`(MHpAupaBioe6V6VK#AP}T(KmTI7@|?%4~FANWHPcN z0kl(73U_K#^xHt8|1&sCQs?M&ljtPv1NqTSu>9C2lzd?miTn#Be+i}ErL~Ksp)@f_ z=aZp^0lbIziJ~uM`=fj6V)$@d>#w9UL3fM&M@D}~*A`UTy8lFK3+eoCP>AXwCLI$m zp)rj8giJ&nWw`${&Jw}4aIC*~Pvj*sNhF_>)&!(agHXw*7E+3h@MTDWSSx diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$AnotherNormalModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$AnotherNormalModule.class deleted file mode 100644 index b8cfa311cc27e66dc5c109c8cbefde88c666327f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmcIiO-lnY5PfN@tF?Z$ejfzIg9;k(st9FK5ZVeV1@SbyjheEXXm%_9El+|6e}F$q zoV0p#4<00Bl9_pvnU|T5&$o8~2Ux43jD-M80hR--2#g!_ELRK(DN|d&4>r{1hrkPFCaQ&2PYq-vx!aC_e%QJK9NqQ`2E$N=XB8}MZ znIZkXbjZJkF^mUT6}bL4-U4%;k4(ti$@8eM;#^>}D4j3=r#B}>pg;8j8z}KO@zn5a z30_Q@Wx$#o>cH6UE5r*MN|<2j-4G6we6RUChg31mXBjgrOPIwRpHu9c=UvaxU?3R8 Kzl}w9Onw3QUd^!p diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnActiveModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnActiveModule.class deleted file mode 100644 index 84fc1f45097bc36e2a85b377e000e02828917adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmcIiO>fgc5Ph4EI&}kWLkqM(p%sS~DXfIJ6(J>7Dn+=7)JBm&T-NqBY-{fZdlQwP z#i^Jez#{P_9h8-N$sbFqZ`4z_C8c2U9u2ag==IC#vk z^h#-EUo({V4~7gC&qR`8)mK{fCP^UEfe2#CG<*|^cqmep$Ma;xeoz_1MmseZQulQ$ zv}!7kO*F|%>Rqj6>ct|p-H%iRUiVv&!-8`gpLAp$v+A!Gs{DhN}dQUMl$6d z1v8@KS!O^GPh|4xznUE~)Xcm+gL`TwX(*3WKE=*LrswBkDj2p-Cfce*4ppY;X)Udd z6;>HdGaoFRS&S9$>NArj1(pUVsfb}MD5Pi_-4ulwb=0uTu$}kfvCtzvZ`ZjDCs`nZkoWjuVT~e&^*_ZgQ7-P>uPD83l&?_vPKXk&8IJy9aOVtVGz!!mY>;0ehD|zmGu*=} NC0q)sc!=9r{sqZ}{jdN4 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnCInitModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnCInitModule.class deleted file mode 100644 index d7d5e19e2f92f89296af4f50726d36c19f49f96c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmcIi!EO^V5PjYx-E|&m4m|pLp3r($*|s0T6QOSB8$FAGRibNCKcI06w1Z(WYvC9CBx=vVLnRT(@{*d z&dhM)7>!tKSwxvAOG%)2oz&!9WGWGf;N$C@mqHH{bHhIgD@)5$Q%If*Ek?575e2hC zXR}P7Adx8L^S|^uW~iT}*?f@T!c2-(zEMuZ?$Sap#^PEqY@biGRk<9fQqf?qwKi5* zWi&}XTq;>yDIV+hrpTvQ65y#Jtu2`@A~ZTootg&fSY_C8t#~H%h|jyVZ&G>Xx)A5| zy!W=<4SU@%io0>&ai00uXSn=t3uD+=Na`hHnOcU{vUYCR-;cU=&{;4qY@zh%*!`RK zGV(t?F7{EQugc)lzxBw|`p5fgc5Ph4EI&}jrp#@r?(27Hg6jnmqijatvNEL1(B~>JtYG_9BkIG<)Vc94jww#cJPQ{ z>7~*td&N-R+aEGiJQGQVRbOe@ohE^_$0CR+)9_6w;-RoAkLSrs_D-b?>n&^EOWo5Q zYd%SRWTI(aQa{vMS}zu9DhYM!hbG}7R)GivKRZu&Ds&W>3;sc5GR=5stmKK%Vk|B9 zD3}o)%`(RX@kA=0{HxgkL(R@b}CKg}3g*CC&MhOb7_`xuf;k(gxCGVCrQ$rbv& z3LAU=l>mdxDm^~P*R8#%_*yH09aL$<85~;o5_yuGtVBC8(5==;nttx7bq8Z?pKuFHp-W%d?!Q+R}90y7~DBS8I1yU8|&m(h+%`yofLPm ON(q;ODjwh_mVW^%js9Q& diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLazyActiveModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLazyActiveModule.class deleted file mode 100644 index 689ced10c2e4aff582179ae4de65e5e1409884c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmcIjO>fgc5Ph4EIyI#&fk0cJ(9%PTWL84lijWd3NKxHHYNJT)0kO8XVT-*RY$s~@ zSDY$=1b2QEV(bLUC5Ilk>}Y1+ynTK%{`u?ccK|Q3V`Bju79Q5{$VLf|Ej+RC)WR0S z!fT~f_J*OnyEkB{xF(bgE1uG_JC1#s^o1W$rS6$PL<5niJf9US*$0&}thEyJQR<%d z#OKRqkg170G~qaJTk2>n6E_lRDhc`C3rx&KqvUkH$Jvu^gyW z(I+;wHkrtj(WHBCu5K|>yra)d5*Jt!P*Nd7!!ImxjCLY2#Sw)o49hB=sw150>H`<+2M@7%WVjN#q?^_8J@ zlLw|l^VFGiF9WhN6r)Tg4BPWaau@%sOk>x(cH%folpgNqtJ$8{e52LD7OM0&Fj(Y# zi6VJVr%f5B$S78yUx9rou5ZzqgMkAYQ$DH!fZJH5jN#7T=2s{eclI}wPU__=RDKYm rglmTGKMeMap^SQgx{G@hSBarPJ@->Qz}hL+u|idws#R=a8H>LGQY{Qk diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadCompletedModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadCompletedModule.class deleted file mode 100644 index 27dab64e742836c8b25d35c73ed0eae0ef953fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmcIjU2D`p6g{&aO`C45u2%b@)fOLGAr6Rd6``B1P|R+mT^2+TCdqW2n#`<8w$z{H zQ$a!B{ZZmgvf93^&<7vpUhbW9&%JYI=I5`k-vKN)9mi;=7|NmJR|2&#j|GPHq9>1q z9`R}0?s+K3MLR0)9Qm)ieaG)Rp1*(KxPI@A*Bx{ZisDBWwiv{J*OQ@hogUSFdFn*E zpF>hF660K^4BN9v3gP~|mX#gvQjg<2ReH2nJk0K_;%mJcY@tbifx)7WQ6o<`K-Q*+ zlV{|cPcFc|l-rAB3o!5wEwZf&fF<0dh~d`X;^(NBd-gZf-nQ!(X#5~V4VMh>uQ1qC fhC13M>Nf6>UnGVVT6Z(t!!jjo3Yxf&8(8=a53&uM diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadModule.class deleted file mode 100644 index 0b82fec8f55d94f4d5f64b25fb89da523389b676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmcIjO>Yx15PjYx-F6#VNGVW0`bCjiq+kgUmm;Jj1Sw+MNNp4WH}9^Sy6oD)yD8;o zajFCo-1$+6*-arxD2E<6ct$gR?|D2P|M>ak8-T}n;9&;0UEG<)T@McKxma_t?qY*s z=DE@;d%;lJ-sv-xTPBhWi@wrwf0P8$_Cyd5^9$zHO*|AD#uW8MDsk_=Y zBHA<2C?`}qT1(rCMVd;&yz@hoa1pCO1cINOCOj273d|Y*ATpU|JTzAFL})RPmbWMv z3+;_FJ%Y4ED!2YUYL_lyilZ64_E{*0nKC+cu}Sfv8QD<2Qh7zIQ&k_Gh*QC^axl`F zN@QQ9iZ0pE+GL^-W7wHmzZfds(MQH61(wQjRK&0l6iulcU5}|PRm@_JVLd;I$3hQy zCywPn#EmeNY5J#bA~p}YuiN|e?tb0xHeTk$`!2Q^-u$l)GBhtEJ$@Kp9m&?GklGZ9 zVJ0oZ<}{JKL%+vjY0`k+u{9sZ)3vr9^U~uU>IOORm z$a)lU@{D}t;W^mnVtbx!4hEi}O13%%;0mr%#BhzsPCfgc5Ph4EI&}jrp#@r?(27Hg6jnmqf+{s8NEL1(^&?Udm$khOTkPGiwyW~9 zI8_1(?))gk*a?&aIrPB6JDS-y@6A5XkDp(@0eFs07jwAhV6}lY7Zu!h@X*1!gGUT= zFO^o=4nuWod&p4pOe7f=eWhhTPXcL=L=aP@<(p8%Lt#~sPm8tey-FFDyViV=dZ3TB zZ$z|jqP%En?rANp7mGBNgnH+PCgCDhfd~XYJ5P8jbQG8i{!wHy&3I_69^e=)dIhALVm>Nb`sE)c^CeRopa P#Ud44O6quko0$IvIq&^y diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyCoreLoadedClassDataSource.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyCoreLoadedClassDataSource.class deleted file mode 100644 index 4fa06809ebb2633688bf04da08be3b33fa0c25ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1777 zcmb_cU2hUW6g>kJ3ZkW`SikTKEnjgPO?-jyg4EQ2CWZ9Hr-2>lkY%^-E{*;xeK00{ z=!-AL#J^;`vrEj@Iuaux?99D$=iD=A?%Z!bPEG+lK|PH)N*N^ZFoo?D$|+PBlK!Fe zN;?cMx+7<1a7zyPkQ>wEnc;EU96Ilex7-(=Z;TvQ7&C73iExcJ89m3GTcQ_w1{Bif zo@fwcQ`*vRF}y6V2(xm)kZ3!mVA$wNTfCajhQb~2p+%m2*BNo^fV)!J3ui(di=o(= z9r^DS*{;J)VYV&qdC$4e`_9}Q(dO))Z3{PW3yL4FhH&ZcX-T8}SlZ^U1Uavs>xi2lc0e^HzH_!{mMx{ID$J_|ky3+FrJhg~nc&a^*9*`m3mlK=&bC(2q zvkFelkfX)zi4kbsthO30Vw$jsF~ep#dWybKhuHqzrw375GBou}`H?in((*~R-C#JQ zT9_{x1~AmLnw^JX*#D2L+7oR_qRM^8r3#4@uBy<&8CmugaimxMj|SU?x z=dr#7SlMuOffXWLC*KX+T*~IFhRrS9CWH{HNV7Y*yOhm$Et`9^_kM7)2iTx7Lx^!a I!X@N>0z(tvhyVZp diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyInstrumentation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyInstrumentation.class deleted file mode 100644 index c8d634c2dc681f96f3d36768d52ca314ab3e2048..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3246 zcmb_e%~Kpj6#w-uu;C+t5D77w1S1+gA`_!V<0APWkbnz`*)<3B(!0~ZP_r|enO+KV zu{?P2{G%*i_cS}r&XR;GirSg!*YEw_@4bHSHUIwi*FONR zqSA{lEcKxq%LRN{z)AtD1>9%ok(*vTeud#~sTS59?t4{U<<8c2-HCbNR>K|VF_$8i zPA!atQ|AHS5Ro%ai$D&A(vtHoIIfmtlBf^|~#LzV#x`JV_hD%|M`;U0!skISysjwK{Sg1GT?otrTs96_*(8#UW=Tg2`zdQM5x@PwzOka#;-cbJsO_ENa8`lg^#0=5ZR{1uNJe{hYK{)8Z(*k<8mdg<0v<5*mc5OD z%VtECb|%X~87UfPRb;MMr{c_pH5l#RVwl>8)LsI26pp7jXzYHCtJhSlmu%uMu`J*# zIyEn*F7?)RYiMHB6ZX-YL{ip|$<2g1S!FU!R_(GRU85N=oe{!2wISp!-!FyS6|TvN zaz1JEPuwTUODbd#f}&~zH&wFHQG+qSTP(YPWP)@q9)7U6FSfl+d;BX zoLr{)5Nf4Ln5Yd~fJTeqB5yQA;8w!hVJK<7@P-a1@l_T)s%=tP7za)1`OX%PoMj%V z22VYIBj$nRb}tUkCO5P1l+!3}dN1z%-`UCo=rk{gNy+H06t#TNk zCt18-Mm z#rRHR3?#b-<9nRLc?wfy_OAA60?1nl{lRi>2XFyn1ojS@C7{&*xJZ(BNzz5{alEG? z->2_OuR-v~jszz#Nl8%z56tjS2N0aXw4u{O5SNJ%!v~l#aQA4HX4?+o!LX&ZsxEDSrsB4#zl7u077l>?Lhy9Hra#SPrl5Vu|p x@$?lCw_l@Zo@tEzRn0JuJBI&(J^n%)zO2U=u&5K5G{!wWh}0PBLJ5Ny`XBY#<~aZW diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyProviderManager.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyProviderManager.class deleted file mode 100644 index 5e65619d390a0460aa829c3a7f0bb25219564faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1381 zcmb`HOK;Oa5Xb+Ugg8ypHhs|YEUy4*D&Y#jDJYjHpjIg$HR=JuVePEajcjkac0&1B z91s!*J^(i^T=*`CvDYYRNFu+o-+cscYPp*!61$g=Hj#% zHd_85`tVw-k?abcN@XbR2Z7K{kB6ZkueTQ?vob3f)x+`>@5-RZuv%^R`H0(6+0UgX z>TzC6ep1E*u45C!@_84AV(ZKmgGj0%v`}SGDa7MJ&pwJYk?UqnVo9>9&&`Mrq-{1X zUGzuGG@?zSg-#?EhJidCiv4a}>?DE7*bIv%g(Na1IpJc&P)isOhRVMPBgO>L2w~Wo z=B5g%LPu(-U193CJ-0O<#nMa2!z!VG9Sb#vHy6_MGk2b$Jg(I%r!U-y;mN#s=T6sO z4ZA)jbxyQ;Z#q9)jT@*n5BXo`7JKw}$bsP!Sh*Y*iGCVcx(iq!YmvSh$j}88YrCJo zYM+t$NTUoE>6s@V;5$n6+%#TTLYYS7pU@b2tYVGkV%Af-V-}l6{Fp${;Ybk->)0T` zWm*!8+)Q9wDeN6t^Rr+-6IjDcPQb34<2OMN#@NDNsDuMyD47`GdobK%s8CN?@_6 zjcSh~U&VLihm2I4HlVOWv3C9sSV#vt5!hPox(JDGQ!3~5YU{LRRuI#L~-XjWD;tb$T)4Oe@ZSuH(i*)TmP)p0p%PIm>? zXxf8gGikzcH0eSGGbno461e|o^#V&yl?=)B<+VRlK`OA9mDGv&eW%MT(x2W1yU6i? z@f`8A3I13(TaP_C@qwA6H;7jTa+qc7!Vpg=@xJ2re58zdUh`OBo5LcOc%9?eGXK>C OD@+8FxaU~oK7gJYvw1TwGxK)l^XvTsz!`SS$YaC7mV<2vI|2(A+UWFBAb-^83lv-%D1nuh zHmWmHnu*?%Xd<|R zA{HFf1-kz)RN#7^q|=*g>49=ze3lu|FjcX@!K@^i!r!^w%p%P-C+s7~JI1TT3n%#D z+hOZ4k`oLRkKZ6(*^$E{+bj(DD6y?fzKbZM$|#RzwmGa|mCq%Pt?^q+u+Bseyb&B72v5H&NkV zaYEwIAJ89#7$@n`ha4(PW52VnXLg_2zmE@p0DMBXjSw3VwjyjtcqK5ur;YYs1i}wH z1A)2N=1O2G(MFvP%T!f;N(;`cCN`sDK$WibG&$!lwG-GnwN**QnMvsOW6bYAm`;+y9pcyWhoDNAn2fl`3SECzW-k`0td4+ zm|#!zg^F)7=91I3SCzoKrXn?xe?vcPGR-t(yhXs5mG2~T68tbJju9(4)g-^;wV!fMrF4KKf8o!ww3j}e=Aj)f<2!|!?k diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.class deleted file mode 100644 index 19d9690d97637dd008771724b8393fd2b1a3eb19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13712 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 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/MockLoadedClassesOnlyInstrumentation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/MockLoadedClassesOnlyInstrumentation.class deleted file mode 100644 index 67afe948e6344f75c7b73e15fad6b866f916c6b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3380 zcmb_e{Zku77=AWDQqu5QK3cSbiZwvXX{*#4iltCmX!t0h)E2dFatjOxCjnr)2P=mFIbG?CqBfkK1P6IWT_UzVLjb;JCslahvZ5 z*I0H6FS5ERt9J2l(e`||QWCb$eao?lSf?v?G%<$0bfXO!$+)dh5&5XO; z`Ynd>I;6(%%u5_grKyUm!c}vsg^zWzr<_dS8w!Z!Ejy;Qt!hdUJ3h_Hq38VFfclA9 zNYGorEMPGVMCl&ZT5MGpaP>n`iWkOFXC92Te%&{2pqAX-8hr!0chNq}) z5vSGso+$V^>xddjzpfzI$c!y9q#Px*;RIs68ek~J@BuHEg>7y)cOA#4hQZ4k!<^u5 zVV7YjRG=E;9(Ro;?#hA;QjHe2X;Nd{B*idX)sj2(d{H_^1=YX`^{IWaEc{)^TyrTS z4zwER_k`apz;H*my)ii&n}+6qobOupjxr!#R?1{UR_$MP^l+acnR6;`K}aZuD|6I# zwOp9zJ`eUcs435JPfSXP6uQwv{)lc9YW^>T`G9-7bg!h4LPrAMrtlq})6EcRRgOvF zdvJ!e|N91D=#Df63BWKKEot6ctaV>?cTjIWR_w7|s;{+L`(PM}PAIEZ9Dl*7*rq1Z zp+u^;E%iCN5l+Zvs>Fov%(^Z=WJuTbl4`>11sSekggyY0po@b3-O}qccG8DJ3|;7< zk-|hPz4SJN7J8$V@mFBue<1es6#s`s0zKsy1<;394A2vVrsUC2bNL&@MUs$M zn>0$<)c8xZPP|523{NCZ3nH9L#A!(33(>d>$PA0ef*Sp%oI;C;1ErH>CuwFDcbrv&?){*rhT*r>*|8H_%Sa3zG8 zqESM`T7FVs(&B(nTEmFd2*pA|)aH>6F|N`mecOz2O<@FHsbc(yF^rR$(t!I)XJ|m+ z?m+nsO}TEs1f;Ua)$|pCYqT;+K&>L1_fOw|;LT$RUdIh`%Bdc{eFDMHC@2A) zI6+JiA%>gyB7}QDv&h@J!Lu4()l)LKw;FOwu0*-@CE;Z-O;1TSL-H~XJu;75{zUvW z5;6RZbH6AzN12HhAeP=Bfu1Xj`V41yh-}FJ V#CjL%;A!=~j1?8oRpq?3{{WcM;vE10 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.class deleted file mode 100644 index aeff4415ce5ec4fc5c0de6c3adc6d8de4d5e53ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmbu6OHTqZ5XYyy7Lb?V12rDJsU$Y>sxd*7)2auNd$(JmWVglLg6OyMWa7aO;D<8K z0*S;x_TZtNM`wPW{O9ZY;}ZZ*VK)y+*tB5Ff^7@x1TyDRNpnFUd3e+%kZNgH5GdPH ziQAFyh@it94>MI;bLMqfAftGmOqsq630&D+`;>XoVGg5%u}?#$Tt`pn6Eh+-l1F6s;HTiKfejMg(U#idME}E`j{@go~k(T7?$u5XfrvpuFi5x=n86 z7$-uv9q3n~2o$5omiC99Fd_on>ruc(TSk-bE&uRjz{acqX~+<`{Qvv}DiM%+O!erU zGZ5SmXsqJ0p-Iw{Q^4uKtD%9!vQ34W4IVxUj{ACi?@XlMN818kKcj3p_72@ zya@^Rn**=#+dutm|JK>A*YQ+EKXs22~Rm5QHnuS;t{nN#CklU X9)qYNVkYEDE%uina80O20ycgCUayv7 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/JarBuilder.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/JarBuilder.class deleted file mode 100644 index 82cfff67e704fba2005084f1f82f2d1a5a332731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4530 zcmbVQ2Ui@|75-*fm|+;&3Ly!r+L8mig0+P0C`M5zmLepCjF52kyT-Z9}GaWb}smazqKP9&XtQmzLy7+H~X9<+;|hRyz2$#XKv1>q)7 z1Sh1j?40LbyjytUgeYie4N-D~1dWr z2c4Yb9n#R=?UR(X>Y36I9m&sLQv&T!>l%%fM)SnZX5)X|+$vZ54tl?-_nURbr76;ZVxjvl{moCx4A!B@w8aiwJ zc(G9SWyk*$AB@XrnTIc=?Skjzb44AOH5^~1rlec1rZwCuS+ZVkjkCPV%}$PKn4TAI(e{!f{L%B7K(NRS04cWG<#8AgD%nz`Kk`9x42D406;O&E;%Y zrIJnDZ4Bu`mb(=dbEa+~&(j^DQ(0GN;K`E5gs0nWktJOsL{Yhaow}ha=94xA1Kp-?8vre6M^VR2G7|q~nT(r|`4}t&jgn9pAU`46a&O#1gA# zAHiKLTDXR%bu3$W7Arb_VBv>&&cgF}K|X$D;m7!ig`eVQjB7diy;HVZB#;@PeSNnP z+9QmEXV3Ny6EEh3pxO7b2{3dGLnUuM@3J@KGqYKdE0l`!Y2kWY^xf) zMs#^qod^)q=lF88wsEVZcix>#ih@Yb+w8vC zEZav?QuGJ!0zsnbu3gB8G&|w38&c0N7-3OsD%>Cn1v|%@*1HDR)iCFK#>jf$j;PU%?oBW5y`r!p(aLtVhw~$4tBx@1Y3+W zBO>K8UA6}@*XlM(c(hv$Ca*~3IPy|^IgTois1xJfK&6H<8D??7v2rFebziW_ln=u@ zP*{=5!ceY01M-ex%a@%=o3_>p2ZnNIi1SWV9kQ!RFS+Y|lMZ-;D%P%>FH?DQE|6zRorj8XUro>@vE zxiik$N$x~B-V=Czg7ZT8CcTp%UZ;y z>xk-StZok((_RtPUJ=zEh%#l@4~%)70%SA?gUlS$;!mKB@!TBe|1!2jz(r%MD|VC2 zA~oL{+g6!xkL^%%nO%N>w?pUr01SeonXg@44AHHG#eRZ9!lD}JLCh!s8KizaXBytX zn+CLhp-ad8Tt9#}QoBJw>tNPNSe)0!R!e)YwupU~|N9ctcK>BqcSYr7 zOZ0gu=L*$`AO(jiI5?}usLJO!;RHH6!kBHPs}C`nrwE$|7{wH`^+9H^!_j3HOVcIT z4l(D2sthzJ2o!(lfKBRZw)<3bq?c~lfat%G&@r#W`6uo?qGQ1b!Jv^!Wq5gzr2V`i s(c8F!{%Mw-+pExTPzR@!CO)DXgK8E*mRBOkAX>3x%|x+U4wWK;ZGo&*p60DqJ? z8x_6Oi!3{vnR$8hX6Ehv%{FA|PWm`XtN5p?^@-&oZ%JDaU!S=>tA{g3Nxwa~i zBb6x<*VWosVU^KTzcaPIxL3TdZ%mpLSgPZxh@s|G?IuMxbyP6pqs?&o&n`%})5>F^ zZ~0{~mZ4?XoJQ)Teb4i78tAY2VILkXn)XRsXLP6!vOamd@PW$CGuRUaJj{}HX`qg| k!n*GYs+gy@gaxu58fem6Bith0R)!^lgFrMmtWcu;0ZYH7!~g&Q diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests.class deleted file mode 100644 index 1bdd70fddb0c372f6f187a027988c1f5d160894c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1253 zcmb_cYflqF6g@*93(HEOJQM|`irS(uJ`lwsphOc)1!DnY_%z#2>X3clJ_!B$Oq#fk8wPH6 zqi77bWeJhxb-YdeGtJHj#3rE?)7JO&V<)QHEw!hCm zh=@w_njc6WN6O(%7Mf33rfRNG9>Yj+yRswp1b2kj;MFKlUZb3_5kZ6S2mf+RT|M8g z$=yi#UTEMB?W=wq)Z`1L>GpRNn$g%6`Y~YOu0=}TXIMH5tH677i3>iQp{jwMzyX{U#gn(R+smi!z1n Dif2sS diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.class deleted file mode 100644 index 89bca32ec816b19daa6f91a75cf5a1f1b7052180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3971 zcmbVPYf~H78GaT7E5rgpAdHAF!PqI{V#W6qFbQ@|Ln?4=uyb*o_#mxeZApuz#WrbE zw~3SVmbB?DbuUTkwDrfPUodWG+9jwgUo)9D^f~89t6fYxnT|%gXW#Rl z_q@;ZKIdKO&!7DE9)NxLRSes4I)*JcBQH5%Tb{jMY!^^Wa6?km*n!YT;$2Um*wb+iK`~A z8E71HijFsKpuRtK#z5qlo3jnHWt^ftvs{?BOLJmAPfI-GW<~ytC^_=EVvKl;PT9cW zOx7)=Mc$bg^CErmN+Deq#oWAmEqz&dcG*j3-IASN_MCkBq&Sur9>0BDZA`0m$LSZDA4!epfA&OiVLHuKrR&%Gm&&C*m_}nGpBA+ z^JMPQq$oJ~mD%MbyQEgwWMpS>qY9xqgeu0Y?GbLQ?5{DhKfAqU#B%5AD<~d_y=mNv};A=nc?T zv!`p}Sf%#bgrDDa6JKGdStYGWM;_Dm-~rnss*Y1pEUrP2%=!zDZSgeWgkJr=%$w^>~a z-^KSVd>=nB@k0ym;71llFlyl@er(~G9Q_18C7~96hIcKzhxgfIHk@?}pO=n1@N)~d z@PUP2;B5=P#JdI#{$KrtVyJC#V*a9?^$c_R^hoN9><_(t)AgR@2KUxsS7nvwW)nFuE^Ppo9qvEkH8cY zG3l(EM`y^(?=gwmeu0&wgbS-}Yoe^1sex4R6o*?^m{V@O%`GjY#gfP_+I#~P3T&Hc z>2yMMf0?!>Zo@*=Gp%giE!!uT9ox(E%~0*G8(sOvI`H4LQG4mk>bH?jx3YPM=c+SV z6nO<(a}*Ga_U2*8y2Y$uom)tVYOh&&I7m>4PZflq>qRcN;Z3HcH=24*$M9Q$Y#jZm zpeCw8`Zi%sigSNjy(udYVorI+^^O;oJTlbP9}E=OvXKc*Y%-}*H~R?(0dTtnkDFXqsPGx9e4dxmI3Cwk}{Q5$rjf#Ysk zduZRvQ4c>`)rMUR%b@5-iuX3eF@Qlv7~+#oM$QfMX%D|~80%bGXCiIl5f~=+@;9X1 z$H0CZ;HVA4p5$rz(u63~Yuihw8{#5f*f%94PZ*Rby;snA}J(@T=lin@QJ#l!?z`4}A)8jcbK zUo{mF|KMF_G#LQVwuT38;vnI)O%L50uRjz?M7G_+uAxL^-$=t?vO%NcU=8he5hv0c z5##py-vT(d!(`MnGkS!@*-H%j_}Nbkd+|Azp^7zy1fNq%2$Me6aU2g})n3ECm&Pi+ zs#v$6Zk_6GPy!&}NrT1xh$QRUOVE66RzUxWcPZH;KIk=c+(oB>X;v;_@O|9JL6?C) zV9U(la0TzM@{(|Gum3fGRo8TcSVvjeF^cjCjHP&FVNiVn&rPBYd^!`CW1AF-25qO>&I7hv|KpI|TZO*f9^SoyHCp3r49AD+! z%WxEF1FX_{c7SPmH}N~e&k3dR>%Ky+;whg#-4f-T)`gs_lJ+PXL;61{_5UyIG;!(^ aw5#*5eVwuW1EL&0qNS=JgJqR%a_&F5pPGFD diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/SandboxModuleJarBuilder.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/SandboxModuleJarBuilder.class deleted file mode 100644 index 2e13844bbf8893c7b44fd567de8695fd26459a33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2064 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 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter$AccessIsEnum.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter$AccessIsEnum.class deleted file mode 100644 index 66df3546df8d63c4698c430aab9a1f4b1e435f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1924 zcmcIkZExFD6n<{w#?DKdG<_NEI@r2yOIoPcu>m8ctDB}HkU67vgCdZSN%W{t@Dwn~0@i9~WCXkDv2$&&$2nfBo~@p8)Q`PC>zb8joH2M_?dYA0o*p^D zvv&Wv{(}>HQLMZD(9;L8-_?6g?4Em}&XHjp>7#WG$-HoLGEG?^%_W@FnucBFq)Zxi zwPII~M&((yVRLyJnT~6wQ6G8LOuKq=Y*Z+Sn=r|#N#7azHV!TO#HiQ;DzU10`b1!k z^`_b2#Tq7AHk(HMv}y@_{mryGOI|qL0ne^gEKMzmQt3bQ1afsh@XSH4?S;0}?vh58 z*&E*rbc*$kbK&S+CpgosIP`sj1jvBBadi%k}{SlniDheeS^ z3D*VYUmuCleV=u^{eU`JDwZZ@*=Tn>H>R#1zoixg9!&1D{J)eZ68?8SFV|N-*rlJ= zI{hg#2dmsJKu8@+q^2cO-x8^HiPXJB8h}KafkYaEM4AMUU*r7(X#Eu4#|IGDA+|xt zPkIRP3uay+@e?rton%tlGUR_3yJP?Rn339aLD~8hv#+4A|I8)-d!)&Zyzn9JOFQi! zd2z;FBN8 zl2#@~R{Yk`y#a7A0BAkNlP;TNyiEk?fuP$a7V)wR}p(UCpQe zpgIymy1y-Dh>X>m9b(REC5OmaEp>YQ2Eqag3(F zgA9Go(L0Yd}upJ&K#bXLye=O{*ys^X|dw EzeW$wB>(^b diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter.class deleted file mode 100644 index 9395f3e200a7635dcce95212f8be1413a91e46cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3073 zcmcIm`*Raj6#i~nyPNF-r67oaydiCYRlx@ok!?sZ8d7M|0!4+J?b2>dcFXRjf)5nM zH$L(4Z>XbCbjI;#{|5gS$8&bmWIIg+u@5IT6fvUV6i%xc<+T#K%PPj$7-!>*inDB- zV`D*Tv9Q`#xxs_iWxRuVWX;`rqNbi1)hRg z1(y~00=j8gb`a!)oLjGvnRi{=&sJp+*nz-mnOHS_UtSeBbG~4CHA7aNimXUuX0B!g z(w(e$SB%Rtw1d#FJl{6zp;I+#GPI^`-(WgF42(FK8CkZ!GZ}kOpzDa^I^j`)iOl~L zqiv+YZvRaitU$WrAnUOf@jIsDB&e8;&Q#cYrl^NR#qYb4?&Xg;8n*z5I=WRfi-NwE3)KJoWo#ZIjq~z6o%N}-E2x}J0 zbU&X-r+yD~Jc`Ez*0&BBS8S;6R3~j;M~J#W`mht6s#mIxrDG1S>bQcd3SQIkI^NLn zCax)XOUK)|uHYRV@8Sl9=U04Zj`~N(d$_9OeO#k%jND#Gd9){We83AI@&bn_g)-z2 zAF=mi_NwF^c3fH2@d-O`E^y@C(DpA$i^xCah0hi^ibOF--p|?l1$(=R!>o|3q!sG; zlKo$?Um-t_2pzZB_ci-gFxGWF-iYVw_=Z=$<(0$BO^ACdSjQn87C5mS!@V^TjjV+k zBhb^TR;)Jx^WT#<1Se4b_Z*8hxM&CpbY!@LyX5Sw?M@2pYtv(Wi4Iz%Khm)pda+Aj zZDuKu5ewpsVolJDZ{=sm^QyLVsoHb0TDM0o39QRZBxxE5;z{RA7fy{074lhu@%!lD z<&!}{c6k1jA!j9BB6O?NYMvWJlk$KOT}ESc$Ix(AEzb?5j*-5jm+EXBcc)u~5IolR0;}E}8dGo8A#l;BmE}o zz;&9F2gq}ftYM_+577GWK=cp%jMNWgrSJrOt|Tn55uMnCG&bW&vew0DJcXypqW2>*TWn7gyE=jGZHryg#I8+XA8d|CW-O$87oWO2ui`~@3ZcbnyX^Y*` z#BNPsx3$G?Z(?^OushpgcQvuQ6WBdXY)b~S_ z(I+mVU);oim?soVWNTdf1&N5e7{n2h1_=Vs;3!f(CW+F%8?8#N diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/Asserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/Asserter.class deleted file mode 100644 index 7f773607225d6a856f054121a4d689beac8ade75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmZut%Sr=55UfsOHi-s2<_{7tHh455g9qyNE(O zG;|f!MOA-(y?+3>!9{{af^)(`La<)5y(nS5c`W51TuD=Ks@^rl_7C%vm)7X^>X|T4 zUD1ek-V#>-TxD4=+uUWhrv~?@R1A`~oj3NuRnc;}>r+{Oeau7HnYL!BTrRnAd8j!^ z^OCo3{3>dLvT42LPF=;dsM%Z3L#@C+Muf}XYD1AJfiQ~i0BAxOV-oRML?cY&3|oR( H&&HdVj5^{Ajm@SOZ;1B` zUdBfs9A6xtoDoL?BQp-q{slhyrhkRQ_r$vOKwzw_O{-Tra!x8DKm z!`Bh)z_^5o2%0b%#&*2K!)YGQ@bEGZQ#_oNa4v!f#(6j&!i5Mr@k$7<^7^$9R9+{U zCl$hU1R5@ekmk*q5OkhrBe;Z22w7g_BFLivPx0SO(*m7%4OBmil&mv8=6uw^^B5L&D4x$D5`b1 zs3cre{Q@1@d_hZ@+VnAPMxE31#+aJb1lmVu)j3tksJXNC@&@TEW!w9ybr>Ga1r|p4DVHw^TAT zl9M!h)m$!bs{db{;9)(dn*#!Y?w->E&9*I9kLo#Xtdvb^#-y6eSYF7d)XZts(0N_i zY&K`~qQK7sTnfdOm}07EtAe2wiHg*Iuf+n z+vC*?7WlDy@mBXq*5%b{sJ;%6Rc|br0v?&ZOscG{q@1gWkS-B>e{x1O1wnRy%Zd|=)#UHz5+r4*!>DPhIc>>GBd7udjxW(o0>OfzUDTO)-7qn9Lg%U8G-NW(x?LQmG;5yvC?A?`%*ldX$PpHMkewlBc%=N zT+z2Sm_JduaxZHtL&4)@?_wlz`kIN!<<#kq zmGsQCX2^IGZ&8biA3Z1IZM-8OF37mbKcu)_s%5;3YchuLo3F=L-6-cufeJ_;k3 z-qyU4R%T1|La5jtuD*mhjrx$+tqUWozs_EDrE&$S?3! zLm=j*uH|t{g4z*Ffldx_SA|@l0lMguat8!rEDJAd3-MuMZi=1d~zEq>-E|zDI!E3ej>0k*Ql)5i3J(Ur9r6 z8LRmBY8uLD9TU-C(fk9tc&cFg_<5WCoZ#(ctYK6Oq3RJGHiDlp>20iKRB!=mT@@81 z)cOiavTu~?`8HH<+*rnA%oVaxp?cJ&Dr$2XTNo9#QQ>;j)+%Znp*SM~RxA&rjehT^ zzv&#H$T&#mI)pLGgbc;5Ndfl_#mTqi;9tlqx9RC!9LJw{4u9bV{DV>4!wJ!h7cDnL zZ38=@D_RK4(MCq66C)J=o%kEi(_Vm111k~y7sC=pck#d01bOR(?Jc4R(0@v`Xsq`x mI?L!{k?r(rOyWr8$^ePZsFNfR&!Hw(gRLtiO+r1|ZqTK4OS5(xOIo0N(HJ1zq*m%Su`|c1 z=y$##@dx+_65=Z$(N0X7_{@*k@7Sk}a~(Uhd0{lP$dc`QbN!s>Jm=hVPyT%I`%?hZ z_(VlNK2V`yPP|=Fkc!|G=2b{y`a>)zxT@j=u8CV(OfM?Pi05?$OA3}5!tI&Wf@MU#H&@K%J69{Td>PIFPV9s=lbS$S+8m_a#b@GZ-CI`YUcZ!C~aHFFOhqJ5Dc`EXXvXd7jR+7bWbJ#p@57WOy`|S zkka4&clh~^5QmHL0`ZKjnMI3>jluBZSfYD$Y>z!n#_~0@wBAT5Qbts(wBzudAhZnC z*u&O5I(BN&d{D@IRt&?;F<8n(8t+^JDjfn!x5;^PnU4;diFGX4jm8v22RdG1f@R z&e59^=YobPhBVy7Ee+=|%kX*EXZXJ`so^7>QE*#B7CGt|j?PxF--JIa8dmYK@aH_k zQYRaSQdq+qILi=iK1vyGcEW#Ux;AA8L++@cy!MHqmri(5uInw-P^@hyAT8g`W@)?I zPEqF-PF)$bY2~tQRlSyBM)#`3U258>u~NFqR)N9wEa8b)a(P+rFw!jMER_*irF6j*X%7d=1IOC3rW1p4;D$PE}7Z{jWb zor(OU^@7qD2+;*Z;)&!QLighWDzuN)AQa*+Se>gcY`{e@h6|p#2*&X?0Zz~=tugZs z&BSP?2b1^)aU|#$Ve&Eg5vFJQ38V+VLf%6-8-EPtJ6w$Cl1~>xm!)Cp><<`A4olNl z8r*9c9(&#jLUeZUhg7*|m)18r~&oLgoPWsRIUd)hRLVptO z4`{nM*&KtgXEBh&3uQD-BF_2%v%d1G0O(7SU;l)l`m%?7NiPv&A?^F*jYuHsf+^(& Hu8sZ$^zsi! diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureAsserter.class deleted file mode 100644 index 86ceb83ca9dcf1de53c68031953df69e99f1af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6245 zcmcIo>v!D575|OxSh6fTwjrj86Y_-E>m+JJ+LCoJu}z#fHA#crP$vYcT`RVnU9F?l z8k=X6wm|6<3VlGIJWE<0A%wJWPESui@@Mdok9_Xw>Ajj=tz@n8aP0kXN1FM~Z|>Z= zkI{bizfb-JU^gynFfgTHT0MqNHN3 z89VW)ig|utQ1KYQKhE4wsCZJtQ+Qg%_qp?&M$^x$_yNECP{WV#jEZOZkN9KTb}X>@ppv;F-MS_`>XUsMCAe%-gwzvAD_N z`~rqVk6izDQ*y@jDYHj{2X1f=TQkDv5W?riX;?V^A#LqG$zt za7uZ49dVqpb6bSJ(0vpB6b-X&;f4BomTs+R3{*Uy4AgG=aV@tp;JW65z=JEKzrb2) z%1FjIaJFRT$ZS@3JaMeVj+>dw76T7=gROeKG#kauGWq5t^UUm- z`^{ND;VSr@!1h`@t6nIMW@e~(`+7Ew*;9_m7YTt^L#d+-NmTXPH=XizXgw~o88N5|Lk4ISUa-8%NN zNVDi;v5&<)Ec$V;z-?87)9KRH#Cm-s zFqm{q*Y6$zN0Ugd>87>)h%8k-JQ)fC14~|{;+_KIOXrAuIYh2B5pAWb37lB5`x9li zMss%7awY|K)<`rxp)?Y4dWDa(tvv%sz0@d<=fy+UOxO*Bcyg+M={lWcf3kCF3< z_gD>$Z-$YReOtkuGGgb92iM)owQO&#RTsNhU&wHw6x~VNuSPlGmH|BH6iE_yU&BIyurFyi93CV}2WWBD3Xr}!0Y6MM&1zN=^l z8wj#E!3B2Yo6n*hI%llOLuPS$%;K$X4rV9Ys6E0U=dBOs#lI10(L00TYiPfQfR)4< z*7~6(A3=<*YSK!o!e;s_#el$9!T+>S^`pOb>bL;QmHB^j<;zWi+Hdpq@G~3o8$-BZe-YsZ*lMOf(PQ!YFYG+>aw=&U*>Nvy@ct zWzuRf*+#6wrVyDDkSV@>nCvLNU5l(SMz)Q}?noeGBQx1CJWz{FiIMdXSt@~yPm0OL zYLlrkvRy=GB#`lOGue1;vZff>T|~AgfsB2I$-YyYOpB4-O=No$$k_3i?09Xm<`~&M zMAn}`#@@?h57s8rV`PIwHk3fdA;4tc#RN(A-H4yH#K;a3*`Wk7jw2?c3!fybJCAw_ z1&B+ZqIKd5R`-64wvKiZJN}6d0e-uM#K*Yxh)8{ehBvX5n=*PQkFSyAG@+9x+{U<7 zgbQQ7A~8H7iT{DMjBAv9jbZG%fUk@B)-z6#I3#SCxSjylB5^HYTq?lzGHwUw zym~)d&0zyQAH^1m`4lDi+EC8z*FKwob#P5CEcfz%)}); zL?KIwnVwG3nswMBUZ8dNkgne&E!&~}7l##?+bh4e0a7s|{n3Zj6HH6>?)W#zzt&$Z dwQJ>N>uE!rx+h`z?P-iK2XP*x-b4G>{vW6b1+)MF diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureCollectionAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureCollectionAsserter.class deleted file mode 100644 index 52d5319236837f6aab6cdfb779946fafc416a7d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2719 zcmcIm%TgOh6g{oipkXi=1CHW2U<_DD#A8EDVvAt&j2{B3j2|JcELy{qJa``R%*Yk? z+2j+lj5paPSpcysuB`JB`HrmO+-^pcBqJ*(SgPvR^xS*y>2q(-pZ~mg1z-|I72UYp zi7rekm`dX$K2;INWffO2t>7~i3O*OjRk3_cK|%C03ce8itb*$dsTs?)LK@#-NUV69 zCWCg%bxnW4=0RWv40p3d!*g_QTP0rN`qnc?54gKo^1jud^3V)I-SB)D5*|uqfmgm-x6$p|eA*~(V$)V9QC?S7h-Z8fszG_Y7 zn;Zr;w0a}>!gz6uKjXU1-Lg(05x;~!6>`69h75}>@xOx$hQU(RvNvy&Bk6sWJLa74 z^X(d843+GoH-U_|^xjr0jZq$YL|r2A13W@3hcMCGut|buICThCh9N_U{4KIz=voiC z@q|uRN>RZmWg5eXWM|2#gxhbU=$q{O69VE~L-!{OCv2 zB=DI!?~xE&+I|P|&61qeb+76h=CUPf!e~2bTogyHp$B~$<}lB&apa2C&XtA*oKdi- zVF}9&YsciMmR2H&FE!l6Ee*GEhoPrg;Tnc;j$yu)yhL3QT;btpKZ8Nq>4h$>D zWlCNY6g*Y5hWujaqm*iWQCvK zmRHG-^}Zw2Et9Y9Ngg=+AMl&hP{29*$mpgI6(9*ZOY~9OPqSIX=ntfF`CYJIXcWT$ zwW?fA({2@~X+E&O3m+guGun?2afWOpgl;2S1?q(@CI1^@3_sIw-&l$s04M4UDF=oW ze2hVQ{=G=0$j}~{P0<^3FA?AP6^UIWi@80de!!*N%EYVL_;jK_arQZeC;AhU*OK{6 z@+FjwU36rUJ4o+9efV91{q*{;ynqmw@eHGb#=YpoDQf#LM$u0apexj0rTKM=M#MQp z`^RX{FwRr#1OX!$rM?r>w4Nb=7ie}GvDZXEQbAV1IJJxd{F}C>kwZR;Vu*V2>xlo3 z&OK-X3`v~YeLeuv$QA;Tq+`Yj3GvfgsZi3j*mcC8r6Uoe z(eT+HWxVgP$WTAFP5N@*J@1`!&%3Wbe|`M{U=8aTsCca735psfHI#K2SQej^G)8qw zt_Z}_G$zEjs=;JX>XyZzHi9FE!PxbEC*1OQx9fBnnwA}OOzydD-sa}%dB^N>|EL{& zFyHgY=|-j+Z5uG!#cXRd!-m!T6biT$g@v$HSgw55Z(wZGkB zc=a}Rj?_8#dP4r|Vk!RJ)h+2%)^dGkuh(fi;Tzue$U9BaHs3MWMeCHGbJOGgvDu13 z@}XLaz08~y*xWndp)2?YB2=GuNK5Wt0Su`P*LR~$hCBb!w_7@((}_-8@-5SHk9{8X zLfT0wibQ(D_6Cdj(AL|2ud@+zVVl$?dMoIKwzK03U#I?RrB&grft={@NdwPN(XhtQ zh_zJ>%;33!d$@046ypXaFwQV`bF89thNSHUzR*}K4cXFcpE`C#b-avA6T^$)Gm{sz zI>h*=$!-g*)+%(*4f;7KwY;bUppi-e#tXth%BaX-3e%vrpy&aO;?etHpOLtN@{uBj zyYx-TT$b=N$Pe)ANXS_|rg_ zGCfRpvs}Zxkd6h3Swx!TE)In3Q6b`4{RZ_grzw|6Umzm`U6sK|@;jxJKDGCu+Q&%i n0!*-77dIwFOp{5oC?HGG0_75Th$T5bqB*jK&?-t8tL1+K6xC=Y diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter.class deleted file mode 100644 index 278322b8416db4212c4f8ada3e1984b2ada2ade6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4263 zcmb_fYjfPx8Gg>*w3daPY#mb<2u|X_+8eVeloo8`#4(s8b{rBr2}z)-yjIq-cO^&C zrZM+$Ddk#9DJ}P=6b$`T7zi;L7(O%n5x(<*=|J7*NUL2X-pq7dk3HI>_q^wM-}7Fc zbM*CpKK~NH&G@H^3{EKcjfxmfG~ov5@-fwn0;UxhDioY(Mi)*tqlg*#FjXqdN`*NE zB^50=As^*5ECsfd&nr0939FpY^1Uidcrzx0zjw_X z;r`k$HMB4v8audVR%A;2crv{~`X_a#Xn4C8MvVo5bJ-w+CEY6K_fO3l1#b;9*x$Wo z{xeGPIq7L;rK18Zp1+x}as-A~Z#V>z78x{w-TyyUP|5=DWY@4W)-Je_;!r$&&hSg( zh6W|k-6;6!EDNjK50zRitr^`D$VCArJcmrvAK{5%yHsMCnYPt0yRa!pp>H}Bj0KvF zGxO9jrhTzeHe6RP`km>skzcJz~Ckh2mEBL)n;HOCEJRt{LHzcI)m8H8pHQ zuZAAv6g;cpIXo|LbzO_JJ!ecyT_!`r3wV)%*YF3tq~VWvS;H<2Yxomh30Fm`W>>{5 zO&gAeKjT$_jeVQ9x|=&K+v_aYmZzJR+i6;z>T$JctE=8Gu&!Qp0Y_^13;ueEJg7!y zU&Cv7ofNW7ZBp=thBxt+hPUyKhQHyQhQG_*ysP0Kcu&Loctyh^h6RRJeU^u`rQt3d z7q~Xqi|KZjP1j}XMR%g%18MO?yvJPBBU#Uz1Q{Xot=gN*5-hN9t)To%3cIcDw%^K` z`uiTwaCFah82qg4jEE}TqIAB(-oGu{S>cIyd473-tq=*M&6a1Lj%_&MvB)m!^XE4SO-Kqk;-JH@;{uk$*|`(?RoTW(%%>6Uz8`w*|2 z@`^fZo0h=sjesMjuDAv1`$^m3y;Xv&T+zU{m2n_Q+Oq>2toJYk5gMRIV&u@+7&}?+ zYqrAMWr<|a7PM)Z

    R&gVW#Ue<>{UjOUNRla&MEX%~1VwP+2l!Fq z&9tDR8^Oh7?&F+u@12{s_m@`y``DzTu&}?YP=SrsxUMEeZIgUk^Ny43X1D$XYD_{76-`*uW6KUw{0Z(*T#FB^7FCt#5 z^@@I9n_Pz5ziS^bxQWa%5!v2;%tGl%=EGqstsR=Z*3*Rv1Cyh=X+?WvrAEQgMZ35raTbxD4O?y2_fGgy1= z3C@EB)#y88Q;S4wpoS)4CZmj(X=bj9Qgg||i a!4)g$4FMxT2a6WfpyD7bqjJlbhW7zuB&nYO diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported.class deleted file mode 100644 index 89e61f2999f84a08a0bbde94d43c8457026b0525..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6724 zcmd5>>wgqi8GdFjnaySbB_V-8k#I=}o4~e#B28jinx;S-C^l&zMO!DEVY6YgyUgwe zsHMePYpYf9Qk7o3pcX}|6tsj!DC#HuEBxaB&=3AvpZCn{>?B!A8xYNhotbmq^S;mf zyq9xk@{bSSy9%Haf79_y6go~+BaUZl@ElI+_(}xN>-cIE%kV-JVSKFyEAXO@uSf7w z4PM4KqWC6WiQrpNF8a2Nd?$)i_-+*6!}oRkAd00pQG-|ULmfX7nIDVd(>h+0hu7uj z4IOVru?i=2{3MFia{Z}{|4hfvqgW?+T5(3lFLeAeiVgA{ljmRQcq@u_dEP9~XLbBq zLv>#^GiBKY%hq7*&SWgRFKy=YR$fEnu0kQ#Z`)bBFFR)SA4^!dLMoe~T%xpQkD1f3 zcwoYuGULTUDjnxQHik{Pp5v@H#XX3zFGk7+ZLj4Mk$vEJ^1M0PT6rcAD#j0>E>VlI~@+OhQ>Zc)%nqg6erOsdeUA=tKYSVKra z3%FFq+FP6)wd^5tG|iE^fo#G|51V#Mp54JvVLU~bw=Mt)O&hkA^zdjHY+HbuvP0bm z=W^7o94Z{o5&n{SljPeAh=$&qvrT1UXNPT@$H~=vD9nr51X9{1v2iZ6o}nQXn!cOD zRMN6+9+=Wh?O?%79A@q*AUgUrs?d~hBeov;#x?%tb=jAQRQFeFC08wd?kH)pBa zhkdYMr!vV3BO84}u7euF3A31Io;3I-hsN#fQOR~Gle|(Vb)d>tRibNxRg*C%Ew(ES zQLo@x7tjCq*qo1I{>Vn=5vwd|7514n0jh5GW}6Z`7SCJuRN5-U$Jrm8CgBV`W*sS7 z`9cNaZYmx9`drp41|n!%M>K5sgdpkOn03f3rVGPnx~SSzIXqr)gCv3*gNE0x7Z6!= z+bMDCg4mou)%pX)?0MsV6{&;1RGJ+swOI|Mm>uk>e&XH6S6^YNh8m}KD#>^iR5c~> zqt|yh#{HH;2UQ}wrRmK$^yy&X{f0Zej)abL8s7dtjIlW2X8RoY8ulza%>DxMn0#vC z`h0PB)m5}m>qg#@(eUIgv8awUC6-is_3C%xmWQ<5B%IR}9mzJ)6Ivn_M}-@!-i^LKQ8FF zXyA|dlZNGUfpC{Drfh4C*x75~U0l*JZQwHA(=lV<&$v=Dt{R@|{jzbeMH{$^_h*53 z8i|-J8n}kPXy{o0iQcP(C^}%^OJE?EC;}9QU1ok%OWYB8oL>xhP|{QR2Z-^ohLwH@ zedDG*C`b5A!s_1m1YcPE$4Yfd=Hdx-fn zn$Xb5zJ9FX*C3tWs5C^Rqw{(Xp90v18s4+f^Y>nk#Cg?t4aY7a@QxDc;%}82tU)*L z4MzYy_#B^Jkw!s9viKZ=lms@k@9DVO8{8IZ2(3DUl^qSC&aUtU1e?OK%LoOr|Amlt z_M?A^`Vd5Y9k0M6{LnRkW?oydSD9+2!lg8LKX&lL85QFJ^zkZp52Bwy9^!pjYNsc) z%ahtosfYPgi@=A7=y*iaKH#S^$Nd3BrN`5Z;J-q01W2zIdkZUP5FS~govNz}U4cFl z>=>LzC&*L%blCeSF1(dT6`ywSSieowgt9I&C{Wu>&To87h8zytyEL`XQPUnQf z?Sj8HfUZzeXc~)7W39Hy=j~$0nf8*mo6dJMh1#ca$9bh)qP0Q=*+ezQumlzwafqJ} z$8i@Xl}lS4J9O{~O4Fi(FOF}Vis~kbR5<8($OdvWW>=WB}eN{qvhirokson87v*SgodtgQ>d$|sp{%B zJ-98>5NXiQV0BYfL!`5-x+&bzR4s&DMq_}f9APT|vngDrC#I|y33!V193?%+NYB$O zyJuK4Coqg>N!ke<#z{rjE=F(|ixmykg4-i5;}Mtfh|6FU2}PVm`YjUI!w=7gkR<7) zVh|mYA3~NJ4WY#G%Cqf^wz^Zi|Cb2rwIwo~Y=*aL_W5hnd+IeheRa)h! zU25ijA`m-9ti5iTHjU-iuuQlh@BDT8#*4~NC%A^^o#A>{PFqRWBd*?usaNVj>Fubj z_mt8r_u!U=>UCGZzt@!D`+$vvI8%3DzxR=UO|1bsSnBRznxiGB^^d zYjq|zaH6d=u~8;s&O|#WI!Y6pWMZ>S$S$R+v~c>~T9$VU+js}}&Mj=)T`Vt2gQqDM lz?X41ubm`j1v}eaRnl|gd^Y%B7Ws>C=W?#=-0N!R`X6bSB#8h3 diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$1.class deleted file mode 100644 index a184c08be0d841f70311519327cd58e5a332a0dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2117 zcmbVNZBrXn6n<_JSXei_gqPY{wOX_xC`(eXmejT>4VI7vBq<_QnVZceEZyw3yBlnO zhcnLjGn^61_`&hBKg#jkC0!OZ9f!m5I_kxPga7#rRpDVbnVi868xFa85D7Y(6?n&XkiV_~E(6J=NhYHFJlSXNCb+=Y8 z)yqbCt-f2{E-yW<(?O-Yh8f-P=$1VjJEW_fvKn-;;o z-H9JY0zJI#jsLT|gxjxF@2Xmnb7rP(m6ZmT6cBittJ{yUaq z1$P-1vlqme-eO2CxlJNAT(umr)@e6{SLY3zb~07hGnfdeIPju1EIfdwap3S-Nfcfgq#0coFEO=AmVZqU7Jt!!<*`Cy8F_3`2Y` z5Z@l3I7$)HXA zGf%U!C@8#T$FyCa6bupUyG;el8otCM4R7PJhAVP4jtNRft!~scT*8Ec6%7@vYN*1X zI=N7pOyw1i*sfQh(AA#X6#qc9g%eOlvNGi(XY^|?sVdqGqh`nR=t|vc3&XOh zSi;McMCDL+-ufQHShg}9>rv@B)t}yrWDoab#RXIm`wTa-F}U@{fiQz&Y^OT}Bx7Zt z`v&)(Qh~&EUfh$i-H&3Y;oi6gfcPcxvy|Az3zzLgMBQK*J zDvWb+i4KamMq_=9#(okR*+!r-O;RG1sg)wRZ)8L^9G#`;e+BQ*$yHiy(%l5TCv!7L zV7XUFV^G(qqou6Oav zq$lyyGbd0^Fpx<`~)^ zNFQTJlxRJiEF5EGF_rrjEYo*6buGnCFe>dPLw6=agnQ)9eIi{V><7r>VaOpzA(D>V zK$h5DC)cMbkTPtAh*zP@D;FZNJW-s92>#S1xbT|b?EfH`B-WY#;P{9*t`MIJ!LMQ- rMvUXth~sF)aUtTkaGv8lx&8^!P2f|^(mO?8_c^K`KqdBr^rqk6emejb diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$2.class deleted file mode 100644 index c55c6f2be6d5e11880836d3da9db523a53d4cd25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3624 zcmcInZBtW66n>TjE~Hn$D5&^`f*JyPl`4u@E5+D~i2{jKv2D7!S;EES-f(k+(AN6W z*4K9Iw+{USe(9Gw1)X-rv0wY6Iz4+6Vi1GCOr0@z&+gfCp0nrKbC!Sp{qrS&Zv0e- zW}Nq74+d+oR|*$u5tiSGf{S(Nz$G6P49S^cA4U*W5R=oF<@BhW`P7FixGKdl1=r-- zXFhz6FMMc0T)~%8hx=%MLXLC=Nx35A1`@`7_!udAYa5Aq(fu zU!g%xn2tTma4@V}8I7ln1W#~nayp~sxS32?GaAntTH44t!W6a^b=ApYUDQaK+{xQQ z!F7hVh-Dg%We<|?=u~>h7FlkKWYpn~$k3jsBeD$Yd6SF`qR- zftYc${^Ycwi#`dshPz{iBNahZ+D^A5W zDTbEPj%77T#ka^RxTWGY?x?tn@96SZLb-C0>6YHUS8)dYDt?ei>s`NY6%JcwO2s|g zVQ73kTd2({?&E=qhj^soF@9VDK!qz5E>>oStLuZliu%ZKY+bggU1e5o3v{CcvV^qV z;D$qlioZ^4JX`1?r53_)tsWwMk#JEkr z44VTT%gr+ESqyj?E8}8D=y`|kpVy>9%W&W=xR#rgb!j7c9O5?52r8ldw#})pHw8Mb zE!SSc#6qkLwT@LF<(sHW&xjiCP_>?52)q-1yik*uIEv2FDQU+w{U(LeIrO z$Iwd8$3665^};WUE*RQLs)C1Ps=Fn*nq(@aBnRB}uEs`Lu4!CN|1}(@l_NAtlBFv8 zwg)@s!Gh0G74&=N;SKt$=TQ^<3(D1JsC|yQdH8-Oy()StgKT^0m!l3k8puWyQh1+c znhUmY6vs#+tFBM#<>ZvxNtsp~JlzXu zT)@VHrhg8*3z{3AVUw%b(D?$JU!ckFS-=(v&*Q?|MK5Z=#AfO%EyyAW2dAlRoTaWY zgxNBv!zHN0IDuY*c#?L~kp%bAxUU5I7qTc1t|#bXdycJh=px^QY}+feEMU9nmn#d{ z@d`UndTGr3)!V$SUiJdJUL$LEt=xp{McZ+U5_Fr6>aL3@NPf2y-c$I14(I^t33Ho! z&^;xTJ!L38V8;mLhb54|7D4uwfz(z5(nDeFehbcfg!4XOdO&C%lIO=|ICqwCZY<&K zE#d54it_{oM7@%JCFgEYnmqK~(IxZNI!DJy2_*u!IaRz*;r0CHra^M8-qn4AM*K`r zp12TN3;Rp%b`-fzHeJV6_=t9@bUJcoKe~#EtwvSLnZ+wHKt|4zLKQ+dM_(`f{q+et SY2>H54w8arwi2b?fByl>Zrkwy diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$MonitorJavaSqlPreparedStatementStep.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$MonitorJavaSqlPreparedStatementStep.class deleted file mode 100644 index 1d6e2d31ae6a98ece7f3364f6352ac4d27071340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1631 zcmcJPYflqF6o%iS+iqKyi{&CWFG$rElm!GeDIpMo38aW&fuzycOt(W>vKQQLk)Nd{ z5u?%Y*&k&*v#n6nL}Sw3WKPb^J2THYb7sDM|MV5W9G)hiAe+P_rc?~7c$h>tre&kY z(UYV>T`Fec=#zFfj(%z9R6Jssc+0K8ax2AE&vk_vSe{!v^2HJNg%R*TIKmA`wduK5 z;Q1T;m>X~G7Y#xALSY2rh(TMYCHz&JSF57R@G@_Dj?QhX#7kU1Ja+UdcgrR3M0dP$ z%@%rDlxh`yqg*ocUZo=Z&9FQD4}0Yp#(#qU22&I#!mI^?A@f&Fao=*S>H&kA-doA< zt{Duk+RGg~=5|e{=XECA-kp?HuS`kk$y=^?UUN#q-{B>jdejhMYoEc(;o?@M^v(o>?;A1HYE|v`o5&0eM>oHOyl{ z#bbs-+wO~oQ9RLb8{-;!kkZg6n|`Dix-SbrCWawu+MY|){h4e_(zZ&6^g2*v3;zX4 z^IDHDd?Ru#%U{&qRhr!L482s{^vo&C!;%~zOYos3exP?m=20q;z;z6PVVJx-WaXEv zgMC29IU?`KV;G?}7LIL`eiUO({X9Ct-egLd{D|l|6shmHqQ5~sT0@1KxD}35N=YSm zoJE9wK%JZ#J45V!INZA3<#d(s2ptolCXG1mBHaWL6o~v*K0_&_)W{j)r$~fOQVE^T z(9xoy(-r$dx=5YMzo697X%wP$bQz~$5}*-pDqPY)7j`I~UEIeukv2BJN1lu`gKK1y MG(*7y^ezwm0FKqYcmMzZ diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.class deleted file mode 100644 index 9a2c74c222e789fa7a857758d6fc30f6b44f0189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4064 zcmb_fdw(0n6+J6U8cErNSm1;}AqfdVc4EtklctG-o7i!Jjf~yMI8{=hD`_mRS?!wL zmE$x`DYQ^ZpFkf#Q~IR*-TqpF$uIo?{V4qqz?s!rk{@!5f5~Ha=kDyCd(J)g&geg% zefn8O+1EdB#pJ z4P*9F=!{>+&zQtFq@g3zJ) zoNOC;9cQ*Ii?vF2yj(2RDX3%M>f0^HD33VR1xxy}tYLR`726G#HSAseW?deL#BwUk zkcOd5fH-Rzb|stlUDK`%uD6U|X|YYuxz05OY*3L9UvTBDxuifV>Q*@-QJz{PUUEEt zg5b4r4N23>*GeVnsqqyJv64~qNLp9R_st~;o4`shP8bUTkAdJEfgcOJDew~wDI@T8 zu)n`wLoKsKc3alo3JH-VE*@DrsxHUWWk6kytIG+7m=Dx=!BpDlTASHEMVp51wvj7E zkJ+=1TMbl7B}7c7zcUa@?>vRl%WMV(Bo?LXQORVrzpuZK@x+aqKj*00vTBAsZyINP z!zmh0AL~cQAkOGG3WnTyesuWRi@oFLhevvIlNT?JUK04Jj-TP@Iu7HAj#D_MZ` zr~>c@9e>21=(&Mn#9>=2sXoHESQM)DHIQj|s4;Paa@=AhOvbJoHwRU9oxX9i>J4&0 zLixOkn#tlk0~7eOj=$iq8icn}fALv^qU5&mrj8HsHw`DYM2UvS+I^?QTkl|$_-2!G ztD9S)-Q3M{^M7qX^_&GAuhD2o*xJ2kjcn>Hvif$fop`}0anrlb)>e^zy=iMWv_WI- z-e`Y2)4pf@uf0t5U*XtcF?5avRmKi}!KrVr8jRK`f_a0RH=51s_u#rE$j7FQ>&yCM zCo=7lRV&MUt=KptOl9tQ)G5avmUG6UshZ;ht+<+I*~(tHFWj?0R+b@ylkLQ=1n?yo zTye?fdd>9brVQ7p@~q%aUtdrsEtzR;gZEesD{B)@XR|Ah*}e>Rrs#BGYLu^9`fxn} z?kDXFVAEm`jvthNa46K^ws*6R#&hLGvm|rjUbVH7kS?L_XhO|7c7^4*XjnBlIm_me z8SidEt6uYisL7pNLuLbIwI(NQHr+GW&-45~L~saC@S0YeF@Fq1)J6&oSw6>k?+@?X z%Q+h0=nUs*yzl6_jYvpVc9Yxf^fuF08?jjaA^6nr}==mp-w~Mt-WjQ1&#SJQP4lKfH{u zM9_-v4jxfaJ-TsJR~Xe*?8LVi*>iXl&*K1N>fsN)lQ8fkPesj44KFNi&H(si%{ilB}_7->QS zZlMz&kfK|J{9&-{5QRq9;j-%KNel%f4B+d0QgRx=S)2^JN)NGTD6a0a4|3`HpIza7p0)B;Jjq|z3H&ym`~olvQBVK? diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ProgressPrinter.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ProgressPrinter.class deleted file mode 100644 index bb02de2e07b6da337bfb85c2636d2d2c178a9e7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2719 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 h&>I=2eebk(>Z$5=Rc6GZ599k diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.class deleted file mode 100644 index c1d2caf9692a3fd7020c5ecd0c0223bc7d8796a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3294 zcmcIn{ZkW17=AV+xezW2D5X)WXsHdc^T4(xW zr~gf7+M;#rAJ9Ll(|7NJ2_Ru~EW_;HzPJ0l@B8fgarx)pzy1br0Z-$2AG2``U@nF) z;+V%mH%Y!!;;e?-YH=qH4U1~HtKnV@OFhV8Sq=ANSn0t7e5D~DM<2dci-$3Mqv6{) zzQgxD_yJr)K|@hPi9w&YZQ)E?+;xS^5OZr;SuP8Qp+75~vf)~*m)49xHcrB-EY&SB z(-5}zfP2M?+IcNolvRUUW`P&DvDT;>F1Jesxnb~{X*j}_b*Ctd+k1`@U~;K$duCOv zn66o{#H4LYk9(%H$(ZBWHQwNa@=9ndHNog)^oD7h-ULHeYGj2WJS|It;c(Wp#hrS! zAe?1RfW99^Zmn>~RO_ZN>{U$Cu)pPjpGHX(>SZHWb41DqNSBiJ)$88;W6|?QBZ}L!1|jw10SPY>eTT z)V>#f5N&Pn@5JxW2H6wZIIo5aYPhI|OKP}GR_FZ4n>AG&4DP+fj3SC*WM6kw{Lb5} z(y96}Nw*#{iQyxDSd0dokJ82Z38OWH<5J`@M8+~>8L}zL>t02wT(auiUNiYkkIMp= z8Oj$O=kSS+Gx(73Zp}>HpBv5HU7Ei$H=13Xo10nEAatyvtm6be(2-XAu6N2a%XB?K zxon6H&uAs+l!{8>=s1Z}N?k>ViAM~*yMu(`3MG6daB9`zRk1FeN11g|$P`SwlxbyQ zW@l_`uyj;m>yUW-MktT#lq9!#twsr;fo!ZoCFOoz9uQo^=aqk+jyf8Yo==`$fAX~I z(m?+^{9P=piK3@rUB?DCHTGCaxDCm$`oEI4t%pqS5VQwW0>33{()Pbl7@W@0zk`LzQo}5YY_pb*zf~{@ zhpa!;s;^mTm#N`4xK$U6t5oh&3nOiDr(V;6-rXrrP1~g2!;pGSnzsjTP|wI|oTiV% z0fdmmF&g_->!6RykgEM)7^3GW&8KOO&`iCD#$j6BpgoM{L+LGq(*0e}5dH&^-$)X| zM>NK11|f$rh_m#h2fOhxQnaGd_6q4DtrSv(kfOT*P7=VWHh@SIAf(zG9aE5qQhR435*QV7Bxp`w{gCT}wH z{k=Z`jz|+E36_Mk5m!iKTuIpO_P0uPimh@bXJJgwgjMF-CYP(RLRdd8zJ7WqE*wUd zaLRqn${MY-;;O6prCgzX&$TaFD_n?fOAgY9*6`FOY^JTdt|Si&0wEgy0TdHvh)0L{ Hpb-{-<_t4u diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$1.class deleted file mode 100644 index 4be6c3d2026bbf9ef03dd45e41e7e66dc39c88e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3077 zcmbVOTXz#x6#h<|W+u}qw1E}^qEv#0mJ&)KLJJ5~3Wd-DEthgpCdtqYB$<$zl$(MV zyn{EqP`oZ*`pjBfsw^)rzW4`x(g)vs_DvN0&ZIR_@S&xPbN1QioPEB%_qX@t$GcyD z3t$DlP_R?Mt^gKcw;TpE)MGHfojtYKi+w8gs~FNCa6rRB98z&uLlvIZc;XoqM-&)R zOh{!?N+}H{j%pZ2T7jkDn6!0VTFq#fgRF)oA+O?uG+t2QsBopKs9;3FNdaxd z$b{X3X%1`>2*r;XBSti1QrZ5`id|(_Im-k+bi@5^~8S5FrZy-piWcbd!~GRHOZC9Vk6mlts}H|(aVDkGm% zDNfRm!55fS@}%fmndm@CNmuFyTn2Q9k@qsD;EYG{vmRqlD|nWV4%o#)((JKhmNk!J z%VbPQg3Y;P#&*cu9j2SMQ#zi*If1ZU7>*iwBbhd%WN+5aIUdV9CTPBg2*`r=DKlHg zUaqkn1&;5ZEc)dIq7&AuP8XH<5j%I)U@h&9dGD(QyvT) zT|~w8j959l{fT2{($#Shmvp>^w{^UOOA6lA@g6QSFgo7H2LcV=jmjtr%=UDa zJ>lSP(_k6v_z)lIxPo&M?Wi2C>i8HJbbKPiBs3kL;xh^iGIV^7^Q`wN2PNDt&^h&6 z-4mrmewD@8)a{gtup*3;^qfW#q~eY4v{4u^PZZ5ul1)HX zvXRddkU(4Iv63fU_oFMfZp}z0O~(nhFK7FXO{f2QC@p8VZ4>^axfRk}*EGz9OMPuy z*;I!#m7Rtu`aL~@FfWsStdx(JlH`5);_19!M7C8%S8nsR|EOKa8Vtvp z2V~=5MIK8<{D1_}h%aTh>{^u_ed0Jt<=T_PZG6BJl6P||^|HhzZ@mvjEjx4{zrgaF zNK?6gM1R4|n-X?Yq`SA$tqC3p)W`;EVj+L0)bmF}7*+N4vcUnI+3om?ri%ZUpoP1w zl)AaD<~*~d^#-b2mfnD`0c zviU$P4f(Fa{}mL0t5AGn@KwiZ9vX!jRL4*g40QTK{&8qArR6$&Z8uRH@^jc%9a9@? zMo}lVL0xJnRga@?6n!DzP0YB8p5V-yZ%{u}9rBH%p|l+w$1HOkvj>KJo>mSe#W)%} z1EGL?N|i=K0crF$nucy;&X5E-_a;KOFz*)TcLsbhO&%c5Lyg)f=1<;Oz)Qi0O8~X8 zd%sA%1YN(dQ5nZ0lq703xKR4mT-s1e8`56+`q;fMrQ*>s)OFT+QmFR3YmDm+5faUe zTeDasXC_5Pe*_CSc3?K++l*CAV2ppOv4(%^(TS~Ci$Scz0j@6MNnFMTegwL41Di39 z9(<22_<^T>LN9*CcKnJse!~vjL7%8XztFH#1hGqmutz+My?l9(XvKan+h>@^i)i4h zF$8GMz!Q8~lewK_0HrlVL55K3;x5TWX)SM%RFu{cmk+bWTw+^|8Z?VqB8-t$5#hr| z-c@MfcWk1h67@-9e~Pbdrq_L_YuF(EgeEpB=(&psMb z6@t48w#iA#TLh}O&D9@RutmZ401?G$wTj;NarRN_N0ib$?kwUg|E-|5gFdowaLTX! E4MBw*p8x;= diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Callback.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Callback.class deleted file mode 100644 index f8e0a91090430cb45ed571b9baf33a4dcf47060c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmb7AyH3ME5S$Gr7fgUC-#`HkCnzXL83`#;M2bWd>GsYm%jSG1`4Q#YDEI(A3ULWY zsa@<#qn+8E@1M^v08f}GTq;}sIz{SLn^A7P&pJ&+gv|={j_^ zmDj>Wwe$!+90U|@2rvDK=l@T{e@^Y>bn?oSVq3yY}j6g|&h6T4H#O-X@3AwUB5ICPRU{h$t^ZJI)ZlRy&{!2;>o9@0teaWpe7 z$(A1jLIMe-MrlD}OWP%1OSUXv0e=8-?$|gcNhNAazMl7W&bjBlJAU~0H{Su6#`O%c zIG1KPFX1&AUdUh&B?Ge=q)?LS*CotJc;g5z;*x~R8O-B~fvX1IR7h=V-|<3)#B#Id zD45qg&++H$ItZLV;e5H;Y}mT)R&+(%8@C&FpuJk9xn(z+wN~A+Yfh!LZimiR*mCW) zHQ#Z@1gJ#7nhv$XP-I`z!>NW`8>rrN>opQ95LH;~ozs=My# zu;o+F;=bkCeg(}DI9qYnU2n~8I6u>TlZo)AOCOi={pvnkM9K}WH=8V5JYV=g;pl3p ztGAZ)W`~u_Wk-KRD;wIsby>1jxR5XOD?-5#parjH;4K#A5NrB?o+^o-v8_o7QwnGL z!cfTQYSjsXvFS-7mHKwNz{~J2)QmuV(l^w>qV<(p+n#C4T5Y!cs&mzqdzOjX?3A>X ziIaHA#0Z`-@vMZCcuvAKh2v4%MQwG-_w}~)mWdO1(nJo&O+0~N1B)i!M%ly?#tkf+ zSiw66-c>l;U)Qsn_cy!3>Bq<7UEsau-N^1GA^JJ3YqdwTCfmSpgN4Rsxcwg;tJ^{7 zG!%|iTfV&Nq}P|+dR^L*EG+ueV=KfcU#Ww95hrOT?c@{0QO2Bj427ro9K+N6vO3W- z3&h_HXILffc%GvV5$6~fv38NPzD4T&T^KtUu+$FHR&fWJucNc0j3>wje2)a~lKVdS z9uWT_UWnEr6uj8cG7_m_U&#gOaD7a!IQNe4=ORtonjly44w>)aNDS}o(T?!X1o)vt z`y+vWBJIx@!!Hr_XdARkJsugNgeVdr!p8XAPI#V@WG$<#J4k;DBk>s$@h>P*9 zto|Ayo9&$)8(!%G&Tx~=WQaF#52k{E#d^Sg>jBGjW#&=fIjO-pQVT-b zx{ISbh*@8C0i;;K?=bL34@kNTVm%5ZegNc8g8X$5BnMV#qNC&r>7+s_tGJ8AUJ2T! zd>)-{+nwr4Na0o9JJFxQDcFeR1~7@K4kE|VT9WR>zwGAK3)pr!Nf=&Z9-cn*aP0pa zmRwGEm{*udf`o=uoY;jrJQ=IKrJIZqsgPt0CNmtlZ(xRLNt>LB^q<8Le}_2EVgbk4 JP(_aU`3LI?^@9Ka diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree.class deleted file mode 100644 index b81c08c7b4c9083dcec82e914c9f9b2d72282e0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4028 zcmb_fTX!4P75+vVX-4uS1Q9tEHi-kK*fNgdB&5_16x%q&pv11_I(6ETjHIzViEh=5 zQa7aqQUZmzTnfDeR=a?gyztPjmDnrIT5X^Ei~7*pw`WF*aLj|;+H0LNXV2_!@BQt4 z_Bs0dzyJIf07vji3`v+W8Z)w`Kh_d zh38wJ&77WJTyBYaY-gUh?sUy@6)5NEOruugE0Y;@Ykt$LL$p5;7I+9U8vh zFZ%5=oZOUx)O~NKns%Am#3K#^b?nQ;ygoF$O@Q6I=~K7^y;f~a2&r+~$(oLPvTQQM zT|qYH8`g@wMjC8J&smuz`;L8u-m68+sxxX|jSuzUTea$CM`tF2%02PF_(o@PE;qnw zv+gBS!<*udvsk0`@X#=;FOs)Pc2&U(LmkY|0VDWNrLx1f#+RAom{-J5T1 z>3FWzY!s}Mwrrrdx7!a%Yceo~BL*@!Y~UE)VvJqW>6sAiUl@2B?-;l)!%-Yjuy1Sk z3pSquunBZ;X-v$l8+ZfgBbMd@SVbxd-HzUbo~=*DCc|)$7yaU57f@YB&t`!szHIrx9=JaLYfjyq(Ra z^x`%|9DPBw9?ur&dik*zwnlP%TJr2J@G$Ah$C-L17KnESt; z4+1XD+A>#YrLf8qiDw#1!gr_X+T~2vc3gI<-CmWnC0;Vv_@idM?lq{<&a4DijQfwo zR#Ys`q1n#Y?WRX}7QB1I)g90noO)XedSb`rk=!mSA+2u8#RLa=UpvSi@+dSsj3+R} z=V4wSLr8Ny(y@M$>(P$&KCTaStb37=?nm8(v_cPqy^C`XF^}OXj>oxj5J8yp03~4Lr?eJM(9r-%r`jpQVqO~su;vRJdOkSI-j1v)07VQ zfcPfHxgxaZ2zw)+Cg@^_rcdCRz=4-}e+}{7qjwQo-b6f`4y%bCv3eKAa(ZMFyEd_V zWCIWUkza)%)^~drMxit0NAP{mYOjwHSk+0#v-lQmgruwbwv-&Ah*N((73u3AO{sUV zCxVo^fd@avm6Uo5i92|RyhOvtwWOAeevYC{YVlKO>P@KO<9h!MqykSzH?TL+%YnY# zL~o~bpD!JcrTf$iNj(+wz?0e?d@Y2(K}|&%(;J#{^FN;mr(rLuLre`&;FZ6Ky|BpR z3e#R9i>t8tzlI8~a=u3Sb>8!Z>lMZ`&eLLwsn+?fAJb$w#>}kZdCahk25^aI#|$H9 z-0hsK;|0njC+j#xUCF>YW~nR1u#Oj5DysMN60*$oX+9?r{TCinl!u;E{)s+iLBpAU z&=5Nm=6!;x#QPgR)tNti1F0|g?58a1$(x?jhW}0Aj3Va`B~p!N>87~S=T)MBjIbIX zmiqGmqi54wtKd~Uh}V$9>m60l*N(GK4km(&k?#aXBwBGYnpQT@cMs2Z@mhzA(YA|A zbgkuL*wgM0LcD=pchSF`cw`g%|0=RuI3SpQPW?)Kn^}5?IbH9-?hmkqSt9Nw=y%&Z zlqeD&_J5U;k=r=nQQ@0Oc*%O7Wq4_O8ubS|%i`HF1P^&oTtKx$j2t|;VzE9Gj9Z3_(qWvrdMexB7@T0_= zG-zF3#Fv@7oO|w>d*}7-`31lp77b)Eoks>UI%ajuG3c^??aLrwDAupUjo^-OJG>G4 z%I)kkj2tLeg@+8aji2eENVDsEx59Gd{$`6Id+fC(!(?5#@*?V4(r?DOxQAy8rzLz9 z`)M#6b`|w6oDP(n_HB6`D$ivw&s|sg$BqaBNr;oW?e(~DlqD>|uWoug5N_M@`n>10 zBS-SKw4x4=Lgnz3Z0$QKy(wplC?GMFU-dH>9T}!&4CRf@A=t-UjD{EawmehutIQO= z6A#dYj(HO~jObWkIQqY2hSKL|hNe>;Udh)5?EbkcR_Rw{>6g%wV)0~YWa}8EGf&wXH{J_X)_Lb0SGCQsEK|EMtsfD+4%8Op-^12`x*k0;UrBB1$Per#sH& kY7fxv$k2!gq$3WlCxqqzkP>PrC#VWF2Vohtt707acd-k%$N&HU diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory$1.class deleted file mode 100644 index d47dc88a0338471252db0fb7d5fb00f28fc8df60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 zcmbtSTT2`<7(LmY-C4)+uC3aOt@xmQFjeT2R>T_=w)H^~1VJ)0VKz%PDRU9~uk@ut z3;uxqsM2rN0Y~v=?L+ci$T{E1N&fu(bqin}iyoSobMeYU4RanEc;n)&iv@<}rZOtq zVyG{#oG>`MHj)fuZDr)QycfviSOl6nlWiLceIgQ7)MeAjIx2PXj$w5F@_QoF^gx7} zO@1)=UyPB-t`=!3Q--~EXnR~}6^KCa?nRHM!bE|+9*6&HeQVPbw5bY+-Pd+12TMr3(H)a}ZF<4z())Hh)B z8S}P?+B>p&63PQrc8aMKQBqf2^*;Y#IW z0+S3ogHt|!2Zot@^D5pjZ2vDg!`i?U_(=b`N&g(E(<1LcPe~c4$S5{G+<;wEQiDf( zv)??!Fy;Q;0gB^PIfX^kDZuM=x&XI+qjq|O`W59>{CNf6y2Fp}5q_$~-w*!@=P~%{ n;nV#QGkDRDFELBe!3gbRwC3q{Beai_yav@IjRei(HHQ8HqUQd{ diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory.class deleted file mode 100644 index 49194afe5c41d4fff32d5e10c1670164afa02a22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1115 zcmbtT%Wl&^6g}fOaqO73l!j7X1sWg;&{2_CB`S!DA|wkWT2%tE8QVkZ$gzhlcKMy7MrJE0Uo&_N< zNcA=ey4DY(Alqc9v^#qY`c~}IA@fcU$>;gVmC3GfLy9bpx$KD~P<|2Av;BakcwGMM z*1y6K5i64Kiy*_(_RN$o+@bWcUZ?yiYQA{ftp=E?TOcyj`(9YgZ|%f+;>qnmO=}lS z)>V&1Rr&#?OS7V%q`N`n(_=E}X#orumDse-lc!+;724B3AbXA?oK{9_ zwR;5iXgj8{jfe}Sg>kWOSLeBMyW74kG(C03wTjrizjkTu9B Fz(2lIAFTiY diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$OgnlExpress.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$OgnlExpress.class deleted file mode 100644 index 3472e9afac2c635df180ce9f8a637a1caf3ba8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2251 zcmbtVOLN;)7(Lf^qF7P$Y7;`rBZa1QY*W!fXu)mLCQVDhPJo0Ihw_je;VLLn#*YwS zN2hcJ8`zXR!!XlDnV|_oW_WD*O$=~8SvYdqVF--JlJ2K_&v(A>oO|`#A3y#C;1o(a z4q-~ec^xrKC2GvLN@P~YC0y3SX9tUj<+&jTD8k{g@OF4wPBgAHeI-CVEQ zHI9rco@ZBQT&q^IIh@Lu{Wa5aosw0u%+-xGvu1fKC4bXg^H&CDm zFIekAebj;tZY^gmF{yU&K}42Gvnn(d|IzG=*Q@>q(z0A28HIbDTC&k1oWkWOSXjdN z{yQc@`k@PoQOK~gNIU*ll7wfivArD|mfMg!6_=tXQvZ#!zTh{iW&4sN4l_daPl$;P zjNq_B-(JTW7{jhhUdZApV{bb#efvb4Kzz`nNP&BZNHx&-!E(ziDxB(52F5=RyKck@pBzH3{afw%B>8=;m*47`JP4Omk8x&2d%Y#X+2 zH*r&Pg_HY+Y=dcfiPlXm%Tduw>7%Vz7)s>>U82#POii|AROsSvUTWH>&HQan4Ne2@ z!`y?6ySFf!KmE_1Z#6hzW0aagge-XQ$?jcm(8y<^IN?tDmlQh66t{{aJhcyjX8;fC zm{^b>fB`Wr@12a(*1SH#(In!00{YV1Q0X1Sira|aL*hHeVtABSIqZRTBv8X+d@`Ez z@i?B~NQuEXL$GdgPMr7S>F<%)K}RvMjm|A-85#56^#hW33p?m8X0qEbehz>RbE(c{ zl4^hez$SX}A)_BL_HmGMGhDLYB}1bZE0GzJq-^U8!RvSSglBZ&WwQ4J^0t3Np@rs0%^XP`7Z z+g88?o+B6O?iA4kPfKU+p(}k?Rz(E*jNkFk11dw!X|1#xPLmWr3Yfr|5NwWRNjD6U zCX?Ml|JC~tzo0H(w)!u^Hzk*+=Yy`x(+fet3OSq&u}=rNfTUn=Vc&eUVn-8C#KdU8n2>Pbq_>`#&ZNoELuMiPYaaXnKgw9( z1VOz(I_a0H>UvdO^*%n|-T_?W%)*g{V+$vQ^1w5GcQy%C6cH*<#;EYYmr= z^z$lH+T-6Ax8u(96z6leX>FHZ8U{(|sGjx}?;`E_az0YR)yALYMg45!duD{&jcLx; z6mqwD{5HZf*4EV<^e6~*w87uJEePn!mU-7 zTU{Bo$`9}h{1jKl`yP#S1~;L{&EnK&_9I{lrw$*BEF-f4}SSLndS4@vE6DHZ0 zBrZcLgrLHyq;xNcrs}CzF~ASfRegqmPquyaWs;-(fxuBjYxQ_lFJ+;D72AarF(PhdFV3|BQi6#%`o|opWY0TjAV5DGuS8P-b>GzGN!PPbQwwkNMV3v0{byYAe785kxYH~Dmy{_hLsDu7aY(heObDaYQe0siMTAg*ajM_J zI8L5U<_VHgJB*Wm<4;liX|f)Lwn>nj;|#}Hjx5I*DU61A>KCGe1SppRRmLYpF+g*a+%1c6x zB*teyl<~}Tt)y08bRW*#&iS1=|1nBX_n=I zk;Nkoc|4XoD_N|{aWRWEhMe$PA@>?K!%nT?y9RfJ$xUvYox4VhdzR^67_M(cj%`@B z88wY46pm3B?iyrwL~q9caEUT21K<)Cjwvgw8l?0{kTr%DR> z$~?0hAt7^H4JR%%Ul&b}hfzQ&);lSb@6l;sb4y9J^*5on38&TlC}`NbLdrYdzk|!N zSqx);?is_-Tl$s`50@-!dT(#TbvIfq9k;M9&21e67}PO}F&$4ZqhlNs3`GU(N+>;_ z>bQv#!}EV_7AdUgy@E*PuSpemNkqouu7vOq!-#qz3&EV1OZ`E6!Hs@ zjsbb8U<{a0;XvvG(lR+c7_yz@qqHK0W6vF8N^0>FGMC7H1zWsCuJ^*TD&I)QGtNgb zxPwXJNZwS;+eezp2g+UE74j!jZD@V4%h#~wF1Czm(wGfaNz<7aYp66*kxLYMZ&&D} mMh>%GIcL?qfx;E^lQwRAL|Te^U6c~J%+X!~_i$g04}JhS!xT3F diff --git a/sandbox-debug-module/target/classes/logback.xml b/sandbox-debug-module/target/classes/logback.xml deleted file mode 100755 index d80c27bd..00000000 --- a/sandbox-debug-module/target/classes/logback.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - ${user.home}/logs/sandbox/debug/servlet-monitor.log - - ${user.home}/logs/sandbox/debug/servlet-monitor.log.%d{yyyy-MM-dd} - 30 - - - %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n - UTF-8 - - - - - - - - ${user.home}/logs/sandbox/debug/exception-monitor.log - - ${user.home}/logs/sandbox/debug/exception-monitor.log.%d{yyyy-MM-dd} - 30 - - - %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n - UTF-8 - - - - - - - - ${user.home}/logs/sandbox/debug/jdbc-monitor.log - - ${user.home}/logs/sandbox/debug/jdbc-monitor.log.%d{yyyy-MM-dd} - 30 - - - %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n - UTF-8 - - - - - - - - ${user.home}/logs/sandbox/debug/spring-monitor.log - - ${user.home}/logs/sandbox/debug/spring-monitor.log.%d{yyyy-MM-dd} - 30 - - - %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n - UTF-8 - - - - - - - - ${user.home}/logs/sandbox/debug/debug.log - - ${user.home}/logs/sandbox/debug/debug.log.%d{yyyy-MM-dd} - 30 - - - %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n - UTF-8 - - - - - \ No newline at end of file diff --git a/sandbox-mgr-module/pom.xml b/sandbox-mgr-module/pom.xml index 0d17e5f7..ba77aa62 100755 --- a/sandbox-mgr-module/pom.xml +++ b/sandbox-mgr-module/pom.xml @@ -6,7 +6,7 @@ com.alibaba.jvm.sandbox sandbox-module-starter - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT ../sandbox-module-starter/pom.xml sandbox-mgr-module @@ -47,6 +47,12 @@ com.alibaba.jvm.sandbox sandbox-api provided + + + javax.servlet + javax.servlet-api + + org.slf4j diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java index 32986785..5920bfa5 100644 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java @@ -3,20 +3,22 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; import com.alibaba.jvm.sandbox.api.ModuleException; -import com.alibaba.jvm.sandbox.api.http.Http; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.resource.ConfigInfo; import com.alibaba.jvm.sandbox.api.resource.ModuleManager; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.reflect.MethodUtils; +import org.kohsuke.MetaInfServices; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -@Information(id = "control", version = "0.0.1", author = "luanjia@taobao.com") +@MetaInfServices(Module.class) +@Information(id = "control", version = "0.0.2", author = "luanjia@taobao.com") public class ControlModule implements Module { private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -106,8 +108,9 @@ private void shutdownServer(final ClassLoader sandboxClassLoader) logger.info("shutdown jvm-sandbox[{}] server success for shutdown.", configInfo.getNamespace()); } - @Http("/shutdown") - public void shutdown(final HttpServletResponse resp) throws Exception { + // @Http("/shutdown") + @Command("shutdown") + public void shutdown(final PrintWriter writer) throws Exception { logger.info("prepare to shutdown jvm-sandbox[{}].", configInfo.getNamespace()); @@ -138,9 +141,9 @@ public void run() { shutdownJvmSandboxHook.setDaemon(true); // 在卸载自己之前,先向这个世界发出最后的呐喊吧! - resp.getWriter().println(String.format("jvm-sandbox[%s] shutdown finished.", configInfo.getNamespace())); - resp.getWriter().flush(); - resp.getWriter().close(); + writer.println(String.format("jvm-sandbox[%s] shutdown finished.", configInfo.getNamespace())); + writer.flush(); + writer.close(); shutdownJvmSandboxHook.start(); diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java index 5d7907c1..2ccb6495 100755 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java @@ -2,31 +2,33 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.http.Http; import com.alibaba.jvm.sandbox.api.resource.ConfigInfo; -import com.alibaba.jvm.sandbox.api.resource.EventMonitor; +import org.kohsuke.MetaInfServices; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.PrintWriter; /** * 沙箱信息模块 * * @author luanjia@taobao.com */ -@Information(id = "info", version = "0.0.3", author = "luanjia@taobao.com") +@MetaInfServices(Module.class) +@Information(id = "info", version = "0.0.4", author = "luanjia@taobao.com") public class InfoModule implements Module { @Resource private ConfigInfo configInfo; - @Resource - private EventMonitor eventMonitor; +// @Resource +// private EventMonitor eventMonitor; - @Http("/version") - public void version(final HttpServletResponse resp) throws IOException { + //@Http("/version") + @Command("version") + public void version(final PrintWriter writer) throws IOException { final StringBuilder versionSB = new StringBuilder() .append(" NAMESPACE : ").append(configInfo.getNamespace()).append("\n") @@ -40,32 +42,29 @@ public void version(final HttpServletResponse resp) throws IOException { .append(" USER_MODULE_LIB : ").append(configInfo.getUserModuleLibPath()).append("\n") .append(" SYSTEM_PROVIDER_LIB : ").append(configInfo.getSystemProviderLibPath()).append("\n") .append(" EVENT_POOL_SUPPORT : ").append(configInfo.isEnableEventPool() ? "ENABLE" : "DISABLE"); - /*############################# : */ - if (configInfo.isEnableEventPool()) { - versionSB - .append("\n") - /*############################# : */ - .append(" EVENT_POOL_PER_KEY_IDLE_MIN : ").append(configInfo.getEventPoolMinIdlePerEvent()).append("\n") - .append(" EVENT_POOL_PER_KEY_IDLE_MAX : ").append(configInfo.getEventPoolMaxIdlePerEvent()).append("\n") - .append(" EVENT_POOL_PER_KEY_TOTAL_MAX : ").append(configInfo.getEventPoolMaxTotalPerEvent()).append("\n") - .append(" EVENT_POOL_TOTAL : ").append(configInfo.getEventPoolMaxTotal()) - ; - } +// /*############################# : */ +// if (configInfo.isEnableEventPool()) { +// versionSB +// .append("\n") +// /*############################# : */ +// .append(" EVENT_POOL_PER_KEY_IDLE_MIN : ").append(configInfo.getEventPoolMinIdlePerEvent()).append("\n") +// .append(" EVENT_POOL_PER_KEY_IDLE_MAX : ").append(configInfo.getEventPoolMaxIdlePerEvent()).append("\n") +// .append(" EVENT_POOL_PER_KEY_TOTAL_MAX : ").append(configInfo.getEventPoolMaxTotalPerEvent()).append("\n") +// .append(" EVENT_POOL_TOTAL : ").append(configInfo.getEventPoolMaxTotal()) +// ; +// } - resp.getWriter().println(versionSB.toString()); + writer.println(versionSB.toString()); + writer.flush(); } - @Http("/event-pool") - public void eventPool(final HttpServletResponse resp) throws IOException { + //@Http("/event-pool") + @Command("event-pool") + public void eventPool(final PrintWriter writer) throws IOException { for (Event.Type type : Event.Type.values()) { - resp.getWriter().println(String.format( - "%18s : %d / %d", - type, - eventMonitor.getEventPoolInfo().getNumActive(type), - eventMonitor.getEventPoolInfo().getNumIdle(type) - )); + writer.println(String.format("%18s : %d / %d", type, 0, 0)); } } diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java index 728bb987..068dd730 100755 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java @@ -3,26 +3,24 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; import com.alibaba.jvm.sandbox.api.ModuleException; -import com.alibaba.jvm.sandbox.api.http.Http; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.resource.ModuleManager; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; +import org.kohsuke.MetaInfServices; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; +import java.util.Map; import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.matching; -import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static org.apache.commons.lang3.StringUtils.EMPTY; /** @@ -30,7 +28,8 @@ * * @author luanjia@taobao.com */ -@Information(id = "module-mgr", author = "luanjia@taobao.com", version = "0.0.1") +@MetaInfServices(Module.class) +@Information(id = "module-mgr", author = "luanjia@taobao.com", version = "0.0.2") public class ModuleMgrModule implements Module { private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -39,8 +38,8 @@ public class ModuleMgrModule implements Module { private ModuleManager moduleManager; // 获取参数值 - private String getParamWithDefault(final HttpServletRequest req, final String name, final String defaultValue) { - final String valueFromReq = req.getParameter(name); + private String getParamWithDefault(final Map param, final String name, final String defaultValue) { + final String valueFromReq = param.get(name); return StringUtils.isBlank(valueFromReq) ? defaultValue : valueFromReq; @@ -64,11 +63,11 @@ private void output(final PrintWriter writer, final String format, final Object. writer.println(String.format(format, objectArray)); } - @Http("/list") - public void list(final HttpServletResponse resp) throws IOException { + // @Http("/list") + @Command("list") + public void list(final PrintWriter writer) throws IOException { int total = 0; - final PrintWriter writer = resp.getWriter(); for (final Module module : moduleManager.list()) { final Information info = module.getClass().getAnnotation(Information.class); @@ -104,26 +103,29 @@ public void list(final HttpServletResponse resp) throws IOException { output(writer, "total=%s", total); } - @Http("/flush") - public void flush(final HttpServletRequest req, - final HttpServletResponse resp) throws ModuleException, IOException { - final String isForceString = getParamWithDefault(req, "force", EMPTY); + // @Http("/flush") + @Command("flush") + public void flush(final Map param, + final PrintWriter writer) throws ModuleException { + final String isForceString = getParamWithDefault(param, "force", EMPTY); final boolean isForce = BooleanUtils.toBoolean(isForceString); moduleManager.flush(isForce); - output(resp.getWriter(), "module flush finished, total=%s;", moduleManager.list().size()); + output(writer, "module flush finished, total=%s;", moduleManager.list().size()); } - @Http("/reset") - public void reset(final HttpServletResponse resp) throws ModuleException, IOException { + // @Http("/reset") + @Command("reset") + public void reset(final PrintWriter writer) throws ModuleException { moduleManager.reset(); - output(resp.getWriter(), "module reset finished, total=%s;", moduleManager.list().size()); + output(writer, "module reset finished, total=%s;", moduleManager.list().size()); } - @Http("/unload") - public void unload(final HttpServletRequest req, - final HttpServletResponse resp) throws ServletException, IOException { + // @Http("/unload") + @Command("unload") + public void unload(final Map param, + final PrintWriter writer) { int total = 0; - final String idsStringPattern = getParamWithDefault(req, "ids", EMPTY); + final String idsStringPattern = getParamWithDefault(param, "ids", EMPTY); for (final Module module : search(idsStringPattern)) { final Information info = module.getClass().getAnnotation(Information.class); try { @@ -133,14 +135,15 @@ public void unload(final HttpServletRequest req, logger.warn("unload module[id={};] occur error={}.", me.getUniqueId(), me.getErrorCode(), me); } } - output(resp.getWriter(), "total %s module unloaded.", total); + output(writer, "total %s module unloaded.", total); } - @Http("/active") - public void active(final HttpServletRequest req, - final HttpServletResponse resp) throws ModuleException, IOException { + // @Http("/active") + @Command("active") + public void active(final Map param, + final PrintWriter writer) throws ModuleException { int total = 0; - final String idsStringPattern = getParamWithDefault(req, "ids", EMPTY); + final String idsStringPattern = getParamWithDefault(param, "ids", EMPTY); for (final Module module : search(idsStringPattern)) { final Information info = module.getClass().getAnnotation(Information.class); final boolean isActivated = moduleManager.isActivated(info.id()); @@ -155,14 +158,15 @@ public void active(final HttpServletRequest req, total++; } }// for - output(resp.getWriter(), "total %s module activated.", total); + output(writer, "total %s module activated.", total); } - @Http("/frozen") - public void frozen(final HttpServletRequest req, - final HttpServletResponse resp) throws ModuleException, IOException { + // @Http("/frozen") + @Command("frozen") + public void frozen(final Map param, + final PrintWriter writer) throws ModuleException { int total = 0; - final String idsStringPattern = getParamWithDefault(req, "ids", EMPTY); + final String idsStringPattern = getParamWithDefault(param, "ids", EMPTY); for (final Module module : search(idsStringPattern)) { final Information info = module.getClass().getAnnotation(Information.class); final boolean isActivated = moduleManager.isActivated(info.id()); @@ -178,22 +182,23 @@ public void frozen(final HttpServletRequest req, } } - output(resp.getWriter(), "total %s module frozen.", total); + output(writer, "total %s module frozen.", total); } - @Http("/detail") - public void detail(final HttpServletRequest req, - final HttpServletResponse resp) throws ModuleException, IOException { - final String uniqueId = req.getParameter("id"); + // @Http("/detail") + @Command("detail") + public void detail(final Map param, + final PrintWriter writer) throws ModuleException { + final String uniqueId = param.get("id"); if (StringUtils.isBlank(uniqueId)) { // 如果参数不对,则认为找不到对应的沙箱模块,返回400 - resp.sendError(SC_BAD_REQUEST, "id parameter was required."); + writer.println("id parameter was required."); return; } final Module module = moduleManager.get(uniqueId); if (null == module) { - resp.sendError(SC_BAD_REQUEST, String.format("module[id=%s] is not existed.", uniqueId)); + writer.println(String.format("module[id=%s] is not existed.", uniqueId)); return; } @@ -214,7 +219,7 @@ public void detail(final HttpServletRequest req, " cCnt : " + cCnt + "\n" + " mCnt : " + mCnt; - output(resp.getWriter(), sb); + output(writer, sb); } diff --git a/sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module b/sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module deleted file mode 100755 index b90a60e6..00000000 --- a/sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module +++ /dev/null @@ -1,3 +0,0 @@ -com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule -com.alibaba.jvm.sandbox.module.mgr.InfoModule -com.alibaba.jvm.sandbox.module.mgr.ControlModule \ No newline at end of file diff --git a/sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module b/sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module deleted file mode 100755 index b90a60e6..00000000 --- a/sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module +++ /dev/null @@ -1,3 +0,0 @@ -com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule -com.alibaba.jvm.sandbox.module.mgr.InfoModule -com.alibaba.jvm.sandbox.module.mgr.ControlModule \ No newline at end of file diff --git a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule$1.class b/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule$1.class deleted file mode 100644 index edd6258234e0e7116ce8bd8cd5b061b1a8dc4263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1822 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 Y@nxJiyaC_BKk)>|2l;;-ziny#KeQ#gZU6uP diff --git a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.class b/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.class deleted file mode 100644 index 40240d565389246aaec3870b93abae99033da96b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9307 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 diff --git a/sandbox-mgr-module/target/classes/logback.xml b/sandbox-mgr-module/target/classes/logback.xml deleted file mode 100755 index e5836cd2..00000000 --- a/sandbox-mgr-module/target/classes/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - ${user.home}/logs/sandbox/sandbox-mgr.log - - ${user.home}/logs/sandbox/sandbox-mgr.log.%d{yyyy-MM-dd} - 30 - - - %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n - UTF-8 - - - - - \ No newline at end of file diff --git a/sandbox-mgr-provider/pom.xml b/sandbox-mgr-provider/pom.xml index a69e579b..19497bef 100644 --- a/sandbox-mgr-provider/pom.xml +++ b/sandbox-mgr-provider/pom.xml @@ -6,7 +6,7 @@ sandbox com.alibaba.jvm.sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-mgr-provider sandbox-mgr-provider ${sandbox.version} diff --git a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain b/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain deleted file mode 100644 index 8a1bd53c..00000000 --- a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain +++ /dev/null @@ -1 +0,0 @@ -com.alibaba.jvm.sandbox.provider.mgr.EmptyModuleJarLoadingChain \ No newline at end of file diff --git a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain b/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain deleted file mode 100644 index 7457548b..00000000 --- a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain +++ /dev/null @@ -1 +0,0 @@ -com.alibaba.jvm.sandbox.provider.mgr.EmptyModuleLoadingChain \ No newline at end of file diff --git a/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleJarLoadingChain.class b/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleJarLoadingChain.class deleted file mode 100644 index ddc309fb587023bfb4845be5a623497a0005e57b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmbtRJx>Bb5Pi$nDS~_{YGv%u!c9zU#Apn`!kk)2==bh6u;lKREC=GxvNEyo2l%6m zvj@g#G!_;+llNxc%8t1zFT%bs%Hk!NONMH~aN+to;v!U@@B|;tB0dpu;ORLZ8$DBjG&~v@ z-i^k|!?g~kp}Z2t)gn;wpfeOIZZkOH0yETF?nul8SDIg{P`2$@<>*6ZDTej0DGbH# z+?V4->3HH`oA8~U8ecB5cYp7EXj_$#M}gt|pTA(Jrh|tf9`IXlB>jZpkW;*x2wka6&*A~o@OWO5aQ$+`TW5X*kc-AA#1}x39G416Hvq&Ax3PO jidgY6y^Q6)3u~#cxd<+WR=SP~*(ynLq zFA2@QNfco%)VcapWs$NMGD-0m(ptIPlL^Js0%_bj7=tFsv{XmF`8teka-fB zD>1faq7!9BHn8G28<*cdnxslqXk?=EL4PQ9-X#R7_X*}89Lb3ksmurBytJIuos0BS zSrpxS>Eu`oPcSXgMx5wW-GOlY%647HOI5DFR_ZiyJ>KCaEN8XinwhXZm*U0n6Z#Co zoBt6;Sn>I1(mHK~RgZb2l}Y9(y;8#VZQ^MQg!b`Otj47_c@bcb{c}^$HPKv com.alibaba.jvm.sandbox sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-module-starter sandbox-module-starter ${sandbox.version} diff --git a/sandbox-provider-api/pom.xml b/sandbox-provider-api/pom.xml index 12f0344f..4807571e 100644 --- a/sandbox-provider-api/pom.xml +++ b/sandbox-provider-api/pom.xml @@ -6,7 +6,7 @@ sandbox com.alibaba.jvm.sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-provider-api sandbox-provider-api ${sandbox.version} diff --git a/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleJarLoadingChain.class b/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleJarLoadingChain.class deleted file mode 100644 index e3805afbc6296f0b6b12fa77cfef3077895a3926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmZvXu}%U(5QhIjWCblWc0K_#Ok$~}(SkrMF!r-|n`1A_&SimWiZalB0752(+KDg(}Ct>uuFI=lnU}gt zh3oEwhlQ5A;AWEMXUEG*e4KU?!c(DZmf)>e;ksS(Mq+7o&rQ9RWO71Z diff --git a/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleLoadingChain.class b/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleLoadingChain.class deleted file mode 100644 index 6d578adb32cdece79ef8e27723a0a2b8de4fdba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmZ`#F;2rk5S$Gm2Y~{Kf-gYBNi-BLBdClhg6Q|`Q*zej*0LRww^8r_9)(y3MBGrE zc4xFRJA0pB?;il}aBgsFFejKOT!yqF$aP+E&o**e*=5%#nT?o5PON+&zZb+AuTZlnJd1+kCe5A99&7P;>8O?LB2m_O_aUw1)LYjCD`Dch#-gN$(X z<2H com.alibaba.jvm.sandbox sandbox - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT sandbox-spy sandbox-spy ${sandbox.version} diff --git a/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java b/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java index 5b6de7fe..e7d0b01e 100755 --- a/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java +++ b/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java @@ -258,8 +258,14 @@ void insert(final Node top, final Node node) { } } + int abs(int val) { + return val < 0 + ? val * -1 + : val; + } + boolean isEnter(Thread thread) { - final Node top = nodeArray[thread.hashCode() % THREAD_LOCAL_ARRAY_LENGTH]; + final Node top = nodeArray[abs(thread.hashCode()) % THREAD_LOCAL_ARRAY_LENGTH]; Node node = top; synchronized (top) { while (null != node.next) { @@ -273,7 +279,7 @@ boolean isEnter(Thread thread) { } Node enter(Thread thread) { - final Node top = nodeArray[thread.hashCode() % THREAD_LOCAL_ARRAY_LENGTH]; + final Node top = nodeArray[abs(thread.hashCode()) % THREAD_LOCAL_ARRAY_LENGTH]; final Node node = new Node(thread); synchronized (top) { insert(top, node); @@ -282,7 +288,7 @@ Node enter(Thread thread) { } void exit(Thread thread, Node node) { - final Node top = nodeArray[thread.hashCode() % THREAD_LOCAL_ARRAY_LENGTH]; + final Node top = nodeArray[abs(thread.hashCode()) % THREAD_LOCAL_ARRAY_LENGTH]; synchronized (top) { delete(node); } diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$MethodHook.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$MethodHook.class deleted file mode 100644 index e23ee6824caa45d2df8d80563bee37a4b0722308..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787 zcmd5+ZBNrs6n^g3t=pUfLDb<3q61lZ=>P$F5kwq;WNgWp_;Kk*kzv=8b|CyKO>B(D z_yhb=#&d6>%w;6?n_r%D&eQvx``n)1{`&p>Cx96&#}UUA2bDvP!!(B(4znDdCy>CL zj0G7l7g)VwshqFw9cv9u9pR zZgJ@4(2qqKOAM;GX~EA(GrGE)rP>i)O@{Co|EMxST49)e015h2$mEFJQP#(;ib%di zB*P+-QxVCwh;#;uF)*@!n{a@t9|#cxOekLwQ^s9{l?fLiWzq#x(vk~FNk?4BN;>Ky zs-$HXkHi->HPvZ%i&0Lp ztgzs17r_X(K;qG^;%G4Ov##PuF!5Mdu@p?4?J5oj6DwWCp^9^U+^_K7IzUh?<5p9^{clh2I|Xv5-YIPxqrN z76nF|>+PLZd$qm3)7WgR3y8YF$eQnkk@TW1>Gtd-Q9)qr6iIK-nho}gGye9|=H~Mj z`x62=#>bq=rX30BbE>>it~ z?s17imju!zC$a^yfgN^zZ&#oghr7~yVQzNzZHr-(0fWJke8NahheE! ztG%vi diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier$Node.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier$Node.class deleted file mode 100644 index 60269c1a07eec91da168a21f39bae6c1bce62e22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmbu9%Wl&^6o&uF&50A55NON&8Xy;_)2fSBK`e+=2`Oq9sk&e{b_VLmaUwgd(zgOZ zRfz=;zzeVf0S|&W$2KH|L_*2tobmXaf4+Za>`y;Gd<3w8wG2`yad^Ptp-$nE4h>}u z6%AE^)bP+#vLjGzb>*=%9O=F`_Jg^GKz!gS4UYx#ZRNabO2>IFJDzE8C z-&ejsVz=K>0*z3`>h}!k*rqh4(LL@NzH~cge`NTB6QeyiDgC8Z;$~Vd;i}P)n4a3M zJ$y#Xmn#P}+YF@hE!$PQM?F({`_go1v0|%lN#{U%Ha|y`iQ%D5Jj>;O{jiuWElc@+ zX{%lr7)3>M;Z_#18XM92zhSoP8v^eZfmwiMQ6KA*J|;|Uv8imd-RpJU@4ZDVMx5s_ zsNU`$d6wF-`97rSYOV1t&LNFV4h7_M&^cVhDu<%Lc5ut*IdFl(_zT%HyUH4Bcp|Vl zkD@^7f7)=DK3I)D#9JE0aG9b`8Tf)E zzG9h1xv&Z=fd(tAMhZJr$+dd*49RNk6k@EhL>$03B=DVBegsM@Vf7y+J>V3DG_K%k zq-juQs$}&&;%{gWLZyPq&l5mNTw@?=zK$DFbAuLTAgx+^d5YNd_K-pg+qoDwNr)+K zO{JJ26K>0x;`R)R875{^+@X^UPiS&4#B?*~D9HQ0V8`y`0_7q-XHlaAfl7=FHN$da&}O2eTX3N@0D1d>v$93q+qde9ImARY9AS;8v8kT6N8aO-&E z-*Be(#tS=DV06@(dgs0W!8&6vbUaMQ0iSPo6N1yuIK-Lc{SLd|`##U}zVGh-aP-x; z07mha2P(#;nUH2unkf&O5mPa(;#D_Xcuj7`mZj%& z$$VPRF6)JiT-%$@(nf|VTs>1z;&w_21g6e(zD&Mxv81QppVPN(P_9g_XcS5Ud$ovB z10<=VQp#^LFR@H6Q<~;7AU8#ZIyKzJn;I6dD3L5_cmX~QUAQ37 za*~+&wM`>UsoGAqn9KYJR^wFNXl0lJ=;^dkEc(WyQGwlBs&uG^RGi?LkT}YqCZeMP z4{HHc1E&9n&$y)E`!A_y{cY&Q4eO!DCgrob!A{QQs8prgT4#DN+ia@4_c=Yki~+uM zn)&i_pc8F4&-a7ZT(zS`RwCyv{#kmw(#_c}6y6JjLWdCiI}V}TF(>!XEZ1`X5Y9WH z5C=uh9`JSrJ+$qpqx}gQ9y8R>=*KSz;t6`qYo=TD;UZTIz^elcdWmxdqMrl1z((;Q zG4OQ;za3eVk;5`rxQt0oh=Q9+6@m*UonKLp-_VNRN$U^B`IBAtmx-d^a$7;+$BQNk zhBEOu%6M8Coev2c&&PbTn(%`Ms0+3_@eR~3QLn_hIsXLh!7otX{Wa8;1GpDI65{^x z;}caZOh{Ay`EmgF>k&(?X;HGd)rnOCzaF3mnJNs2Jjjr%V*j@eV6lKa!11 zUrfdi?ZZPf+oN;gRCs05`A7^?w0rQ%Ar+!+`1JURv&;GYXNokFb+lb|-_eH`BN(Hf z2(Fmp7$(fo%IYB8fN&AJiWX51uW+MRcyLKHkb{PZXvUamF}VcEl6Wfm#t_CZ(Ka!H zRN6r@VN+?vRJsky5xgo!%wMEyMn#kkF7so{qWH+BIC`3*)H-wk&0-o15AUOqbnc^} zOl$aa2J2za0R06BLXH+8Ga=$U33-`}cJzo2lIcWLbXAcUt&kY4knq_gI@l|+d@T}v zGD!i{F-a<}RLFpOMW6EX4;1qyo6kd=kN*^()UZrgFuaeZ(<~m4L>q(k(Mca0M2=Ox zCVEMt4{hQiIz>MQ#XuDSe}#bGCU8>aO{^rDk17Iv&nMu(RmOGTW%d+sjx!ftVJ6)q I=i=J^57hmYK>z>% diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy.class deleted file mode 100644 index 4303988a50976aedb5011c25678e010eeca753b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5958 zcmd5=`F9i775>JSG?qLVLogs40&yHLTjUT-z;`5clC_9kU_S;-rwj zAxFQd<69wo8{Y}xyLd$?ugd2&`Me&&_wYuDe5XTb!uMr%MmF9Qfj`jkL!tagC}-vK zV;$#0ScQ{1-jW@TZ)*tkS=l4@=w91Croo7&QdYV`kPs{;7!(D?Mb6BuQD^Ysbyx0W+PDwM+D6k0cnFH5DlrWr<9b+B7t@IxJo! z);-BE<)Iagg)q8c(LS+O!#~RKdyc2Av7{BxMjY5&jFqm>-Hw1>KhS@8SI?e-!Jfl? zJwtm3c57(7y*JKz=KB+a{rU4EVrcK+z``cKsoMmR?)Vd_QENtn7M0q}n(<>S1~+3GSWHe-22!e&tub3_vadDj@wliqyg5?I znW#V-O6C)o2HD5iN0>a4T^vTOOk5qwWG!w)N4e;kiCdG|gq_Oh_z8V0v6Hnwm8Q>2 z%OsvsSjsSTByAsOZM2qQxYY|KqAn{uc|%x*9wVe6H7qL!lVV=vIlIdR^<3*y9#sP) zM_CizVsK%O-aYiL>~)U1N*XCs!%UA)O<1Yy&UD&5q2Zn~#%c&>dCbbHKHh7aqgL9{ z6=jhukOrZ4`c+`-WbI_vEri`F<^e}qadUBvXM17*ER)&bZ9NPmX>4A;lxmH>el@r_ z-pSRHhT9^{ojTsp@wASg@;c=ms}jx|zg)8I_vX&+!}pm`57;UVcuRT`CYP*3UWJM% z&Awd9d?uYi;%Xmv?vVyhMiw+^sOgHcWYtX+irG`?xV0xC_fAc0^2CD@R|5}Wvw@A+ zq~pAScX2^OMBNZ~ib3J>6d6A=@N@jazcZ$;kk zaFOje20p-L9aju|h~FEyii-xW$!881nGOc#@sWY+_=ACual^nTxM|>z za-bFK*hMNbjCo_=Px!NezX<1F#h5jUQ$0!Ib}BxVPP5`7-TCQWGjl{eUba-EqQrL% zEtRmbxYaR*Nj~aDNRg^a&jX&*p4>8zB6R3S|H04Qs~ZRwmQZ*48H1ePuUAp>#XFR+m7=W>!eA zXew)s%Wbbuo5?9_U`#IUsF&M4L8q4&*osBUQ#CbhA0vX>%OF_hrt&JthauBC>c#hwwl@B5c|U*g1**{~-4q(ub5(^6 zT=P1~uOH-^cLDbd(sfP z-aC@)CA`63!D~ocDH5*3H@sovrm!#U z4+p~fHTdTdsK&v9Ss@As)vrL05_Y?gqZxyY!hS+}KzXv1dX`}|_9Ck6-{$)CB}xdQ z>fczV{fmE42;y<{@~EKyCPj+j?KCOuo5zAG+=Ooqbz05GSU6nW;GaW%Y}nVR2LFcG zaA0F>Sl<-8ibc0z`V6f!l_fhIq3EL}^3#rfhE2lUjseaDk9K;|sW5F-C)lVC z7A4nE^Em${n72}O8>Q-&=s5Z*nL|2`=}2lCKe_)C+|!W)X?9T_OyXHL41Q|TDQkpb z=qDtbih{t^@(y2d3|49ZZ-Of9{dtuAA|vb*ko}iB0)6xev7@yxujRF{hGP@QwH#|nIfCGS0p-rzD*ylh From 7de55d6729347c9958db08d9b9c2e069cb48d691 Mon Sep 17 00:00:00 2001 From: luanjia Date: Thu, 27 Dec 2018 23:57:58 +0800 Subject: [PATCH 03/30] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=8F=90?= =?UTF-8?q?=E4=BA=A41.2.0-SNAPSHOT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++++++ .travis.yml | 15 +++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..331306b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +## for IDEA +.idea +*.iml + +## for maven +pom.xml.versionsBackup diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..e3b9aa8e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +language: generic + +jdk: + - openjdk6 + - oraclejdk6 + +cache: + directories: + - "$HOME/.m2/repository" + +script: + - mvn clean cobertura:cobertura -Dmaven.test.skip=false + +after_success: + - bash <(curl -s https://codecov.io/bash) \ No newline at end of file From ad325a643139085049ef5db71c21aeda47e6e850 Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Fri, 28 Dec 2018 23:41:56 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sandbox/core/util/SandboxStringUtils.java | 14 +- .../qatest/core/enhance/AdviceTestCase.java | 274 -------------- ...alculatorTestCaseImplByAdviceListener.java | 164 +++++++++ ...CalculatorTestCaseImplByEventListener.java | 212 +++++++++++ .../core/enhance/CoreEnhanceBaseTestCase.java | 120 ------ .../core/enhance/EventStackTestCase.java | 138 ------- .../core/enhance/EventStreamTestCase.java | 343 ------------------ .../qatest/core/enhance/EventTestCase.java | 197 ---------- .../core/enhance/ICalculatorTestCase.java | 240 ++++++++++++ .../core/enhance/NamespaceTestCase.java | 54 --- .../enhance/ProcessControllerTestCase.java | 99 ----- .../listener/EventStreamCheckerListener.java | 87 ----- .../listener/TracingAdviceListener.java | 237 ++++++++++++ .../core/enhance/target/Calculator.java | 119 +++++- .../sandbox/qatest/core/issues/Issues125.java | 42 +++ .../CalculatorHelper.java} | 62 +++- .../sandbox/qatest/core/util/JvmHelper.java | 23 +- 17 files changed, 1092 insertions(+), 1333 deletions(-) delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/issues/Issues125.java rename sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/{enhance/CalculatorTestCase.java => util/CalculatorHelper.java} (53%) diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.java index 5eb06502..a28a27eb 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.java @@ -2,6 +2,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.objectweb.asm.Type; import java.io.IOException; import java.io.InputStream; @@ -35,7 +36,7 @@ public static String toJavaClassName(String internalClassName) { public static String[] toJavaClassNameArray(String[] internalClassNameArray) { if (null == internalClassNameArray) { - return null; + return new String[]{}; } final String[] javaClassNameArray = new String[internalClassNameArray.length]; for (int index = 0; index < internalClassNameArray.length; index++) { @@ -44,6 +45,17 @@ public static String[] toJavaClassNameArray(String[] internalClassNameArray) { return javaClassNameArray; } + public static String[] toJavaClassNameArray(Type[] asmTypeArray) { + if (null == asmTypeArray) { + return new String[]{}; + } + final String[] javaClassNameArray = new String[asmTypeArray.length]; + for (int index = 0; index < asmTypeArray.length; index++) { + javaClassNameArray[index] = asmTypeArray[index].getClassName(); + } + return javaClassNameArray; + } + /** * 获取异常的原因描述 * diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java deleted file mode 100644 index f680a5ac..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java +++ /dev/null @@ -1,274 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.ProcessController; -import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.event.ReturnEvent; -import com.alibaba.jvm.sandbox.api.listener.EventListener; -import com.alibaba.jvm.sandbox.api.listener.ext.Advice; -import com.alibaba.jvm.sandbox.api.listener.ext.AdviceAdapterListener; -import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; -import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; -import com.alibaba.jvm.sandbox.core.util.ObjectIDs; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.InterruptedAdviceAdapterListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; -import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper.Transformer; -import org.junit.Test; - -import java.util.concurrent.atomic.AtomicBoolean; - -import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; -import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; -import static org.junit.Assert.*; - -public class AdviceTestCase extends CalculatorTestCase { - - @Test - public void test$$advice$$aroundWithError() throws Throwable { - final StringBuilder traceSB = new StringBuilder(); - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - new AdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - traceSB.append("before;"); - throw new RuntimeException("TEST"); - } - - @Override - protected void afterReturning(Advice advice) throws Throwable { - traceSB.append("return;"); - throw new RuntimeException("TEST"); - } - }), - BEFORE, RETURN, THROWS - ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - assertEquals("before;return;", traceSB.toString()); - } - - @Test - public void test$$advice$$around() throws Throwable { - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - new InterruptedAdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); - assertTrue(advice.isProcessTop()); - assertFalse(advice.isReturn()); - assertFalse(advice.isThrows()); - } - - @Override - protected void afterReturning(Advice advice) throws Throwable { - assertEquals(30, advice.getReturnObj()); - assertTrue(advice.isProcessTop()); - assertTrue(advice.isReturn()); - assertFalse(advice.isThrows()); - } - }), - BEFORE, RETURN, THROWS - ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - } - - - @Test - public void test$$advice$$changeParameters() throws Throwable { - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - new InterruptedAdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); - advice.changeParameter(0, new int[]{40, 60}); - } - - @Override - protected void afterReturning(Advice advice) throws Throwable { - assertEquals(40, ((int[]) advice.getParameterArray()[0])[0]); - assertEquals(60, ((int[]) advice.getParameterArray()[0])[1]); - assertEquals(100, advice.getReturnObj()); - ; - } - }), - BEFORE, RETURN, THROWS - ); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - } - - @Test - public void test$$advice$$changeReturnOnBefore() throws Throwable { - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - new InterruptedAdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - assertTrue(advice.isProcessTop()); - assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); - ProcessController.returnImmediately(100); - } - - }), - BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS - ); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - } - - @Test - public void test$$advice$$changeReturnOnReturn() throws Throwable { - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - new InterruptedAdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - assertTrue(advice.isProcessTop()); - } - - @Override - protected void afterReturning(Advice advice) throws Throwable { - assertTrue(advice.isProcessTop()); - assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); - ProcessController.returnImmediately(100); - } - - }), - BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS - ); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - } - - @Test - public void test$$advice$$changeReturnOnThrows() throws Throwable { - final Class computerClass = watching( - Calculator.class, - CALCULATOR_ERROR_SUM_FILTER, - new InterruptedAdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - assertTrue(advice.isProcessTop()); - } - - @Override - protected void afterThrowing(Advice advice) throws Throwable { - assertTrue(advice.isProcessTop()); - assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]); - assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]); - ProcessController.returnImmediately(100); - } - - }), - BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS - ); - assertEquals(100, calculatorErrorSum(computerClass.newInstance(), 10, 20)); - assertEquals(100, calculatorErrorSum(computerClass.newInstance(), 10, 20)); - } - - @Test - public void test$$advice$$sum_add$$changeThrowsOnReturn() throws Throwable { - final AtomicBoolean isThrowingAtSum = new AtomicBoolean(false); - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - new InterruptedAdviceAdapterListener(new AdviceListener() { - - @Override - protected void before(Advice advice) throws Throwable { - if (advice.getBehavior().getName().equals("sum")) { - assertTrue(advice.isProcessTop()); - } else { - assertFalse(advice.isProcessTop()); - ProcessController.throwsImmediately(new IllegalStateException("TEST")); - } - } - - @Override - protected void afterThrowing(Advice advice) throws Throwable { - isThrowingAtSum.set(true); - assertEquals("sum", advice.getBehavior().getName()); - ProcessController.returnImmediately(100); - } - }), - BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - assertEquals(100, calculatorSum(calculatorClass.newInstance(), 10, 20)); - - } - - @Test - public void test$$immediately$$throw_return_return() throws Throwable { - - final EventListener listener1; - final EventListener listener2; - final EventListener listener3; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - new Transformer( - CALCULATOR_SUM_FILTER, - listener1 = new EventListener() { - @Override - public void onEvent(Event event) throws Throwable { - ProcessController.throwsImmediately(new RuntimeException()); - } - }, - BEFORE - ), - new Transformer( - CALCULATOR_SUM_FILTER, - listener2 = new EventListener() { - @Override - public void onEvent(Event event) throws Throwable { - ProcessController.returnImmediately(100); - } - }, - THROWS - ), - new Transformer( - CALCULATOR_SUM_FILTER, - listener3 = new EventListener() { - @Override - public void onEvent(Event event) throws Throwable { - final ReturnEvent returnEvent = (ReturnEvent) event; - ProcessController.returnImmediately(10 + (Integer) returnEvent.object); - } - }, - RETURN - ) - ) - .loadClass(getJavaClassName(Calculator.class)); - - assertEquals(110, calculatorSum(calculatorClass.newInstance(), 10, 20)); - EventListenerHandlers.getSingleton().checkEventProcessor( - ObjectIDs.instance.identity(listener1), - ObjectIDs.instance.identity(listener2), - ObjectIDs.instance.identity(listener3) - ); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java new file mode 100644 index 00000000..4312e805 --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java @@ -0,0 +1,164 @@ +package com.alibaba.jvm.sandbox.qatest.core.enhance; + +import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingAdviceListener.generateTracing; + +/** + * AdviceListener相关测试用例 + */ +public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCase { + + @Override + public void cal$sum$around() throws Throwable { + + } + + @Override + public void cal$sum$line() throws Throwable { + + } + + @Override + public void cal$sum$call() throws Throwable { + + } + + @Override + public void cal$sum$before$changeParameters() throws Throwable { + + } + + @Override + public void cal$sum$before$returnImmediately() throws Throwable { + + } + + @Override + public void cal$sum$before$throwsImmediately() throws Throwable { + + } + + @Override + public void cal$sum$return$changeParameters() throws Throwable { + + } + + @Override + public void cal$sum$return$returnImmediately() throws Throwable { + + } + + @Override + public void cal$sum$return$throwsImmediately() throws Throwable { + + } + + @Override + public void cal$sum$throws$changeParameters() throws Throwable { + + } + + @Override + public void cal$sum$throws$returnImmediately() throws Throwable { + + } + + @Override + public void cal$sum$throws$throwsImmediately() throws Throwable { + + } + + @Override + public void cal$sum_add$around() throws Throwable { + + } + + @Override + public void cal$sum_add$line() throws Throwable { + + } + + @Override + public void cal$sum_add$call() throws Throwable { + + } + + @Override + public void cal$sum_add$before$changeParameters_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$before$returnImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$before$throwsImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$return$changeParameters_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$return$returnImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$return$throwsImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$throws$changeParameters_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$throws$returnImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$throws$throwsImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$pow$around() throws Throwable { + + } + + @Override + public void cal$pow$line() throws Throwable { + + } + + @Override + public void cal$pow$call() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$around() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$line() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$call() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$before$changeParameters() throws Throwable { + + } +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java new file mode 100644 index 00000000..802dbf60 --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java @@ -0,0 +1,212 @@ +package com.alibaba.jvm.sandbox.qatest.core.enhance; + +import com.alibaba.jvm.sandbox.api.ProcessController; +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; +import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; +import com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; +import org.junit.Assert; +import org.junit.Test; + +import static com.alibaba.jvm.sandbox.api.ProcessController.returnImmediately; +import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper.*; +import static org.junit.Assert.assertEquals; + +public class CalculatorTestCaseImplByEventListener implements ICalculatorTestCase { + + @Test + @Override + public void cal$sum$around() throws Throwable { + + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE, + RETURN + ); + + } + + @Override + public void cal$sum$line() throws Throwable { + + } + + @Override + public void cal$sum$call() throws Throwable { + + } + + @Override + public void cal$sum$before$changeParameters() throws Throwable { + + } + + @Override + public void cal$sum$before$returnImmediately() throws Throwable { + + } + + @Override + public void cal$sum$before$throwsImmediately() throws Throwable { + + } + + @Override + public void cal$sum$return$changeParameters() throws Throwable { + + } + + @Test + @Override + public void cal$sum$return$returnImmediately() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + returnImmediately(100); + } + }, + RETURN + ) + .loadClass(CALCULATOR_CLASS_NAME); + + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + RETURN + ); + } + + @Override + public void cal$sum$return$throwsImmediately() throws Throwable { + + } + + @Override + public void cal$sum$throws$changeParameters() throws Throwable { + + } + + @Override + public void cal$sum$throws$returnImmediately() throws Throwable { + + } + + @Override + public void cal$sum$throws$throwsImmediately() throws Throwable { + + } + + @Override + public void cal$sum_add$around() throws Throwable { + + } + + @Override + public void cal$sum_add$line() throws Throwable { + + } + + @Override + public void cal$sum_add$call() throws Throwable { + + } + + @Override + public void cal$sum_add$before$changeParameters_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$before$returnImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$before$throwsImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$return$changeParameters_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$return$returnImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$return$throwsImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$throws$changeParameters_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$throws$returnImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$sum_add$throws$throwsImmediately_at_add() throws Throwable { + + } + + @Override + public void cal$pow$around() throws Throwable { + + } + + @Override + public void cal$pow$line() throws Throwable { + + } + + @Override + public void cal$pow$call() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$around() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$line() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$call() throws Throwable { + + } + + @Override + public void cal$init_with_TestCase$before$changeParameters() throws Throwable { + + } +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.java deleted file mode 100644 index 94f6870f..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.filter.ExtFilter; -import com.alibaba.jvm.sandbox.api.filter.Filter; -import com.alibaba.jvm.sandbox.api.listener.EventListener; -import com.alibaba.jvm.sandbox.core.CoreConfigure; -import com.alibaba.jvm.sandbox.core.enhance.EventEnhancer; -import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; -import com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils; -import com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher; -import com.alibaba.jvm.sandbox.core.util.matcher.structure.ClassStructureImplByJDK; -import org.apache.commons.lang3.StringUtils; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; - -import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toByteArray; -import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toResourceName; - -public class CoreEnhanceBaseTestCase { - - private static final AtomicInteger LISTENER_ID_SEQ = new AtomicInteger(1000); - - private class TestClassLoader extends ClassLoader { - - private final Map javaClassByteArrayMap - = new HashMap(); - - @Override - protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - final Class loadedClass = findLoadedClass(name); - if (loadedClass == null) { - try { - final Class aClass = findClass(name); - if (resolve) { - resolveClass(aClass); - } - return aClass; - } catch (Exception e) { - return super.loadClass(name, resolve); - } - } else { - return loadedClass; - } - } - - public Class defineClass(final String javaClassName, - final byte[] classByteArray) throws InvocationTargetException, IllegalAccessException { - javaClassByteArrayMap.put(toResourceName(javaClassName), classByteArray); - return SandboxReflectUtils.defineClass(this, javaClassName, classByteArray); - } - - @Override - public InputStream getResourceAsStream(String name) { - if(javaClassByteArrayMap.containsKey(name)) { - return new ByteArrayInputStream(javaClassByteArrayMap.get(name)); - } - return super.getResourceAsStream(name); - } - - } - - /** - * 构造TestClassLoader,用于完成隔离测试 - * - * @return TestClassLoader - */ - protected TestClassLoader newTestClassLoader() { - return new TestClassLoader(); - } - - protected Class watchingWithNamespace(final String namespace, - final Class targetClass, - final Filter filter, - final EventListener listener, - final Event.Type... eventType) throws IOException, InvocationTargetException, IllegalAccessException { - final int listenerId = LISTENER_ID_SEQ.getAndIncrement(); - final TestClassLoader loader = newTestClassLoader(); - final CoreConfigure coreCfg = CoreConfigure.toConfigure( - StringUtils.isBlank(namespace) - ? "" - : String.format(";namespace=%s;", namespace), - "" - ); - EventListenerHandlers.getSingleton().active(listenerId, listener, eventType); - return loader.defineClass( - targetClass.getName(), - new EventEnhancer().toByteCodeArray( - loader, - toByteArray(targetClass), - new ExtFilterMatcher(ExtFilter.ExtFilterFactory.make(filter)) - .matching(new ClassStructureImplByJDK(targetClass)) - .getBehaviorSignCodes(), - coreCfg.getNamespace(), - listenerId, - eventType - )//new - );//return - } - - protected Class watching(final Class targetClass, - final Filter filter, - final EventListener listener, - final Event.Type... eventType) throws IOException, InvocationTargetException, IllegalAccessException { - return watchingWithNamespace( - null, - targetClass, - filter, - listener, - eventType - ); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.java deleted file mode 100644 index 7f8deee8..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.ProcessController; -import com.alibaba.jvm.sandbox.api.event.BeforeEvent; -import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.event.InvokeEvent; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.InterruptedEventListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import org.junit.Test; - -import java.util.Stack; - -import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class EventStackTestCase extends CalculatorTestCase { - - @Test - public void test$$stack$$around() throws Throwable { - final Stack processStack = new Stack(); - final Stack invokeStack = new Stack(); - - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - new InterruptedEventListener() { - @Override - public void onEvent(Event event) throws Throwable { - switch (event.type) { - case BEFORE: - final BeforeEvent beforeEvent = (BeforeEvent) event; - processStack.push(beforeEvent.processId); - invokeStack.push(beforeEvent.invokeId); - break; - default: - InvokeEvent invokeEvent = (InvokeEvent) event; - assertEquals(processStack.pop().intValue(), invokeEvent.processId); - assertEquals(invokeStack.pop().intValue(), invokeEvent.invokeId); - } - - } - - }, - BEFORE, RETURN, THROWS - ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - assertTrue(processStack.isEmpty()); - assertTrue(invokeStack.isEmpty()); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - assertTrue(processStack.isEmpty()); - assertTrue(invokeStack.isEmpty()); - } - - @Test - public void test$$stack$$returnImmediatelyOnBefore() throws Throwable { - final Stack processStack = new Stack(); - final Stack invokeStack = new Stack(); - - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - new InterruptedEventListener() { - @Override - public void onEvent(Event event) throws Throwable { - switch (event.type) { - case BEFORE: - final BeforeEvent beforeEvent = (BeforeEvent) event; - processStack.push(beforeEvent.processId); - invokeStack.push(beforeEvent.invokeId); - if (beforeEvent.javaMethodName.equals("add")) { - ProcessController.returnImmediately(30); - } - break; - default: - InvokeEvent invokeEvent = (InvokeEvent) event; - assertEquals(processStack.pop().intValue(), invokeEvent.processId); - assertEquals(invokeStack.pop().intValue(), invokeEvent.invokeId); - } - - } - - }, - BEFORE, RETURN, THROWS, IMMEDIATELY_THROWS, IMMEDIATELY_RETURN - ); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - assertTrue(processStack.isEmpty()); - assertTrue(invokeStack.isEmpty()); - assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20)); - assertTrue(processStack.isEmpty()); - assertTrue(invokeStack.isEmpty()); - } - - @Test - public void test$$stack$$returnImmediatelyOnReturn() throws Throwable { - final Stack processStack = new Stack(); - final Stack invokeStack = new Stack(); - - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - new InterruptedEventListener() { - boolean isIReturn = false; - - @Override - public void onEvent(Event event) throws Throwable { - switch (event.type) { - case BEFORE: - final BeforeEvent beforeEvent = (BeforeEvent) event; - processStack.push(beforeEvent.processId); - invokeStack.push(beforeEvent.invokeId); - if (beforeEvent.javaMethodName.equals("add")) { - isIReturn = true; - } - break; - default: - InvokeEvent invokeEvent = (InvokeEvent) event; - assertEquals(processStack.pop().intValue(), invokeEvent.processId); - assertEquals(invokeStack.pop().intValue(), invokeEvent.invokeId); - if (isIReturn) { - ProcessController.returnImmediately(100); - } - } - - } - - }, - BEFORE, RETURN, THROWS - ); - assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); - assertTrue(processStack.isEmpty()); - assertTrue(invokeStack.isEmpty()); -// assertEquals(100, calculatorSum(computerClass.newInstance(), 10, 20)); -// assertTrue(processStack.isEmpty()); -// assertTrue(invokeStack.isEmpty()); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java deleted file mode 100644 index 94084077..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java +++ /dev/null @@ -1,343 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.event.BeforeEvent; -import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.event.ReturnEvent; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; -import org.junit.Test; - -import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately; -import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; -import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; -import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventTypeChecker.*; -import static org.junit.Assert.assertEquals; - -/** - * 测试方法调用事件流是否正确 - */ -public class EventStreamTestCase extends CalculatorTestCase { - - - @Test - public void sum$return() throws Throwable { - - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new TracingEventListener(), - BEFORE, RETURN, THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10)); - listener.assertEventTracing( - BEFORE, - RETURN - ); - - } - - @Test - public void sum_add$return() throws Throwable { - - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - listener = new TracingEventListener(), - BEFORE, RETURN, THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10)); - listener.assertEventTracing( - BEFORE, - BEFORE, - RETURN, - BEFORE, - RETURN, - RETURN - ); - - } - - @Test(expected = RuntimeException.class) - public void sum_add$throwsImmediately_at_add_before() throws Throwable { - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - listener = new TracingEventListener() { - @Override - public void onEvent(Event event) throws Throwable { - super.onEvent(event); - if (event.type == BEFORE) { - final BeforeEvent beforeEvent = (BeforeEvent) event; - if (beforeEvent.javaMethodName.equals("add")) { - throwsImmediately(new RuntimeException("TEST")); - } - } - } - }, - BEFORE, RETURN, THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - try { - calculatorSum(calculatorClass.newInstance(), 10, 10); - } finally { - listener.assertEventTracing( - BEFORE, - BEFORE, - THROWS - ); - } - } - - @Test(expected = RuntimeException.class) - public void sum_add$throwsImmediately_at_add_before$with_immediately() throws Throwable { - - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - listener = new TracingEventListener() { - @Override - public void onEvent(Event event) throws Throwable { - super.onEvent(event); - if (event.type == BEFORE) { - final BeforeEvent beforeEvent = (BeforeEvent) event; - if (beforeEvent.javaMethodName.equals("add")) { - throwsImmediately(new RuntimeException("TEST")); - } - } - } - }, - BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - try { - calculatorSum(calculatorClass.newInstance(), 10, 10); - } finally { - listener.assertEventTracing( - BEFORE, - BEFORE, - IMMEDIATELY_THROWS, - THROWS - ); - } - } - - - @Test(expected = RuntimeException.class) - public void sum_add$throwsImmediately_at_add_return() throws Throwable { - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - listener = new TracingEventListener() { - - int firstAddInvokeId = -1; - - @Override - public void onEvent(Event event) throws Throwable { - super.onEvent(event); - switch (event.type) { - case BEFORE: { - final BeforeEvent beforeEvent = (BeforeEvent) event; - if (beforeEvent.javaMethodName.equals("add")) { - firstAddInvokeId = beforeEvent.invokeId; - } - break; - } - case RETURN: { - final ReturnEvent returnEvent = (ReturnEvent) event; - if (returnEvent.invokeId == firstAddInvokeId) { - throwsImmediately(new RuntimeException("TEST")); - } - break; - } - } - } - }, - BEFORE, RETURN, THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - try { - calculatorSum(calculatorClass.newInstance(), 10, 10); - } finally { - listener.assertEventTracing( - BEFORE, - BEFORE, - RETURN, - THROWS - ); - } - } - - @Test(expected = RuntimeException.class) - public void sum_add$throwsImmediately_at_add_return$with_immediately() throws Throwable { - - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_SUM_and_ADD_FILTER, - listener = new TracingEventListener() { - - int firstAddInvokeId = -1; - - @Override - public void onEvent(Event event) throws Throwable { - super.onEvent(event); - switch (event.type) { - case BEFORE: { - final BeforeEvent beforeEvent = (BeforeEvent) event; - if (beforeEvent.javaMethodName.equals("add")) { - firstAddInvokeId = beforeEvent.invokeId; - } - break; - } - case RETURN: { - final ReturnEvent returnEvent = (ReturnEvent) event; - if (returnEvent.invokeId == firstAddInvokeId) { - throwsImmediately(new RuntimeException("TEST")); - } - break; - } - } - } - - }, - BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - try { - calculatorSum(calculatorClass.newInstance(), 10, 10); - } finally { - listener.assertEventTracing( - BEFORE, - BEFORE, - RETURN, - IMMEDIATELY_THROWS, - THROWS - ); - } - } - - - @Test(expected = Exception.class) - public void sum$throws() throws Throwable { - - final TracingEventListener listener; - final Class calculatorClass = JvmHelper - .createJvm() - .defineClass( - Calculator.class, - CALCULATOR_ERROR_SUM_FILTER, - listener = new TracingEventListener(), - BEFORE, RETURN, THROWS - ) - .loadClass(getJavaClassName(Calculator.class)); - - try { - calculatorErrorSum(calculatorClass.newInstance(), 10, 10); - } finally { - listener.assertEventTracing( - BEFORE, - THROWS - ); - } - - } - - - @Test - public void test$$event_stream$$call() throws Throwable { - final EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(BEFORE_CHECKER) - .nextEventCheck(CALL_BEFORE_CHECKER) - .nextEventCheck(CALL_RETURN_CHECKER) - .nextEventCheck(CALL_BEFORE_CHECKER) - .nextEventCheck(CALL_RETURN_CHECKER) - .nextEventCheck(RETURN_CHECKER), - BEFORE, RETURN, THROWS, CALL_BEFORE, CALL_RETURN, CALL_THROWS - ); - - assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - } - - @Test - public void test$$event_stream$$line() throws Throwable { - final EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(BEFORE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(RETURN_CHECKER), - BEFORE, RETURN, THROWS, LINE - ); - - assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - } - - @Test - public void test$$event_stream$$all() throws Throwable { - final EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(BEFORE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(CALL_BEFORE_CHECKER) - .nextEventCheck(CALL_RETURN_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(CALL_BEFORE_CHECKER) - .nextEventCheck(CALL_RETURN_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(LINE_CHECKER) - .nextEventCheck(RETURN_CHECKER), - Event.Type.values() - ); - - assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java deleted file mode 100644 index feeb38a0..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.event.*; -import com.alibaba.jvm.sandbox.api.listener.EventListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventChecker; -import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; -import org.junit.Test; - -import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; -import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; -import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventTypeChecker.CALL_RETURN_CHECKER; -import static org.junit.Assert.*; - -/** - * 测试事件内容是否正确 - */ -public class EventTestCase extends CalculatorTestCase { - - @Test - public void test$$event$$before() throws Throwable { - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(BeforeEvent event) { - assertEquals(BEFORE, event.type); - assertEquals(1, event.argumentArray.length); - assertNotNull(event.javaClassLoader); - assertEquals(Calculator.class.getName(), event.javaClassName); - assertEquals("sum", event.javaMethodName); - assertNull(event.target); - assertEquals(int[].class, event.argumentArray[0].getClass()); - assertEquals(10, ((int[]) event.argumentArray[0])[0]); - assertEquals(20, ((int[]) event.argumentArray[0])[1]); - } - }), - BEFORE - ); - assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); - listener.assertIsEmpty(); - } - - @Test - public void test$$event$$return() throws Throwable { - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(ReturnEvent event) { - assertEquals(RETURN, event.type); - assertEquals(30, event.object); - } - }), - RETURN - ); - assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); - listener.assertIsEmpty(); - } - - - @Test(expected = RuntimeException.class) - public void test$$event$$throws() throws Throwable { - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_ERROR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(ThrowsEvent event) { - assertEquals(THROWS, event.type); - assertEquals(RuntimeException.class, event.throwable.getClass()); - assertEquals("THIS IS A TEST!", event.throwable.getMessage()); - } - }), - THROWS - ); - assertCalculatorErrorSum(listener, calculatorClass); - } - - private void assertCalculatorErrorSum(EventStreamCheckerListener listener, Class calculatorClass) throws Throwable { - try { - calculatorErrorSum(calculatorClass.newInstance(), 10, 20); - assertFalse("must throw exception", true); - } catch (RuntimeException cause) { - assertEquals("THIS IS A TEST!", cause.getMessage()); - listener.assertIsEmpty(); - throw cause; - } - } - - @Test - public void test$$event$$call_before() throws Throwable { - - final EventChecker callBeforeEventEventChecker = new EventChecker() { - @Override - public void onCheck(CallBeforeEvent event) { - assertEquals(CALL_BEFORE, event.type); - assertEquals(Calculator.class.getName(), event.owner); - assertEquals("add", event.name); - assertEquals("(II)I", event.desc); - assertEquals(8, event.lineNumber); - } - }; - - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(callBeforeEventEventChecker) - .nextEventCheck(callBeforeEventEventChecker), - CALL_BEFORE - ); - assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); - listener.assertIsEmpty(); - } - - @Test - public void test$$event$$call_return() throws Throwable { - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(CALL_RETURN_CHECKER) - .nextEventCheck(CALL_RETURN_CHECKER), - CALL_RETURN - ); - assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); - listener.assertIsEmpty(); - } - - @Test(expected = RuntimeException.class) - public void test$$event$$call_throws() throws Throwable { - final EventChecker callThrowsEventEventChecker = new EventChecker() { - @Override - public void onCheck(CallThrowsEvent event) { - assertEquals(CALL_THROWS, event.type); - assertEquals(RuntimeException.class.getName(), event.throwException); - } - }; - - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_ERROR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(callThrowsEventEventChecker), - CALL_THROWS - ); - assertCalculatorErrorSum(listener, calculatorClass); - } - - - private class LineEventChecker implements EventChecker { - - private final int lineNumber; - - private LineEventChecker(int lineNumber) { - this.lineNumber = lineNumber; - } - - @Override - public void onCheck(LineEvent event) { - assertEquals(LINE, event.type); - assertEquals(lineNumber, event.lineNumber); - } - } - - @Test - public void test$$event$$line() throws Throwable { - EventStreamCheckerListener listener; - final Class calculatorClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener() - .nextEventCheck(new LineEventChecker(6)) - .nextEventCheck(new LineEventChecker(7)) - .nextEventCheck(new LineEventChecker(8)) - .nextEventCheck(new LineEventChecker(7)) - .nextEventCheck(new LineEventChecker(8)) - .nextEventCheck(new LineEventChecker(7)) - .nextEventCheck(new LineEventChecker(10)) - , - LINE - ); - assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20)); - listener.assertIsEmpty(); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java new file mode 100644 index 00000000..1ab2463a --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java @@ -0,0 +1,240 @@ +package com.alibaba.jvm.sandbox.qatest.core.enhance; + +/** + * Calculator类测试用例接口 + *

    + * 用例命名规范:{@code <类名>$<方法名>[_方法名]$<执行时机>$<执行动作>[_执行动作]} + *

    + * 例子:{@code cal$sum$before$changeParameters} : cal.sum()方法执行之前修改参数 + */ +public interface ICalculatorTestCase { + + // ------ sum() ------- + + /** + * cal.sum():环绕 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$around() throws Throwable; + + /** + * cal.sum():行跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$line() throws Throwable; + + /** + * cal.sum():方法调用跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$call() throws Throwable; + + /** + * cal.sum():方法执行之前修改参数 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$before$changeParameters() throws Throwable; + + /** + * cal.sum():方法执行之前立即返回 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$before$returnImmediately() throws Throwable; + + /** + * cal.sum():方法执行之前立即抛出异常 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$before$throwsImmediately() throws Throwable; + + /** + * cal.sum():返回之前修改参数 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$return$changeParameters() throws Throwable; + + /** + * cal.sum():返回之前修改返回值 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$return$returnImmediately() throws Throwable; + + /** + * cal.sum():返回之前抛出异常 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$return$throwsImmediately() throws Throwable; + + /** + * cal.sum():抛出异常之前修改入参 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$throws$changeParameters() throws Throwable; + + /** + * cal.sum():抛出异常之前立即返回 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$throws$returnImmediately() throws Throwable; + + /** + * cal.sum():抛出异常之前立即抛出异常 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum$throws$throwsImmediately() throws Throwable; + + + // ------- sum()_add() -------- + + /** + * cal.sum()_add():环绕 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$around() throws Throwable; + + /** + * cal.sum()_add():行跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$line() throws Throwable; + + /** + * cal.sum()_add():方法调用跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$call() throws Throwable; + + /** + * cal.sum()_add():方法执行之前修改参数 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$before$changeParameters_at_add() throws Throwable; + + /** + * cal.sum()_add():方法执行之前立即返回 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$before$returnImmediately_at_add() throws Throwable; + + /** + * sum()_add():方法执行之前立即抛出异常 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$before$throwsImmediately_at_add() throws Throwable; + + /** + * cal.sum()_add():返回之前修改参数 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$return$changeParameters_at_add() throws Throwable; + + /** + * cal.sum()_add():返回之前修改返回值 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$return$returnImmediately_at_add() throws Throwable; + + /** + * cal.sum()_add():返回之前抛出异常 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$return$throwsImmediately_at_add() throws Throwable; + + /** + * cal.sum()_add():抛出异常之前修改入参 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$throws$changeParameters_at_add() throws Throwable; + + /** + * cal.sum()_add():抛出异常之前立即返回 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$throws$returnImmediately_at_add() throws Throwable; + + /** + * cal.sum()_add():抛出异常之前立即抛出异常 + * + * @throws Throwable 用例抛出异常 + */ + void cal$sum_add$throws$throwsImmediately_at_add() throws Throwable; + + + // ------- pow() ------- + + /** + * cal.pow():环绕 + * + * @throws Throwable 用例抛出异常 + */ + void cal$pow$around() throws Throwable; + + /** + * cal.pow():行跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$pow$line() throws Throwable; + + /** + * cal.pow():方法调用跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$pow$call() throws Throwable; + + + // ------- () -------- + + /** + * {@code (TestCase)}:环绕 + * + * @throws Throwable 用例抛出异常 + */ + void cal$init_with_TestCase$around() throws Throwable; + + /** + * {@code (TestCase)}:行跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$init_with_TestCase$line() throws Throwable; + + /** + * {@code (TestCase)}:调用跟踪 + * + * @throws Throwable 用例抛出异常 + */ + void cal$init_with_TestCase$call() throws Throwable; + + /** + * {@code (TestCase)}:改变入参 + * + * @throws Throwable 用例抛出异常 + */ + void cal$init_with_TestCase$before$changeParameters() throws Throwable; + +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.java deleted file mode 100644 index 0ce5406b..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.ProcessController; -import com.alibaba.jvm.sandbox.api.event.ReturnEvent; -import com.alibaba.jvm.sandbox.api.event.ThrowsEvent; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import org.junit.Test; - -import static com.alibaba.jvm.sandbox.api.event.Event.Type.RETURN; -import static com.alibaba.jvm.sandbox.api.event.Event.Type.THROWS; -import static junit.framework.Assert.assertEquals; - -/** - * 测试Namespace - */ -public class NamespaceTestCase extends CalculatorTestCase { - - @Test - public void test$$namespace$$changeReturnThenWatching() throws Throwable { - final EventStreamCheckerListener changeReturnListener; - final Class changeReturnCalculatorClass = watchingWithNamespace( - "ns-change", - Calculator.class, - CALCULATOR_ERROR_SUM_FILTER, - changeReturnListener = new EventStreamCheckerListener().nextEventCheck(new EventStreamCheckerListener.EventChecker() { - @Override - public void onCheck(ThrowsEvent event) throws Throwable { - ProcessController.returnImmediately(100); - } - }), - THROWS - ); - - final EventStreamCheckerListener watchingListener; - final Class watchingCalculatorClass = watchingWithNamespace( - "ns-watching", - changeReturnCalculatorClass, - CALCULATOR_ERROR_SUM_FILTER, - watchingListener = new EventStreamCheckerListener().nextEventCheck(new EventStreamCheckerListener.EventChecker() { - @Override - public void onCheck(ReturnEvent event) throws Throwable { - assertEquals(event.object, 100); - } - }), - RETURN - ); - - assertEquals(100, calculatorErrorSum(watchingCalculatorClass.newInstance(), 1, 1)); - changeReturnListener.assertIsEmpty(); - watchingListener.assertIsEmpty(); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.java deleted file mode 100644 index b5efc014..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; - -import com.alibaba.jvm.sandbox.api.ProcessController; -import com.alibaba.jvm.sandbox.api.event.BeforeEvent; -import com.alibaba.jvm.sandbox.api.event.ReturnEvent; -import com.alibaba.jvm.sandbox.api.event.ThrowsEvent; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener; -import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventChecker; -import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import org.junit.Test; - -import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; -import static junit.framework.Assert.assertEquals; - -/** - * 事件流程控制测试用例 - */ -public class ProcessControllerTestCase extends CalculatorTestCase { - - @Test - public void test$$process_controller$$changeParameters() throws Throwable { - EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(BeforeEvent event) { - event.changeParameter(0, new int[]{40, 60}); - } - }), - BEFORE - ); - - assertEquals(100, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - - } - - @Test - public void test$$process_controller$$changeReturnOnBefore() throws Throwable { - EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(BeforeEvent event) throws Throwable { - ProcessController.returnImmediately(100); - } - }), - BEFORE - ); - - assertEquals(100, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - } - - - @Test - public void test$$process_controller$$changeReturnOnReturn() throws Throwable { - EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(ReturnEvent event) throws Throwable { - assertEquals(event.object, 2); - ProcessController.returnImmediately(100); - } - }), - RETURN - ); - - assertEquals(100, calculatorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - } - - @Test - public void test$$process_controller$$changeReturnOnThrows() throws Throwable { - EventStreamCheckerListener listener; - final Class computerClass = watching( - Calculator.class, - CALCULATOR_ERROR_SUM_FILTER, - listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() { - @Override - public void onCheck(ThrowsEvent event) throws Throwable { - ProcessController.returnImmediately(100); - } - }), - THROWS - ); - - assertEquals(100, calculatorErrorSum(computerClass.newInstance(), 1, 1)); - listener.assertIsEmpty(); - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.java deleted file mode 100644 index de27d5c3..00000000 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance.listener; - -import com.alibaba.jvm.sandbox.api.event.*; -import com.alibaba.jvm.sandbox.api.listener.EventListener; -import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted; -import org.junit.Assert; - -import java.util.LinkedList; -import java.util.Queue; - -import static org.hamcrest.core.IsEqual.equalTo; - -/** - * 事件流校验器 - */ -@Interrupted -public class EventStreamCheckerListener implements EventListener { - - private final Queue checkers = new LinkedList(); - - /** - * 下一个事件校验 - * - * @param checker 事件校验器 - * @return this - */ - public EventStreamCheckerListener nextEventCheck(EventChecker checker) { - checkers.offer(checker); - return this; - } - - @Override - public void onEvent(Event event) throws Throwable { - checkers.poll().onCheck(event); - } - - /** - * 当事件流结束时,Check队列必须为空! - */ - public void assertIsEmpty() { - Assert.assertTrue("Event checker queue is not empty!", checkers.isEmpty()); - } - - - /** - * 事件校验器 - */ - public interface EventChecker { - - /** - * 校验事件是否正确 - * - * @param event 事件 - */ - void onCheck(E event) throws Throwable; - - } - - /** - * 事件类型校验器 - * - * @param 事件 - */ - public static final class EventTypeChecker implements EventChecker { - - private final Event.Type type; - - public EventTypeChecker(Event.Type type) { - this.type = type; - } - - @Override - public void onCheck(Event event) { - Assert.assertThat("Event.Type was not match!", type, equalTo(event.type)); - } - - public static final EventTypeChecker BEFORE_CHECKER = new EventTypeChecker(Event.Type.BEFORE); - public static final EventTypeChecker RETURN_CHECKER = new EventTypeChecker(Event.Type.RETURN); - public static final EventTypeChecker THROWS_CHECKER = new EventTypeChecker(Event.Type.THROWS); - public static final EventTypeChecker CALL_BEFORE_CHECKER = new EventTypeChecker(Event.Type.CALL_BEFORE); - public static final EventTypeChecker CALL_RETURN_CHECKER = new EventTypeChecker(Event.Type.CALL_RETURN); - public static final EventTypeChecker CALL_THROWS_CHECKER = new EventTypeChecker(Event.Type.CALL_THROWS); - public static final EventTypeChecker LINE_CHECKER = new EventTypeChecker(Event.Type.LINE); - - } - -} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java new file mode 100644 index 00000000..1890fb0c --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java @@ -0,0 +1,237 @@ +package com.alibaba.jvm.sandbox.qatest.core.enhance.listener; + +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.listener.ext.Advice; +import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; +import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; +import com.alibaba.jvm.sandbox.core.util.ObjectIDs; +import org.objectweb.asm.Type; + +import java.util.ArrayList; +import java.util.List; + +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassNameArray; +import static com.alibaba.jvm.sandbox.core.util.SandboxStringUtils.toJavaClassNameArray; +import static com.sun.tools.javac.util.StringUtils.toUpperCase; +import static org.apache.commons.lang3.ArrayUtils.getLength; +import static org.apache.commons.lang3.StringUtils.join; +import static org.junit.Assert.assertEquals; + +public class TracingAdviceListener extends AdviceListener { + + public static final boolean IS_TOP = true; + public static final boolean IS_NOT_TOP = false; + + private List tracing = new ArrayList(); + + public static String generateTracing(final String prefix, + final String javaClassName, + final String javaMethodName, + final String[] parameterTypes, + final boolean isTop) { + return String.format( + "%s|%s.%s(%s)|%s", + prefix, + javaClassName, + javaMethodName, + join(parameterTypes, ","), + toUpperCase(Boolean.toString(isTop)) + ); + } + + public static String generateTracing(final String prefix, + final String javaClassName, + final String javaMethodName, + final String[] parameterTypes, + final boolean isTop, + final int callLineNum, + final String callJavaClassName, + final String callJavaMethodName, + final String[] callParameterTypes) { + return String.format( + "%s|%s.%s(%s)|%s|%d|%s.%s(%s)", + prefix, + javaClassName, + javaMethodName, + join(parameterTypes, ","), + toUpperCase(Boolean.toString(isTop)), + callLineNum, + callJavaClassName, + callJavaMethodName, + callParameterTypes + ); + } + + public static String generateTracing(final String prefix, + final String javaClassName, + final String javaMethodName, + final String[] parameterTypes, + final boolean isTop, + final int callLineNum, + final String callJavaClassName, + final String callJavaMethodName, + final String[] callParameterTypes, + final String callThrowJavaClassName) { + return String.format( + "%s|%s.%s(%s)|%s|%d|%s.%s(%s)|%s", + prefix, + javaClassName, + javaMethodName, + join(parameterTypes, ","), + toUpperCase(Boolean.toString(isTop)), + callLineNum, + callJavaClassName, + callJavaMethodName, + callParameterTypes, + callThrowJavaClassName + ); + } + + public static String generateTracing(final String prefix, + final String javaClassName, + final String javaMethodName, + final String[] parameterTypes, + final boolean isTop, + final int lineNum) { + return String.format( + "%s|%s.%s(%s)|%s|%d|%s.%s(%s)|%s", + prefix, + javaClassName, + javaMethodName, + join(parameterTypes, ","), + toUpperCase(Boolean.toString(isTop)), + lineNum + ); + } + + @Override + protected void before(Advice advice) throws Throwable { + tracing.add(generateTracing( + "BEFORE", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop() + )); + super.before(advice); + } + + @Override + protected void afterReturning(Advice advice) throws Throwable { + tracing.add(generateTracing( + "RETURN", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop() + )); + super.afterReturning(advice); + } + + @Override + protected void afterThrowing(Advice advice) throws Throwable { + tracing.add(generateTracing( + "THROWING", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop() + )); + super.afterThrowing(advice); + } + + @Override + protected void beforeCall(Advice advice, int callLineNum, String callJavaClassName, String callJavaMethodName, String callJavaMethodDesc) { + tracing.add(generateTracing( + "CALL-BEFORE", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop(), + callLineNum, + callJavaClassName, + callJavaMethodName, + toJavaClassNameArray(Type.getMethodType(callJavaMethodDesc).getArgumentTypes()) + )); + super.beforeCall(advice, callLineNum, callJavaClassName, callJavaMethodName, callJavaMethodDesc); + } + + @Override + protected void afterCallReturning(Advice advice, int callLineNum, String callJavaClassName, String callJavaMethodName, String callJavaMethodDesc) { + tracing.add(generateTracing( + "CALL-RETURN", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop(), + callLineNum, + callJavaClassName, + callJavaMethodName, + toJavaClassNameArray(Type.getMethodType(callJavaMethodDesc).getArgumentTypes()) + )); + super.afterCallReturning(advice, callLineNum, callJavaClassName, callJavaMethodName, callJavaMethodDesc); + } + + @Override + protected void afterCallThrowing(Advice advice, int callLineNum, String callJavaClassName, String callJavaMethodName, String callJavaMethodDesc, String callThrowJavaClassName) { + tracing.add(generateTracing( + "CALL-THROWS", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop(), + callLineNum, + callJavaClassName, + callJavaMethodName, + toJavaClassNameArray(Type.getMethodType(callJavaMethodDesc).getArgumentTypes()), + callThrowJavaClassName + )); + super.afterCallThrowing(advice, callLineNum, callJavaClassName, callJavaMethodName, callJavaMethodDesc, callThrowJavaClassName); + } + + @Override + protected void beforeLine(Advice advice, int lineNum) { + tracing.add(generateTracing( + "CALL-THROWS", + getJavaClassName(advice.getBehavior().getDeclaringClass()), + advice.getBehavior().getName(), + getJavaClassNameArray(advice.getBehavior().getParameterTypes()), + advice.isProcessTop(), + lineNum + )); + super.beforeLine(advice, lineNum); + } + + public List getTracing() { + return tracing; + } + + /** + * 断言跟踪信息 + * + * @param exceptTracings 期待的跟踪信息 + */ + public void assertTracing(final String... exceptTracings) { + assertEventProcessor(); + assertArrayEquals( + exceptTracings, + getTracing().toArray(new Event.Type[]{}) + ); + } + + // 检查内核事件处理器是否正确 + private void assertEventProcessor() { + EventListenerHandlers + .getSingleton() + .checkEventProcessor(ObjectIDs.instance.identity(this)); + } + + private void assertArrayEquals(E[] exceptArray, E[] actualArray) { + assertEquals("except size not matched!", getLength(exceptArray), getLength(actualArray)); + for (int index = 0; index < exceptArray.length; index++) { + assertEquals("[" + index + "] not matched", exceptArray[index], actualArray[index]); + } + } + +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java index 3d244c8c..59e026e0 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java @@ -1,8 +1,96 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance.target; +import static com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.TestCase.*; + +/** + * 计算器类(靶机类:所有方法拦截都基于这个类进行) + */ public class Calculator { - public static int sum(int... numArray) { + public static final String ERROR_EXCEPTION_MESSAGE = "THIS IS A TEST CAME FROM CALCULATOR!"; + + /** + * 计算器异常 + */ + public static class CalculatorException extends RuntimeException { + public CalculatorException(String message) { + super(message); + } + } + + /** + * 用例场景 + */ + public enum TestCase { + + /** + * 构造函数中抛出异常 + */ + INIT_WITH_TEST_CASE$EXCEPTION, + + /** + * sum()中抛出异常 + */ + SUM$EXCEPTION, + + /** + * add()中抛出异常 + */ + ADD$EXCEPTION, + + /** + * pow()递归中最后一层递归抛出异常 + */ + POW$EXCEPTION$AT_LAST, + + /** + * 正常返回 + */ + NONE + + } + + private final TestCase tCase; + + public Calculator() { + this(NONE); + } + + public Calculator(String tCaseName) { + this(TestCase.valueOf(tCaseName)); + } + + public Calculator(TestCase tCase) { + this.tCase = tCase; + if (tCase == INIT_WITH_TEST_CASE$EXCEPTION) { + throwCalculatorException(); + } + } + + /** + * 求两数之和 + * + * @param a a + * @param b b + * @return a+b + */ + public int add(int a, int b) { + if (tCase == ADD$EXCEPTION) { + throwCalculatorException(); + } + return a + b; + } + + /** + * 求一个数组之和(嵌套方法) + * + * @param numArray 数组 + * @return 数组之和 + */ + public int sum(int... numArray) { + if (tCase == SUM$EXCEPTION) { + throwCalculatorException(); + } int r = 0; for (int n : numArray) { r = add(r, n); @@ -10,17 +98,28 @@ public static int sum(int... numArray) { return r; } - public static int add(int a, int b) { - return a + b; - } - - public static int errorSum(int... numArray) { - throwsRuntimeException("THIS IS A TEST!"); - return 0; + /** + * 求num的n次方(递归方法) + * + * @param num num + * @param n n次方 + * @return num的n次方 + */ + public int pow(int num, int n) { + if (n == 0) { + if (tCase == POW$EXCEPTION$AT_LAST) { + throwCalculatorException(); + } + return num; + } + return n * pow(num, n - 1); } - private static void throwsRuntimeException(String message) { - throw new RuntimeException(message); + /** + * 模拟抛出异常的方法 + */ + private static void throwCalculatorException() { + throw new RuntimeException(ERROR_EXCEPTION_MESSAGE); } } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/issues/Issues125.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/issues/Issues125.java new file mode 100644 index 00000000..1816b871 --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/issues/Issues125.java @@ -0,0 +1,42 @@ +package com.alibaba.jvm.sandbox.qatest.core.issues; + +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; +import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; +import org.junit.Test; + +import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; +import static org.junit.Assert.assertEquals; + +/** + * 修复#125 + */ +public class Issues125 { + + /** + * 怀疑Spy被重新加载后EventListenerHandlers的计数器被重置 + */ + @Test + public void test$001() { + +// final TracingEventListener listener; +// final Class calculatorClass = JvmHelper +// .createJvm() +// .defineClass( +// Calculator.class, +// CALCULATOR_SUM_FILTER, +// listener = new TracingEventListener(), +// BEFORE, RETURN, THROWS +// ) +// .loadClass(getJavaClassName(Calculator.class)); +// +// assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10)); +// listener.assertEventTracing( +// BEFORE, +// RETURN +// ); + + } + +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java similarity index 53% rename from sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java rename to sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java index c715444a..47f2d4f2 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java @@ -1,35 +1,59 @@ -package com.alibaba.jvm.sandbox.qatest.core.enhance; +package com.alibaba.jvm.sandbox.qatest.core.util; import com.alibaba.jvm.sandbox.api.filter.Filter; import com.alibaba.jvm.sandbox.api.filter.NameRegexFilter; import com.alibaba.jvm.sandbox.core.util.UnCaughtException; +import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; import java.lang.reflect.InvocationTargetException; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.unCaughtGetClassDeclaredJavaMethod; import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.unCaughtInvokeMethod; -public class CalculatorTestCase extends CoreEnhanceBaseTestCase { +/** + * 计算器辅助类 + */ +public class CalculatorHelper { + public static final String CALCULATOR_CLASS_NAME = getJavaClassName(Calculator.class); + + /** + * 拦截sum()方法过滤器 + */ public static final Filter CALCULATOR_SUM_FILTER = new NameRegexFilter( "^com\\.alibaba\\.jvm.sandbox\\.qatest\\.core\\.enhance\\.target\\.Calculator$", "^sum$" ); + /** + * 拦截sum()和add()方法过滤器 + */ public static final Filter CALCULATOR_SUM_and_ADD_FILTER = new NameRegexFilter( "^com\\.alibaba\\.jvm.sandbox\\.qatest\\.core\\.enhance\\.target\\.Calculator$", "^(sum|add)$" ); + /** + * 拦截errorSum()方法过滤器 + */ public static final Filter CALCULATOR_ERROR_SUM_FILTER = new NameRegexFilter( "^com\\.alibaba\\.jvm.sandbox\\.qatest\\.core\\.enhance\\.target\\.Calculator$", "^errorSum$" ); - protected int calculatorSum(final Object calculatorObject, int... numArray) throws Throwable { + /** + * 调用sum()方法 + * + * @param calculatorObject 目标计算器对象实例 + * @param numArray 参数 + * @return 返回值 + * @throws Throwable 调用失败 + */ + public static int sum(final Object calculatorObject, int... numArray) throws Throwable { try { return unCaughtInvokeMethod( unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "sum", int[].class), @@ -46,12 +70,22 @@ protected int calculatorSum(final Object calculatorObject, int... numArray) thro } - protected int calculatorErrorSum(final Object calculatorObject, int... numArray) throws Throwable { + /** + * 调用sum()方法 + * + * @param calculatorObject pow(); + * @param num num + * @param n n次方 + * @return 返回值 + * @throws Throwable 调用失败 + */ + public static int pow(final Object calculatorObject, int num, int n) throws Throwable { try { return unCaughtInvokeMethod( - unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "errorSum", int[].class), + unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "pow", int.class, int.class), calculatorObject, - numArray + num, + n ); } catch (Throwable cause) { if (cause instanceof UnCaughtException @@ -62,4 +96,20 @@ protected int calculatorErrorSum(final Object calculatorObject, int... numArray) } } + public static Object newInstance(final Class calculatorClass) throws Throwable { + try { + return calculatorClass.getConstructor().newInstance(); + } catch (InvocationTargetException cause) { + throw cause.getTargetException(); + } + } + + public static Object newInstance(final Class calculatorClass, final Calculator.TestCase tCase) throws Throwable { + try { + return calculatorClass.getConstructor(String.class).newInstance(tCase.name()); + } catch (InvocationTargetException cause) { + throw cause.getTargetException(); + } + } + } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java index 0846a0ee..6d0385eb 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java @@ -3,6 +3,7 @@ import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.api.filter.Filter; import com.alibaba.jvm.sandbox.api.listener.EventListener; +import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; import com.alibaba.jvm.sandbox.core.enhance.EventEnhancer; import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; import com.alibaba.jvm.sandbox.core.util.ObjectIDs; @@ -10,22 +11,25 @@ import com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher; import com.alibaba.jvm.sandbox.core.util.matcher.MatchingResult; import com.alibaba.jvm.sandbox.core.util.matcher.structure.ClassStructureFactory; +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.InterruptedAdviceAdapterListener; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; +import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; import static com.alibaba.jvm.sandbox.api.filter.ExtFilter.ExtFilterFactory.make; import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static com.alibaba.jvm.sandbox.core.CoreConfigure.toConfigure; import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toByteArray; import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toResourceName; +import static java.util.Arrays.asList; +import static org.apache.commons.lang3.ArrayUtils.toArray; /** * JVM帮助类,能模拟一个JVM对类的管理行为 @@ -68,6 +72,17 @@ public Transformer(final Filter filter, this.eventTypes = eventTypes; } + public Transformer(final Filter filter, + final AdviceListener listener, + final Event.Type... eventTypes) { + this.filter = filter; + this.listener = new InterruptedAdviceAdapterListener(listener); + final List eventTypeList = new ArrayList(); + CollectionUtils.addAll(eventTypeList, toArray(BEFORE, RETURN, THROWS, IMMEDIATELY_THROWS, IMMEDIATELY_RETURN)); + CollectionUtils.addAll(eventTypeList, eventTypes); + this.eventTypes = eventTypeList.toArray(new Event.Type[]{}); + } + public byte[] transform(final String namespace, final ClassLoader loader, final byte[] byteCodes) { From bbc9ce4b165ff3209cc27dc79193ffca314a2bcf Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Sun, 30 Dec 2018 17:50:56 +0800 Subject: [PATCH 05/30] =?UTF-8?q?1.=20=E5=A2=9E=E5=BC=BASpy=E5=AE=B9?= =?UTF-8?q?=E9=94=99=E6=80=A7=202.=20=E4=BC=98=E5=8C=96EventProcessor?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E5=88=9B=E5=BB=BA=E9=83=BD=E8=A6=81=E5=88=86?= =?UTF-8?q?=E9=85=8D9=E4=B8=AAEvent=E5=AF=B9=E8=B1=A1=E7=9A=84=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E5=BC=80=E9=94=80=203.=20=E5=AE=8C=E5=96=84Debug?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sandbox-api/pom.xml | 3 +- sandbox-core/pom.xml | 2 +- .../enhance/weaver/EventListenerHandlers.java | 2 +- .../enhance/weaver/SingleEventFactory.java | 71 ++- .../core/enhance/weaver/asm/EventWeaver.java | 1 - ...CalculatorTestCaseImplByEventListener.java | 18 +- .../core/enhance/ICalculatorTestCase.java | 2 + .../listener/TracingAdviceListener.java | 1 + .../lib/sandbox-spy-1.1.0-for-qatest.jar | Bin 7002 -> 0 bytes .../lib/sandbox-spy-1.2.0-for-qatest.jar | Bin 0 -> 9478 bytes .../module/debug/DebugRalphModule.java | 538 ++++++++---------- .../module/debug/DebugTraceModule.java | 36 +- .../module/debug/DebugWatchModule.java | 66 +-- .../module/debug/ExceptionLoggerModule.java | 26 +- .../debug/HttpHttpAccessLoggerModule.java | 262 +++++---- .../sandbox/module/debug/HttpSupported.java | 188 ------ .../module/debug/JdbcLoggerModule.java | 167 ------ .../sandbox/module/debug/ParamSupported.java | 177 ++++++ .../module/debug/SpringLoggerModule.java | 84 --- .../debug/util/InterfaceProxyUtils.java | 186 ++++++ .../debug/util/SimpleDateFormatHolder.java | 49 -- sandbox-mgr-module/pom.xml | 6 - .../jvm/sandbox/module/mgr/ControlModule.java | 2 +- .../jvm/sandbox/module/mgr/InfoModule.java | 2 +- .../sandbox/module/mgr/ModuleMgrModule.java | 2 +- .../java/com/alibaba/jvm/sandbox/spy/Spy.java | 86 ++- 26 files changed, 942 insertions(+), 1035 deletions(-) delete mode 100644 sandbox-core/src/test/resources/lib/sandbox-spy-1.1.0-for-qatest.jar create mode 100644 sandbox-core/src/test/resources/lib/sandbox-spy-1.2.0-for-qatest.jar delete mode 100644 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpSupported.java delete mode 100644 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.java create mode 100644 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ParamSupported.java delete mode 100644 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.java create mode 100644 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/InterfaceProxyUtils.java delete mode 100755 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.java diff --git a/sandbox-api/pom.xml b/sandbox-api/pom.xml index 0efc41f5..b46b7570 100755 --- a/sandbox-api/pom.xml +++ b/sandbox-api/pom.xml @@ -21,13 +21,12 @@ com.alibaba.jvm.sandbox sandbox-common-api - - javax.servlet javax.servlet-api + diff --git a/sandbox-core/pom.xml b/sandbox-core/pom.xml index f880e109..a7a10421 100755 --- a/sandbox-core/pom.xml +++ b/sandbox-core/pom.xml @@ -58,7 +58,7 @@ maven-surefire-plugin once - -Xbootclasspath/p:./src/test/resources/lib/sandbox-spy-1.1.0-for-qatest.jar + -Xbootclasspath/p:./src/test/resources/lib/sandbox-spy-1.2.0-for-qatest.jar diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java index db057725..b3c90ae7 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java @@ -279,7 +279,7 @@ private Spy.Ret handleEvent(final int listenerId, // 普通事件处理器则可以打个日志后,直接放行 else { - logger.debug("on-event: event|{}|{}|{};listener|{} occur an error.", + logger.warn("on-event: event|{}|{}|{};listener|{} occur an error.", event.type, processId, invokeId, diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java index a1dd3aff..c9e0e89f 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java @@ -56,32 +56,15 @@ class SingleEventFactory { } } - private final BeforeEvent beforeEvent - = new BeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null, null, null, null, null, null); - - private final ReturnEvent returnEvent - = new ReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - - private final ThrowsEvent throwsEvent - = new ThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - - private final LineEvent lineEvent - = new LineEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1); - - private final ImmediatelyThrowsEvent immediatelyThrowsEvent - = new ImmediatelyThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - - private final ImmediatelyReturnEvent immediatelyReturnEvent - = new ImmediatelyReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); - - private final CallBeforeEvent callBeforeEvent - = new CallBeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1, null, null, null); - - private final CallReturnEvent callReturnEvent - = new CallReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID); - - private final CallThrowsEvent callThrowsEvent - = new CallThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + private LineEvent lineEvent = null; + private BeforeEvent beforeEvent = null; + private ReturnEvent returnEvent = null; + private ThrowsEvent throwsEvent = null; + private CallBeforeEvent callBeforeEvent = null; + private CallReturnEvent callReturnEvent = null; + private CallThrowsEvent callThrowsEvent = null; + private ImmediatelyThrowsEvent immediatelyThrowsEvent = null; + private ImmediatelyReturnEvent immediatelyReturnEvent = null; public BeforeEvent makeBeforeEvent(final int processId, @@ -92,6 +75,9 @@ public BeforeEvent makeBeforeEvent(final int processId, final String javaMethodDesc, final Object target, final Object[] argumentArray) { + if (null == beforeEvent) { + beforeEvent = new BeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null, null, null, null, null, null); + } unsafe.putInt(beforeEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(beforeEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putObject(beforeEvent, javaClassLoaderFieldInBeforeEventOffset, javaClassLoader); @@ -106,6 +92,9 @@ public BeforeEvent makeBeforeEvent(final int processId, public ReturnEvent makeReturnEvent(final int processId, final int invokeId, final Object returnObj) { + if (null == returnEvent) { + returnEvent = new ReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + } unsafe.putInt(returnEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(returnEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putObject(returnEvent, objectFieldInReturnEventOffset, returnObj); @@ -113,8 +102,11 @@ public ReturnEvent makeReturnEvent(final int processId, } public ImmediatelyReturnEvent makeImmediatelyReturnEvent(final int processId, - final int invokeId, - final Object returnObj) { + final int invokeId, + final Object returnObj) { + if (null == immediatelyReturnEvent) { + immediatelyReturnEvent = new ImmediatelyReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + } unsafe.putInt(immediatelyReturnEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(immediatelyReturnEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putObject(immediatelyReturnEvent, objectFieldInReturnEventOffset, returnObj); @@ -124,6 +116,9 @@ public ImmediatelyReturnEvent makeImmediatelyReturnEvent(final int processId, public ThrowsEvent makeThrowsEvent(final int processId, final int invokeId, final Throwable throwable) { + if (null == throwsEvent) { + throwsEvent = new ThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + } unsafe.putInt(throwsEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(throwsEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putObject(throwsEvent, throwableFieldInThrowsEventOffset, throwable); @@ -131,8 +126,11 @@ public ThrowsEvent makeThrowsEvent(final int processId, } public ImmediatelyThrowsEvent makeImmediatelyThrowsEvent(final int processId, - final int invokeId, - final Throwable throwable) { + final int invokeId, + final Throwable throwable) { + if (null == immediatelyThrowsEvent) { + immediatelyThrowsEvent = new ImmediatelyThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + } unsafe.putInt(immediatelyThrowsEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(immediatelyThrowsEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putObject(immediatelyThrowsEvent, throwableFieldInThrowsEventOffset, throwable); @@ -140,10 +138,12 @@ public ImmediatelyThrowsEvent makeImmediatelyThrowsEvent(final int processId, } - public LineEvent makeLineEvent(final int processId, final int invokeId, final int lineNumber) { + if (null == lineEvent) { + lineEvent = new LineEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1); + } unsafe.putInt(lineEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(lineEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putInt(lineEvent, lineNumberFieldInLineEventOffset, lineNumber); @@ -156,6 +156,9 @@ public CallBeforeEvent makeCallBeforeEvent(final int processId, final String owner, final String name, final String desc) { + if (null == callBeforeEvent) { + callBeforeEvent = new CallBeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1, null, null, null); + } unsafe.putInt(callBeforeEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(callBeforeEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putInt(callBeforeEvent, lineNumberFieldInCallBeforeEventOffset, lineNumber); @@ -167,6 +170,9 @@ public CallBeforeEvent makeCallBeforeEvent(final int processId, public CallReturnEvent makeCallReturnEvent(final int processId, final int invokeId) { + if (null == callReturnEvent) { + callReturnEvent = new CallReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID); + } unsafe.putInt(callReturnEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(callReturnEvent, invokeIdFieldInInvokeEventOffset, invokeId); return callReturnEvent; @@ -175,6 +181,9 @@ public CallReturnEvent makeCallReturnEvent(final int processId, public CallThrowsEvent makeCallThrowsEvent(final int processId, final int invokeId, final String throwException) { + if (null == callThrowsEvent) { + callThrowsEvent = new CallThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null); + } unsafe.putInt(callThrowsEvent, processIdFieldInInvokeEventOffset, processId); unsafe.putInt(callThrowsEvent, invokeIdFieldInInvokeEventOffset, invokeId); unsafe.putObject(callThrowsEvent, throwExceptionFieldInCallThrowsEventOffset, throwException); diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java index 7cc0372f..27cba37f 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java @@ -193,7 +193,6 @@ private void loadClassLoader() { @Override protected void onMethodEnter() { - codeLockForTracing.lock(new CodeLock.Block() { @Override public void code() { diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java index 802dbf60..a7d9b4b1 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java @@ -1,14 +1,14 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; -import com.alibaba.jvm.sandbox.api.ProcessController; import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper; import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; -import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; +import java.com.alibaba.jvm.sandbox.spy.Spy; + import static com.alibaba.jvm.sandbox.api.ProcessController.returnImmediately; import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; import static com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper.*; @@ -16,6 +16,11 @@ public class CalculatorTestCaseImplByEventListener implements ICalculatorTestCase { + @BeforeClass + public static void initSpy() { + Spy.isSpyThrowException = true; + } + @Test @Override public void cal$sum$around() throws Throwable { @@ -31,7 +36,7 @@ public class CalculatorTestCaseImplByEventListener implements ICalculatorTestCas ) .loadClass(CALCULATOR_CLASS_NAME); - assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + assertEquals(30, sum(newInstance(calculatorClass), 10, 20)); listener.assertEventTracing( BEFORE, RETURN @@ -78,7 +83,7 @@ public class CalculatorTestCaseImplByEventListener implements ICalculatorTestCas .defineClass( Calculator.class, CALCULATOR_SUM_FILTER, - listener = new TracingEventListener(){ + listener = new TracingEventListener() { @Override public void onEvent(Event event) throws Throwable { super.onEvent(event); @@ -89,7 +94,7 @@ public void onEvent(Event event) throws Throwable { ) .loadClass(CALCULATOR_CLASS_NAME); - assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + assertEquals(100, sum(newInstance(calculatorClass), 10, 20)); listener.assertEventTracing( RETURN ); @@ -209,4 +214,5 @@ public void onEvent(Event event) throws Throwable { public void cal$init_with_TestCase$before$changeParameters() throws Throwable { } + } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java index 1ab2463a..f1bddacf 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/ICalculatorTestCase.java @@ -1,5 +1,7 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; +import java.com.alibaba.jvm.sandbox.spy.Spy; + /** * Calculator类测试用例接口 *

    diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java index 1890fb0c..5fbf6970 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java @@ -1,6 +1,7 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance.listener; import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.listener.EventListener; import com.alibaba.jvm.sandbox.api.listener.ext.Advice; import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; diff --git a/sandbox-core/src/test/resources/lib/sandbox-spy-1.1.0-for-qatest.jar b/sandbox-core/src/test/resources/lib/sandbox-spy-1.1.0-for-qatest.jar deleted file mode 100644 index 46fd103d2ced1dad44ad2ed767534b9d0f03a652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7002 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 C^R{9D literal 0 HcmV?d00001 diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.java index 69df51ca..439aea1c 100644 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.java +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.java @@ -2,11 +2,10 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.ProcessController; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.event.BeforeEvent; import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.api.event.InvokeEvent; -import com.alibaba.jvm.sandbox.api.http.Http; import com.alibaba.jvm.sandbox.api.http.printer.ConcurrentLinkedQueuePrinter; import com.alibaba.jvm.sandbox.api.http.printer.Printer; import com.alibaba.jvm.sandbox.api.listener.EventListener; @@ -18,9 +17,9 @@ import org.kohsuke.MetaInfServices; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -28,6 +27,7 @@ import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; +import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately; import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; /** @@ -43,8 +43,8 @@ * */ @MetaInfServices(Module.class) -@Information(id = "debug-ralph", version = "0.0.1", author = "luanjia@taobao.com") -public class DebugRalphModule extends HttpSupported implements Module { +@Information(id = "debug-ralph", version = "0.0.2", author = "luanjia@taobao.com") +public class DebugRalphModule extends ParamSupported implements Module { @Resource private ModuleEventWatcher moduleEventWatcher; @@ -53,95 +53,85 @@ public class DebugRalphModule extends HttpSupported implements Module { * 并发控制 * -d 'debug-ralph/c-limit?class=&method=&c=' */ - @Http("/c-limit") - public void concurrentLimit(final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { - - final Printer printer = new ConcurrentLinkedQueuePrinter(resp.getWriter()); - - try { - - // --- 解析参数 --- - - final String cnPattern = getParameter(req, "class"); - final String mnPattern = getParameter(req, "method"); - final int concurrent = getParameter(req, "c", int.class); - - final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) - .onClass(cnPattern) - .includeSubClasses() - .includeBootstrap() - .onBehavior(mnPattern) - .onWatching() - .withProgress(new ProgressPrinter(printer)) - .onWatch(new EventListener() { - - // 设定一个本次拦截共享的并发限制器,所有被匹配上的类的入口 - // 将会共同被同一个并发限制! - final Semaphore sph = new Semaphore(concurrent); - - // 是否一次拦截调用链的入口 - private boolean isProcessTop(InvokeEvent event) { - return event.processId == event.invokeId; + @Command("c-limit") + public void concurrentLimit(final Map param, final PrintWriter writer) { + + final Printer printer = new ConcurrentLinkedQueuePrinter(writer); + + // --- 解析参数 --- + + final String cnPattern = getParameter(param, "class"); + final String mnPattern = getParameter(param, "method"); + final int concurrent = getParameter(param, "c", int.class); + + final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) + .onClass(cnPattern) + .includeSubClasses() + .includeBootstrap() + .onBehavior(mnPattern) + .onWatching() + .withProgress(new ProgressPrinter(printer)) + .onWatch(new EventListener() { + + // 设定一个本次拦截共享的并发限制器,所有被匹配上的类的入口 + // 将会共同被同一个并发限制! + final Semaphore sph = new Semaphore(concurrent); + + // 是否一次拦截调用链的入口 + private boolean isProcessTop(InvokeEvent event) { + return event.processId == event.invokeId; + } + + @Override + public void onEvent(Event event) throws Throwable { + + final InvokeEvent iEvent = (InvokeEvent) event; + // 不是顶层调用,说明之前已经通过并发控制的闸门,可以不受到并发的制约 + if (!isProcessTop(iEvent)) { + return; } - @Override - public void onEvent(Event event) throws Throwable { - - final InvokeEvent iEvent = (InvokeEvent) event; - // 不是顶层调用,说明之前已经通过并发控制的闸门,可以不受到并发的制约 - if (!isProcessTop(iEvent)) { - return; - } - - switch (event.type) { - case BEFORE: { - final BeforeEvent bEvent = (BeforeEvent) event; - // 如果是顶层的调用,必须通过流控获取继续调用的门票 - // 没有拿到门票的就让他快速失败掉 - if (!sph.tryAcquire()) { - printer.println(String.format( - "%s.%s will be limit by concurrent: %s on %s", - bEvent.javaClassName, - bEvent.javaMethodName, - concurrent, - Thread.currentThread().getName() - )); - ProcessController.throwsImmediately(new RuntimeException("concurrent-limit by Ralph!!!")); - } - break; - } - case RETURN: - case THROWS: { - sph.release(); - break; + switch (event.type) { + case BEFORE: { + final BeforeEvent bEvent = (BeforeEvent) event; + // 如果是顶层的调用,必须通过流控获取继续调用的门票 + // 没有拿到门票的就让他快速失败掉 + if (!sph.tryAcquire()) { + printer.println(String.format( + "%s.%s will be limit by concurrent: %s on %s", + bEvent.javaClassName, + bEvent.javaMethodName, + concurrent, + Thread.currentThread().getName() + )); + throwsImmediately(new RuntimeException("concurrent-limit by Ralph!!!")); } + break; + } + case RETURN: + case THROWS: { + sph.release(); + break; + } - default: - // ignore... - }//switch - - }//onEvent + } - }, BEFORE, RETURN, THROWS); + }//onEvent - // --- 等待结束 --- + }, BEFORE, RETURN, THROWS); - try { - printer.println(String.format( - "concurrent-limit on [%s#%s] concurrent:%s.\nPress CTRL_C abort it!", - cnPattern, - mnPattern, - concurrent - )); - printer.waitingForBroken(); - } finally { - watcher.onUnWatched(); - } + // --- 等待结束 --- - } catch (HttpErrorCodeException hece) { - resp.sendError(hece.getCode(), hece.getMessage()); - return; + try { + printer.println(String.format( + "concurrent-limit on [%s#%s] concurrent:%s.\nPress CTRL_C abort it!", + cnPattern, + mnPattern, + concurrent + )); + printer.waitingForBroken(); + } finally { + watcher.onUnWatched(); } } @@ -151,81 +141,73 @@ public void onEvent(Event event) throws Throwable { * 速率控制 * -d 'debug-ralph/r-limit?class=&method=&c=' */ - @Http("/r-limit") - public void rateLimit(final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { - - final Printer printer = new ConcurrentLinkedQueuePrinter(resp.getWriter()); - - try { - - // --- 解析参数 --- - - final String cnPattern = getParameter(req, "class"); - final String mnPattern = getParameter(req, "method"); - final double rate = getParameter(req, "r", double.class); - - final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) - .onClass(cnPattern) - .includeSubClasses() - .includeBootstrap() - .onBehavior(mnPattern) - .onWatching() - .withProgress(new ProgressPrinter(printer)) - .onWatch(new EventListener() { - - // 设定一个本次拦截共享的速率限制器,所有被匹配上的类的入口 - // 将会共同被同一个速率限速! - final RateLimiter limiter = RateLimiter.create(rate); - - // 是否一次拦截调用链的入口 - private boolean isProcessTop(InvokeEvent event) { - return event.processId == event.invokeId; + @Command("r-limit") + public void rateLimit(final Map param, final PrintWriter writer) { + + final Printer printer = new ConcurrentLinkedQueuePrinter(writer); + + // --- 解析参数 --- + + final String cnPattern = getParameter(param, "class"); + final String mnPattern = getParameter(param, "method"); + final double rate = getParameter(param, "r", double.class); + + final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) + .onClass(cnPattern) + .includeSubClasses() + .includeBootstrap() + .onBehavior(mnPattern) + .onWatching() + .withProgress(new ProgressPrinter(printer)) + .onWatch(new EventListener() { + + // 设定一个本次拦截共享的速率限制器,所有被匹配上的类的入口 + // 将会共同被同一个速率限速! + final RateLimiter limiter = RateLimiter.create(rate); + + // 是否一次拦截调用链的入口 + private boolean isProcessTop(InvokeEvent event) { + return event.processId == event.invokeId; + } + + @Override + public void onEvent(Event event) throws Throwable { + final BeforeEvent bEvent = (BeforeEvent) event; + + // 不是顶层调用,说明之前已经通过流控的闸门,可以不受到流控的制约 + if (!isProcessTop(bEvent)) { + return; } - @Override - public void onEvent(Event event) throws Throwable { - final BeforeEvent bEvent = (BeforeEvent) event; - - // 不是顶层调用,说明之前已经通过流控的闸门,可以不受到流控的制约 - if (!isProcessTop(bEvent)) { - return; - } - - // 如果是顶层的调用,必须通过流控获取继续调用的门票 - // 没有拿到门票的就让他快速失败掉 - if (!limiter.tryAcquire()) { - printer.println(String.format( - "%s.%s will be limit by rate: %s on %s", - bEvent.javaClassName, - bEvent.javaMethodName, - rate, - Thread.currentThread().getName() - )); - ProcessController.throwsImmediately(new RuntimeException("rate-limit by Ralph!!!")); - } - + // 如果是顶层的调用,必须通过流控获取继续调用的门票 + // 没有拿到门票的就让他快速失败掉 + if (!limiter.tryAcquire()) { + printer.println(String.format( + "%s.%s will be limit by rate: %s on %s", + bEvent.javaClassName, + bEvent.javaMethodName, + rate, + Thread.currentThread().getName() + )); + throwsImmediately(new RuntimeException("rate-limit by Ralph!!!")); } - }, BEFORE); + } - // --- 等待结束 --- + }, BEFORE); - try { - printer.println(String.format( - "rate-limit on [%s#%s] rate:%.2f(TPS).\nPress CTRL_C abort it!", - cnPattern, - mnPattern, - rate - )); - printer.waitingForBroken(); - } finally { - watcher.onUnWatched(); - } + // --- 等待结束 --- - } catch (HttpErrorCodeException hece) { - resp.sendError(hece.getCode(), hece.getMessage()); - return; + try { + printer.println(String.format( + "rate-limit on [%s#%s] rate:%.2f(TPS).\nPress CTRL_C abort it!", + cnPattern, + mnPattern, + rate + )); + printer.waitingForBroken(); + } finally { + watcher.onUnWatched(); } } @@ -283,73 +265,65 @@ public Exception throwIt(final String message) throws Exception { * 注入异常 * -d 'debug-ralph/wreck?class=&method=&type=' */ - @Http("/wreck") - public void exception(final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { - - final Printer printer = new ConcurrentLinkedQueuePrinter(resp.getWriter()); + @Command("wreck") + public void exception(final Map param, final PrintWriter writer) { + + final Printer printer = new ConcurrentLinkedQueuePrinter(writer); + + // --- 解析参数 --- + + final String cnPattern = getParameter(param, "class"); + final String mnPattern = getParameter(param, "method"); + final ExceptionType exType = getParameter( + param, + "type", + new Converter() { + @Override + public ExceptionType convert(String string) { + return EnumUtils.getEnum(ExceptionType.class, string); + } + }, + ExceptionType.RuntimeException + ); + + // --- 开始增强 --- + + final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) + .onClass(cnPattern) + .includeSubClasses() + .includeBootstrap() + .onBehavior(mnPattern) + .onWatching() + .withProgress(new ProgressPrinter(printer)) + .onWatch(new EventListener() { + @Override + public void onEvent(Event event) throws Throwable { + + final BeforeEvent bEvent = (BeforeEvent) event; + printer.println(String.format( + "%s.%s will be wreck by exception: %s on %s", + bEvent.javaClassName, + bEvent.javaMethodName, + exType.name(), + Thread.currentThread().getName() + )); + + throwsImmediately(exType.throwIt("wreck-it by Ralph!!!")); + } + }, BEFORE); + + // --- 等待结束 --- try { - - // --- 解析参数 --- - - final String cnPattern = getParameter(req, "class"); - final String mnPattern = getParameter(req, "method"); - final ExceptionType exType = getParameter( - req, - "type", - new Converter() { - @Override - public ExceptionType convert(String string) { - return EnumUtils.getEnum(ExceptionType.class, string); - } - }, - ExceptionType.RuntimeException - ); - - // --- 开始增强 --- - - final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) - .onClass(cnPattern) - .includeSubClasses() - .includeBootstrap() - .onBehavior(mnPattern) - .onWatching() - .withProgress(new ProgressPrinter(printer)) - .onWatch(new EventListener() { - @Override - public void onEvent(Event event) throws Throwable { - - final BeforeEvent bEvent = (BeforeEvent) event; - printer.println(String.format( - "%s.%s will be wreck by exception: %s on %s", - bEvent.javaClassName, - bEvent.javaMethodName, - exType.name(), - Thread.currentThread().getName() - )); - - ProcessController.throwsImmediately(exType.throwIt("wreck-it by Ralph!!!")); - } - }, BEFORE); - - // --- 等待结束 --- - - try { - printer.println(String.format( - "exception on [%s#%s] exception: %s.\nPress CTRL_C abort it!", - cnPattern, - mnPattern, - exType.name() - )); - printer.waitingForBroken(); - } finally { - watcher.onUnWatched(); - } - - } catch (HttpErrorCodeException hece) { - resp.sendError(hece.getCode(), hece.getMessage()); - return; + printer.println(String.format( + "exception on [%s#%s] exception: %s.\nPress CTRL_C abort it!", + cnPattern, + mnPattern, + exType.name() + )); + printer.waitingForBroken(); + } finally { + watcher.onUnWatched(); } } @@ -358,85 +332,77 @@ public void onEvent(Event event) throws Throwable { * 注入延时 * -d 'debug-ralph/delay?class=&method=&delay=' */ - @Http("/delay") - public void delay(final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { + @Command("delay") + public void delay(final Map param, final PrintWriter writer) { final ReentrantLock delayLock = new ReentrantLock(); final Condition delayCondition = delayLock.newCondition(); - final Printer printer = new ConcurrentLinkedQueuePrinter(resp.getWriter()); + final Printer printer = new ConcurrentLinkedQueuePrinter(writer); final AtomicBoolean isFinishRef = new AtomicBoolean(false); - try { - - // --- 解析参数 --- - - final String cnPattern = getParameter(req, "class"); - final String mnPattern = getParameter(req, "method"); - final long delayMs = getParameter(req, "delay", long.class); - - // --- 开始增强 --- - - final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) - .onClass(cnPattern) - .includeSubClasses() - .includeBootstrap() - .onBehavior(mnPattern) - .onWatching() - .withProgress(new ProgressPrinter(printer)) - .onWatch(new EventListener() { - @Override - public void onEvent(Event event) throws Throwable { - - final BeforeEvent bEvent = (BeforeEvent) event; - printer.println(String.format( - "%s.%s will be delay %s(ms) on %s", - bEvent.javaClassName, - bEvent.javaMethodName, - delayMs, - Thread.currentThread().getName() - )); - - delayLock.lock(); - try { - // 如果已经结束,则放弃本次请求 - if (isFinishRef.get()) { - return; - } - delayCondition.await(delayMs, TimeUnit.MILLISECONDS); - } finally { - delayLock.unlock(); + // --- 解析参数 --- + + final String cnPattern = getParameter(param, "class"); + final String mnPattern = getParameter(param, "method"); + final long delayMs = getParameter(param, "delay", long.class); + + // --- 开始增强 --- + + final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) + .onClass(cnPattern) + .includeSubClasses() + .includeBootstrap() + .onBehavior(mnPattern) + .onWatching() + .withProgress(new ProgressPrinter(printer)) + .onWatch(new EventListener() { + @Override + public void onEvent(Event event) throws Throwable { + + final BeforeEvent bEvent = (BeforeEvent) event; + printer.println(String.format( + "%s.%s will be delay %s(ms) on %s", + bEvent.javaClassName, + bEvent.javaMethodName, + delayMs, + Thread.currentThread().getName() + )); + + delayLock.lock(); + try { + // 如果已经结束,则放弃本次请求 + if (isFinishRef.get()) { + return; } + delayCondition.await(delayMs, TimeUnit.MILLISECONDS); + } finally { + delayLock.unlock(); } - }, BEFORE); + } + }, BEFORE); - // --- 等待结束 --- + // --- 等待结束 --- + try { + printer.println(String.format( + "delay on [%s#%s] %s(ms).\nPress CTRL_C abort it!", + cnPattern, + mnPattern, + delayMs + )); + printer.waitingForBroken(); + } finally { + + // 释放锁 + delayLock.lock(); try { - printer.println(String.format( - "delay on [%s#%s] %s(ms).\nPress CTRL_C abort it!", - cnPattern, - mnPattern, - delayMs - )); - printer.waitingForBroken(); + isFinishRef.set(true); + delayCondition.signalAll(); } finally { - - // 释放锁 - delayLock.lock(); - try { - isFinishRef.set(true); - delayCondition.signalAll(); - } finally { - delayLock.unlock(); - } - - watcher.onUnWatched(); + delayLock.unlock(); } - } catch (HttpErrorCodeException hece) { - resp.sendError(hece.getCode(), hece.getMessage()); - return; + watcher.onUnWatched(); } } diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.java index 85c60f51..ab32e295 100644 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.java +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.java @@ -2,7 +2,7 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.http.Http; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.http.printer.ConcurrentLinkedQueuePrinter; import com.alibaba.jvm.sandbox.api.http.printer.Printer; import com.alibaba.jvm.sandbox.api.listener.ext.Advice; @@ -14,43 +14,33 @@ import org.kohsuke.MetaInfServices; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; /** * 模仿Greys的trace命令 *

    测试用模块

    */ @MetaInfServices(Module.class) -@Information(id = "debug-trace", version = "0.0.1", author = "luanjia@taobao.com") -public class DebugTraceModule extends HttpSupported implements Module { +@Information(id = "debug-trace", version = "0.0.2", author = "luanjia@taobao.com") +public class DebugTraceModule extends ParamSupported implements Module { @Resource private ModuleEventWatcher moduleEventWatcher; - @Http("/trace") - public void trace(final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { - try { - final String cnPattern = getParameter(req, "class"); - final String mnPattern = getParameter(req, "method"); - final Printer printer = new ConcurrentLinkedQueuePrinter(resp.getWriter()); - debugTrace(cnPattern, mnPattern, printer); - } catch (HttpSupported.HttpErrorCodeException hece) { - resp.sendError(hece.getCode(), hece.getMessage()); - return; - } - } + @Command("trace") + public void trace(final Map param, final PrintWriter writer) { - private void debugTrace(final String cnPattern, - final String mnPattern, - final Printer printer) { + final String cnPattern = getParameter(param, "class"); + final String mnPattern = getParameter(param, "method"); + final Printer printer = new ConcurrentLinkedQueuePrinter(writer); final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) .onClass(cnPattern).includeSubClasses() .onBehavior(mnPattern) - .onWatching().withProgress(new ProgressPrinter(printer)).withCall() + .onWatching() + .withCall() + .withProgress(new ProgressPrinter(printer)) .onWatch(new AdviceListener() { private String getTracingTitle(final Advice advice) { diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.java index 405f6da3..ac3a56fe 100644 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.java +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.java @@ -2,7 +2,7 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.http.Http; +import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.http.printer.ConcurrentLinkedQueuePrinter; import com.alibaba.jvm.sandbox.api.http.printer.Printer; import com.alibaba.jvm.sandbox.api.listener.ext.Advice; @@ -15,11 +15,10 @@ import org.kohsuke.MetaInfServices; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.PrintWriter; import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.alibaba.jvm.sandbox.module.debug.DebugWatchModule.Trigger.*; @@ -30,47 +29,39 @@ * @author luanjia@taobao.com */ @MetaInfServices(Module.class) -@Information(id = "debug-watch", version = "0.0.1", author = "luanjia@taobao.com") -public class DebugWatchModule extends HttpSupported implements Module { +@Information(id = "debug-watch", version = "0.0.2", author = "luanjia@taobao.com") +public class DebugWatchModule extends ParamSupported implements Module { @Resource private ModuleEventWatcher moduleEventWatcher; - @Http("/watch") - public void watch(final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { - try { - final String cnPattern = getParameter(req, "class"); - final String mnPattern = getParameter(req, "method"); - final String watchExpress = getParameter(req, "watch"); - final List triggers = getParameters( - req, - "at", - new Converter() { - @Override - public Trigger convert(String string) { - return EnumUtils.getEnum(Trigger.class, string); - } - }, - new Trigger[]{Trigger.BEFORE}); - final Printer printer = new ConcurrentLinkedQueuePrinter(resp.getWriter()); - debugWatch(cnPattern, mnPattern, watchExpress, triggers, printer); - } catch (HttpSupported.HttpErrorCodeException hece) { - resp.sendError(hece.getCode(), hece.getMessage()); - return; - } - } + @Command("watch") + public void watch(final Map param, + final Map params, + final PrintWriter writer) { + + final String cnPattern = getParameter(param, "class"); + final String mnPattern = getParameter(param, "method"); + final String watchExpress = getParameter(param, "watch"); + final List triggers = getParameters( + params, + "at", + new Converter() { + @Override + public Trigger convert(String string) { + return EnumUtils.getEnum(Trigger.class, string); + } + }, + Trigger.BEFORE); + final Printer printer = new ConcurrentLinkedQueuePrinter(writer); - private void debugWatch(final String cnPattern, - final String mnPattern, - final String watchExpress, - final List triggers, - final Printer printer) { final EventWatcher watcher = new EventWatchBuilder(moduleEventWatcher) - .onClass(cnPattern).includeSubClasses() + .onClass(cnPattern) + .includeSubClasses() .onBehavior(mnPattern) - .onWatching().withProgress(new ProgressPrinter(printer)) + .onWatching() + .withProgress(new ProgressPrinter(printer)) .onWatch(new AdviceListener() { @Override @@ -137,6 +128,7 @@ private void printlnByExpress(final Bind bind) { } + private static String toString(final Object object) { return null == object ? "null" diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.java index b617544d..87ea1f95 100644 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.java +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.java @@ -3,8 +3,9 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.LoadCompleted; import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.listener.ext.Advice; -import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; +import com.alibaba.jvm.sandbox.api.event.BeforeEvent; +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.listener.EventListener; import com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder; import com.alibaba.jvm.sandbox.api.resource.ModuleEventWatcher; import org.kohsuke.MetaInfServices; @@ -13,13 +14,16 @@ import javax.annotation.Resource; +import static com.alibaba.jvm.sandbox.api.event.Event.Type.BEFORE; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; + /** * 异常类创建日志 * * @author luanjia@taobao.com */ @MetaInfServices(Module.class) -@Information(id = "debug-exception-logger", version = "0.0.1", author = "luanjia@taobao.com") +@Information(id = "debug-exception-logger", version = "0.0.2", author = "luanjia@taobao.com") public class ExceptionLoggerModule implements Module, LoadCompleted { private final Logger exLogger = LoggerFactory.getLogger("DEBUG-EXCEPTION-LOGGER"); @@ -30,19 +34,19 @@ public class ExceptionLoggerModule implements Module, LoadCompleted { @Override public void loadCompleted() { new EventWatchBuilder(moduleEventWatcher) - .onClass(Exception.class).includeBootstrap() + .onClass(Exception.class) + .includeBootstrap() .onBehavior("") - .onWatch(new AdviceListener() { - + .onWatch(new EventListener() { @Override - public void afterReturning(Advice advice) { + public void onEvent(Event event) throws Throwable { + final BeforeEvent bEvent = (BeforeEvent) event; exLogger.info("occur an exception: {}", - advice.getTarget().getClass().getName(), - advice.getTarget() + getJavaClassName(bEvent.target.getClass()), + bEvent.target ); } - - }); + }, BEFORE); } } diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.java index 63878232..5a37b725 100644 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.java +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.java @@ -3,24 +3,28 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.LoadCompleted; import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.listener.Sentry; import com.alibaba.jvm.sandbox.api.listener.ext.Advice; import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; import com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder; import com.alibaba.jvm.sandbox.api.resource.ModuleEventWatcher; +import com.alibaba.jvm.sandbox.module.debug.util.InterfaceProxyUtils; +import com.alibaba.jvm.sandbox.module.debug.util.InterfaceProxyUtils.MethodInterceptor; +import com.alibaba.jvm.sandbox.module.debug.util.InterfaceProxyUtils.MethodInvocation; +import com.alibaba.jvm.sandbox.module.debug.util.InterfaceProxyUtils.ProxyMethod; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.reflect.MethodUtils; import org.kohsuke.MetaInfServices; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; -import java.lang.reflect.InvocationTargetException; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import static com.alibaba.jvm.sandbox.module.debug.HttpHttpAccessLoggerModule.HttpProcessStep.*; +import static com.alibaba.jvm.sandbox.module.debug.util.InterfaceProxyUtils.intercept; +import static com.alibaba.jvm.sandbox.module.debug.util.InterfaceProxyUtils.puppet; +import static org.apache.commons.lang3.ArrayUtils.contains; /** * 基于HTTP-SERVLET(v2.4)规范的HTTP访问日志 @@ -28,7 +32,7 @@ * @author luanjia@taobao.com */ @MetaInfServices(Module.class) -@Information(id = "debug-http-logger", version = "0.0.1", author = "luanjia@taobao.com") +@Information(id = "debug-http-logger", version = "0.0.2", author = "luanjia@taobao.com") public class HttpHttpAccessLoggerModule implements Module, LoadCompleted { private final Logger stLogger = LoggerFactory.getLogger("DEBUG-SERVLET-LOGGER"); @@ -36,76 +40,56 @@ public class HttpHttpAccessLoggerModule implements Module, LoadCompleted { @Resource private ModuleEventWatcher moduleEventWatcher; - - /** - * HTTP处理步骤 - * {@code - * HttpServlet.service():BEGIN - * -> HttpServletResponse.[setState/sendError]():BEGIN - * -> HttpServletResponse.[setState/sendError]():FINISH - * -> HttpServlet.service():FINISH - * } - */ - enum HttpProcessStep { - waitingHttpServletServiceBegin, - waitingHttpServletResponseState, - waitingHttpServletServiceFinish - } - /** * HTTP接入信息 */ class HttpAccess { - String from; - String method; - String uri; - Map parameterMap; - String userAgent; - int status; - long beginTimestamp; - } + final long beginTimestamp = System.currentTimeMillis(); + final String from; + final String method; + final String uri; + final Map parameterMap; + final String userAgent; + int status = 200; + + HttpAccess(final String from, + final String method, + final String uri, + final Map parameterMap, + final String userAgent) { + this.from = from; + this.method = method; + this.uri = uri; + this.parameterMap = parameterMap; + this.userAgent = userAgent; + } - // 安排一个哨兵,用于观察Servlet执行步骤 - private final Sentry sentry = new Sentry(waitingHttpServletServiceBegin); + void setStatus(int status) { + this.status = status; + } - @Override - public void loadCompleted() { - buildingHttpStatusFillBack(); - buildingHttpServletService(); } - /* - * HTTP状态码回填 - * 因为在3.0之前你都很难拿到HTTP的应答状态,必须拦截HttpServletResponse的setStatus/sendError才能拿到 - * 而且还必须要考虑到200这种状态码为默认状态码的情况 - */ - private void buildingHttpStatusFillBack() { - new EventWatchBuilder(moduleEventWatcher) - .onClass("javax.servlet.http.HttpServletResponse") - /**/.includeSubClasses() - .onBehavior("setStatus") - /**/.withParameterTypes(int.class) - .onBehavior("sendError") - /**/.withParameterTypes(int.class) - /**/.withParameterTypes(int.class, String.class) - .onWatch(new AdviceListener() { - @Override - public void before(Advice advice) { - if (sentry.next(waitingHttpServletResponseState, waitingHttpServletServiceFinish)) { - final HttpAccess ha = sentry.attachment(); - ha.status = (Integer) advice.getParameterArray()[0]; - } - } - }); + interface IHttpServletRequest { + + @ProxyMethod(name = "getRemoteAddr") + String getRemoteAddress(); + + String getMethod(); + + String getRequestURI(); + + Map getParameterMap(); + + String getHeader(String name); + } - /* - * 拦截HttpServlet的服务请求入口 - */ - private void buildingHttpServletService() { + @Override + public void loadCompleted() { new EventWatchBuilder(moduleEventWatcher) .onClass("javax.servlet.http.HttpServlet") - .includeBootstrap() + .includeSubClasses() .onBehavior("service") .withParameterTypes( "javax.servlet.http.HttpServletRequest", @@ -113,98 +97,112 @@ private void buildingHttpServletService() { ) .onWatch(new AdviceListener() { - final String MARK_HTTP_BEGIN = "MARK_HTTP_BEGIN"; - @Override - public void before(Advice advice) throws Throwable { - if (sentry.next(waitingHttpServletServiceBegin, waitingHttpServletResponseState)) { - final Object objectOfHttpServletRequest = advice.getParameterArray()[0]; - final HttpAccess ha = new HttpAccess(); - ha.from = invokeMethod(objectOfHttpServletRequest, "getRemoteAddr"); - ha.method = invokeMethod(objectOfHttpServletRequest, "getMethod"); - ha.uri = invokeMethod(objectOfHttpServletRequest, "getRequestURI"); - ha.parameterMap = invokeMethod(objectOfHttpServletRequest, "getParameterMap"); - ha.userAgent = invokeMethod(objectOfHttpServletRequest, "getHeader", "User-Agent"); - ha.beginTimestamp = System.currentTimeMillis(); - sentry.attach(ha); - advice.mark(MARK_HTTP_BEGIN); + protected void before(Advice advice) throws Throwable { + + // 只关心顶层调用 + if (!advice.isProcessTop()) { + return; } + + // 俘虏HttpServletRequest参数为傀儡 + final IHttpServletRequest httpServletRequest = puppet( + IHttpServletRequest.class, + advice.getParameterArray()[0] + ); + + // 初始化HttpAccess + final HttpAccess httpAccess = new HttpAccess( + httpServletRequest.getRemoteAddress(), + httpServletRequest.getMethod(), + httpServletRequest.getRequestURI(), + httpServletRequest.getParameterMap(), + httpServletRequest.getHeader("User-Agent") + ); + + // 附加到advice上,以便在onReturning()和onThrowing()中取出 + advice.attach(httpAccess); + + final Class classOfHttpServletResponse = advice.getBehavior() + .getDeclaringClass() + .getClassLoader() + .loadClass("javax.servlet.http.HttpServletResponse"); + + // 替换HttpServletResponse参数 + advice.changeParameter(1, intercept( + classOfHttpServletResponse, + advice.getTarget().getClass().getClassLoader(), + advice.getParameterArray()[1], + new MethodInterceptor() { + @Override + public Object invoke(MethodInvocation methodInvocation) throws Throwable { + if (contains( + new String[]{ + "setStatus", + "sendError" + }, + methodInvocation.getMethod().getName())) { + httpAccess.setStatus((Integer) methodInvocation.getArguments()[0]); + } + return methodInvocation.proceed(); + } + })); + } @Override - public void afterReturning(Advice advice) { - if (finishing(advice)) { - final HttpAccess ha = sentry.attachment(); - final long cost = System.currentTimeMillis() - ha.beginTimestamp; - logAccess(ha, cost, null); + protected void afterReturning(Advice advice) { + // 只关心顶层调用 + if (!advice.isProcessTop()) { + return; } - } - @Override - public void afterThrowing(Advice advice) { - if (finishing(advice)) { - final HttpAccess ha = sentry.attachment(); - final long cost = System.currentTimeMillis() - ha.beginTimestamp; - logAccess(ha, cost, advice.getThrowable()); + final HttpAccess httpAccess = advice.attachment(); + if (null == httpAccess) { + return; } + + logAccess( + httpAccess, + System.currentTimeMillis() - httpAccess.beginTimestamp, + null + ); } - /** - * 判断是否请求对称结束 - * - * @param advice 通知 - * @return TRUE:对称结束;FALSE:非对称结束 - */ - private boolean finishing(Advice advice) { - - // 一些HttpServletResponse在实现的时候,status默认值就是200 - // 所以这些实现类就会偷懒不去主动调用setStatus(),仅拦截setStatus/sendError是无法完全获取所有的,HTTP状态码 - // 这里做一个判断,如果走的是默认值,则主动补偿上这个200 - // - // 调用路径 - // HttpServlet.service():BEGIN - // `-HttpServlet.service():FINISH - if (advice.hasMark(MARK_HTTP_BEGIN) - && sentry.next(waitingHttpServletResponseState, waitingHttpServletServiceBegin)) { - final HttpAccess ha = sentry.attachment(); - ha.status = 200; - return true; + @Override + protected void afterThrowing(Advice advice) { + // 只关心顶层调用 + if (!advice.isProcessTop()) { + return; } - // 调用路径 - // HttpServlet.service():BEGIN - // `- HttpServletResponse.[setState/sendError]():BEGIN - // `- HttpServletResponse.[setState/sendError]():FINISH - // `- HttpServlet.service():FINISH - return advice.hasMark(MARK_HTTP_BEGIN) - && sentry.next(waitingHttpServletServiceFinish, waitingHttpServletServiceBegin); + final HttpAccess httpAccess = advice.attachment(); + if (null == httpAccess) { + return; + } + logAccess( + httpAccess, + System.currentTimeMillis() - httpAccess.beginTimestamp, + advice.getThrowable() + ); } }); - } - /* - * 泛型转换方法调用 - * 底层使用apache common实现 - */ - private static T invokeMethod(final Object object, - final String methodName, - final Object... args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { - return (T) MethodUtils.invokeMethod(object, methodName, args); } // 格式化ParameterMap private static String formatParameterMap(final Map parameterMap) { + if (MapUtils.isEmpty(parameterMap)) { + return StringUtils.EMPTY; + } final Set kvPairs = new LinkedHashSet(); for (final Map.Entry entry : parameterMap.entrySet()) { - final String[] valueArray = entry.getValue(); - if (null == valueArray) { - continue; - } - for (final String value : valueArray) { - kvPairs.add(String.format("%s=%s", entry.getKey(), value)); - } + kvPairs.add(String.format("%s=%s", + entry.getKey(), + StringUtils.join(entry.getValue(), ",") + )); } return StringUtils.join(kvPairs, "&"); } diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpSupported.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpSupported.java deleted file mode 100644 index 2a80a6b7..00000000 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/HttpSupported.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.alibaba.jvm.sandbox.module.debug; - -import com.alibaba.jvm.sandbox.api.util.GaArrayUtils; -import org.apache.commons.lang3.StringUtils; - -import javax.servlet.http.HttpServletRequest; -import java.util.*; - -import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; - -public class HttpSupported { - - /** - * 封装HTTP错误码 - */ - protected static class HttpErrorCodeException extends Exception { - private final int code; - - HttpErrorCodeException(int code, String message) { - super(message); - this.code = code; - } - - int getCode() { - return code; - } - - } - - interface Converter { - T convert(String string); - } - - static Map, Converter> converterMap = new HashMap, Converter>(); - - static { - regConverter(new Converter() { - @Override - public String convert(String string) { - return string; - } - }, String.class); - - regConverter(new Converter() { - @Override - public Long convert(String string) { - return Long.valueOf(string); - } - }, long.class, Long.class); - - regConverter(new Converter() { - @Override - public Double convert(String string) { - return Double.valueOf(string); - } - }, double.class, Double.class); - - regConverter(new Converter() { - @Override - public Integer convert(String string) { - return Integer.valueOf(string); - } - }, int.class, Integer.class); - - } - - /** - * 注册类型转换器 - * - * @param converter 转换器 - * @param typeArray 类型的Java类数组 - * @param 类型 - */ - protected static void regConverter(Converter converter, Class... typeArray) { - for (final Class type : typeArray) { - converterMap.put(type, converter); - } - } - - private static T convert(final Converter converter, - final String string, - final String name) throws HttpErrorCodeException { - if (null == converter) { - throw new HttpErrorCodeException(SC_BAD_REQUEST, String.format("parameter:%s is unknow type!", name)); - } - try { - return converter.convert(string); - } catch (Throwable cause) { - throw new HttpErrorCodeException(SC_BAD_REQUEST, String.format("paramater:%s is illegal format!", name)); - } - } - - protected static T getParameter(final HttpServletRequest req, - final String name, - final Converter converter, - final T defaultValue) throws HttpErrorCodeException { - final String string = req.getParameter(name); - - // 参数值为空 - if (StringUtils.isBlank(string)) { - if (null == defaultValue) { - throw new HttpErrorCodeException(SC_BAD_REQUEST, String.format("parameter:%s is require!", name)); - } - return defaultValue; - } - - // 参数值不为空 - else { - return convert(converter, string, name); - } - } - - protected static List getParameters(final HttpServletRequest req, - final String name, - final Converter converter, - final T... defaultValueArray) throws HttpErrorCodeException { - final String[] stringArray = req.getParameterValues(name); - if (GaArrayUtils.isEmpty(stringArray)) { - if (null == defaultValueArray) { - throw new HttpErrorCodeException(SC_BAD_REQUEST, String.format("parameter:%s is require!", name)); - } - return Arrays.asList(defaultValueArray); - } - final List values = new ArrayList(); - for (final String string : stringArray) { - values.add(convert(converter, string, name)); - } - return values; - } - - - protected static String getParameter(final HttpServletRequest req, - final String name) throws HttpErrorCodeException { - return getParameter( - req, name, - String.class, - null - ); - } - - protected static String getParameter(final HttpServletRequest req, - final String name, - final String defaultString) throws HttpErrorCodeException { - return getParameter( - req, - name, - String.class, - defaultString - ); - } - - protected static T getParameter(final HttpServletRequest req, - final String name, - final Class type) throws HttpErrorCodeException { - return getParameter( - req, - name, - type, - null - ); - } - - protected static T getParameter(final HttpServletRequest req, - final String name, - final Class type, - final T defaultValue) throws HttpErrorCodeException { - return getParameter( - req, - name, - (Converter) converterMap.get(type), - defaultValue - ); - } - - protected static List getParameters(final HttpServletRequest req, - final String name, - final Class type, - final T... defaultValueArray) throws HttpErrorCodeException { - return getParameters( - req, - name, - (Converter) converterMap.get(type), - defaultValueArray - ); - } - - -} diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.java deleted file mode 100644 index abdd03b7..00000000 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.java +++ /dev/null @@ -1,167 +0,0 @@ -package com.alibaba.jvm.sandbox.module.debug; - -import com.alibaba.jvm.sandbox.api.Information; -import com.alibaba.jvm.sandbox.api.LoadCompleted; -import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.listener.Sentry; -import com.alibaba.jvm.sandbox.api.listener.ext.Advice; -import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; -import com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder; -import com.alibaba.jvm.sandbox.api.resource.ModuleEventWatcher; -import org.kohsuke.MetaInfServices; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.Resource; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.Statement; - -import static com.alibaba.jvm.sandbox.module.debug.JdbcLoggerModule.MonitorJavaSqlPreparedStatementStep.*; - -/** - * 基于JDBC的SQL日志 - * - * @author luanjia@taobao.com - */ -@MetaInfServices(Module.class) -@Information(id = "debug-jdbc-logger", version = "0.0.1", author = "luanjia@taobao.com") -public class JdbcLoggerModule implements Module, LoadCompleted { - - private final Logger smLogger = LoggerFactory.getLogger("DEBUG-JDBC-LOGGER"); - - @Resource - private ModuleEventWatcher moduleEventWatcher; - - @Override - public void loadCompleted() { - monitorJavaSqlStatement(); - monitorJavaSqlPreparedStatement(); - } - - // 监控java.sql.Statement的所有实现类 - private void monitorJavaSqlStatement() { - new EventWatchBuilder(moduleEventWatcher) - .onClass(Statement.class).includeSubClasses() - .onBehavior("execute*") - /**/.withParameterTypes(String.class) - /**/.withParameterTypes(String.class, int.class) - /**/.withParameterTypes(String.class, int[].class) - /**/.withParameterTypes(String.class, String[].class) - .onWatch(new AdviceListener() { - - private final String MARK_STATEMENT_EXECUTE = "MARK_STATEMENT_EXECUTE"; - private final String PREFIX = "STMT"; - - @Override - public void before(Advice advice) { - advice.attach(System.currentTimeMillis(), MARK_STATEMENT_EXECUTE); - } - - @Override - public void afterReturning(Advice advice) { - if (advice.hasMark(MARK_STATEMENT_EXECUTE)) { - final long costMs = System.currentTimeMillis() - (Long) advice.attachment(); - final String sql = advice.getParameterArray()[0].toString(); - logSql(PREFIX, sql, costMs, true, null); - } - } - - @Override - public void afterThrowing(Advice advice) { - if (advice.hasMark(MARK_STATEMENT_EXECUTE)) { - final long costMs = System.currentTimeMillis() - (Long) advice.attachment(); - final String sql = advice.getParameterArray()[0].toString(); - logSql(PREFIX, sql, costMs, false, advice.getThrowable()); - } - } - - }); - } - - enum MonitorJavaSqlPreparedStatementStep { - waiting_Connection_prepareStatement, - waiting_PreparedStatement_execute, - waiting_PreparedStatement_execute_finish, - } - - private void monitorJavaSqlPreparedStatement() { - - new EventWatchBuilder(moduleEventWatcher) - .onClass(Connection.class) - .includeSubClasses() - .onBehavior("prepareStatement") - .onClass(PreparedStatement.class) - .includeSubClasses() - .onBehavior("execute*") - .onWatch(new AdviceListener() { - - private final String MARK_PREPARED_STATEMENT_EXECUTE = "MARK_PREPARED_STATEMENT_EXECUTE"; - private final String PREFIX = "PSTMT"; - - - private final Sentry sentry - = new Sentry(waiting_Connection_prepareStatement); - - @Override - public void before(Advice advice) { - - // Connection.prepareStatement() - if (advice.getTarget() instanceof Connection - && sentry.next(waiting_Connection_prepareStatement, waiting_PreparedStatement_execute)) { - sentry.attach(advice.getParameterArray()[0].toString()); - } - - // PreparedStatement.execute*() - if (advice.getTarget() instanceof PreparedStatement - && sentry.next(waiting_PreparedStatement_execute, waiting_PreparedStatement_execute_finish)) { - advice.attach(System.currentTimeMillis(), MARK_PREPARED_STATEMENT_EXECUTE); - } - - } - - @Override - public void afterReturning(Advice advice) { - if (finishing(sentry, advice)) { - final long costMs = System.currentTimeMillis() - (Long) advice.attachment(); - final String sql = sentry.attachment(); - logSql(PREFIX, sql, costMs, true, null); - } - } - - @Override - public void afterThrowing(Advice advice) { - if (finishing(sentry, advice)) { - final long costMs = System.currentTimeMillis() - (Long) advice.attachment(); - final String sql = sentry.attachment(); - logSql(PREFIX, sql, costMs, false, advice.getThrowable()); - } - } - - private boolean finishing(final Sentry sentry, - final Advice advice) { - return advice.hasMark(MARK_PREPARED_STATEMENT_EXECUTE) - && sentry.next(waiting_PreparedStatement_execute_finish, waiting_Connection_prepareStatement); - } - - }); - } - - // SQL日志输出 - private void logSql(final String prefix, - final String sql, - final long costMs, - final boolean isSuccess, - final Throwable cause) { - smLogger.info("{};cost:{}ms;{};sql:{}", - prefix, - costMs, - isSuccess - ? "success" - : "failed", - sql, - cause - ); - } - -} diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ParamSupported.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ParamSupported.java new file mode 100644 index 00000000..1a602ea0 --- /dev/null +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/ParamSupported.java @@ -0,0 +1,177 @@ +package com.alibaba.jvm.sandbox.module.debug; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.alibaba.jvm.sandbox.api.util.GaArrayUtils.isEmpty; +import static java.util.Arrays.asList; +import static org.apache.commons.lang3.StringUtils.isNotBlank; + +/** + * 命令参数支撑类 + */ +public class ParamSupported { + + /** + * 转换器(字符串到指定类型的转换器) + * + * @param 转换目标类型 + */ + interface Converter { + + /** + * 转换字符串为目标类型 + * + * @param string 字符串内容 + * @return 目标类型 + */ + T convert(String string); + } + + // 转换器集合 + final static Map, Converter> converterMap = new HashMap, Converter>(); + + static { + + /** + * 转换为字符串 + */ + regConverter(new Converter() { + @Override + public String convert(String string) { + return string; + } + }, String.class); + + /** + * 转换为Long + */ + regConverter(new Converter() { + @Override + public Long convert(String string) { + return Long.valueOf(string); + } + }, long.class, Long.class); + + /** + * 转换为Double + */ + regConverter(new Converter() { + @Override + public Double convert(String string) { + return Double.valueOf(string); + } + }, double.class, Double.class); + + /** + * 转换为Integer + */ + regConverter(new Converter() { + @Override + public Integer convert(String string) { + return Integer.valueOf(string); + } + }, int.class, Integer.class); + + } + + /** + * 注册类型转换器 + * + * @param converter 转换器 + * @param typeArray 类型的Java类数组 + * @param 类型 + */ + protected static void regConverter(Converter converter, Class... typeArray) { + for (final Class type : typeArray) { + converterMap.put(type, converter); + } + } + + protected static T getParameter(final Map param, + final String name, + final Converter converter, + final T defaultValue) { + final String string = param.get(name); + return isNotBlank(string) + ? converter.convert(string) + : defaultValue; + } + + protected static List getParameters(final Map param, + final String name, + final Converter converter, + final T... defaultValueArray) { + final String[] stringArray = param.get(name); + if (isEmpty(stringArray)) { + return asList(defaultValueArray); + } + final List values = new ArrayList(); + for (final String string : stringArray) { + values.add(converter.convert(string)); + } + return values; + } + + + protected static String getParameter(final Map param, + final String name) { + return getParameter( + param, + name, + String.class, + null + ); + } + + protected static String getParameter(final Map param, + final String name, + final String defaultString) { + return getParameter( + param, + name, + String.class, + defaultString + ); + } + + protected static T getParameter(final Map param, + final String name, + final Class type) { + return getParameter( + param, + name, + type, + null + ); + } + + protected static T getParameter(final Map param, + final String name, + final Class type, + final T defaultValue) { + return getParameter( + param, + name, + (Converter) converterMap.get(type), + defaultValue + ); + } + + protected static List getParameters(final Map param, + final String name, + final Class type, + final T... defaultValueArray) { + return getParameters( + param, + name, + (Converter) converterMap.get(type), + defaultValueArray + ); + } + + +} diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.java deleted file mode 100644 index 1ef10ba2..00000000 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.alibaba.jvm.sandbox.module.debug; - -import com.alibaba.jvm.sandbox.api.Information; -import com.alibaba.jvm.sandbox.api.LoadCompleted; -import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.listener.ext.Advice; -import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; -import com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder; -import com.alibaba.jvm.sandbox.api.resource.ModuleEventWatcher; -import org.kohsuke.MetaInfServices; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.Resource; - -/** - * Spring容器的调试日志 - */ -@MetaInfServices(Module.class) -@Information(id = "debug-spring-logger", version = "0.0.1", author = "luanjia@taobao.com") -public class SpringLoggerModule implements Module, LoadCompleted { - - private final Logger spLogger = LoggerFactory.getLogger("DEBUG-SPRING-LOGGER"); - - @Resource - private ModuleEventWatcher moduleEventWatcher; - - @Override - public void loadCompleted() { - buildingSpringRestController(); - } - - private void buildingSpringRestController() { - new EventWatchBuilder(moduleEventWatcher) - .onAnyClass() - .hasAnnotationTypes("org.springframework.web.bind.annotation.RestController") - .onAnyBehavior() - .hasAnnotationTypes("org.springframework.web.bind.annotation.RequestMapping") - .onWatch(new AdviceListener() { - - @Override - public void before(Advice advice) { - advice.attach(System.currentTimeMillis()); - } - - @Override - public void afterReturning(Advice advice) { - logSpringRestController(advice); - } - - @Override - public void afterThrowing(Advice advice) { - logSpringRestController(advice); - } - - private void logSpringRestController(Advice advice) { - logSpring( - "REST", - System.currentTimeMillis() - (Long) advice.attachment(), - advice.getTarget().getClass().getName() + "#" + advice.getBehavior().getName(), - advice.isReturn() ? "SUC" : "FAL", - advice.isThrows() ? advice.getThrowable() : null - ); - } - - }); - } - - /* - * 时间:日志框架提供 - * 地点:SpringMod - * 耗时:costMs - * 人物:who - * 事件:message/throwable - */ - private void logSpring(final String springMod, - final long cost, - final String who, - final String message, - final Throwable throwable) { - spLogger.info("{}:{}ms:{}:{}", springMod, cost, who, message, throwable); - } - -} diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/InterfaceProxyUtils.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/InterfaceProxyUtils.java new file mode 100644 index 00000000..ccbcd098 --- /dev/null +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/InterfaceProxyUtils.java @@ -0,0 +1,186 @@ +package com.alibaba.jvm.sandbox.module.debug.util; + +import org.apache.commons.lang3.StringUtils; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassNameArray; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import static org.apache.commons.lang3.ArrayUtils.getLength; + +public class InterfaceProxyUtils { + + @Target(METHOD) + @Retention(RUNTIME) + public @interface ProxyMethod { + + /** + * 目标方法名 + * + * @return 目标方法名 + */ + String name(); + + } + + /** + * 用于包装目标对象操作的代理方法处理 + */ + static abstract class WrapInvocationHandler implements InvocationHandler { + + final Map mappingOfWrapMethods = new ConcurrentHashMap(); + + String getInterfaceMethodName(final Method interfaceMethod) { + final ProxyMethod proxyMethod = interfaceMethod.getAnnotation(ProxyMethod.class); + return null == proxyMethod + ? interfaceMethod.getName() + : proxyMethod.name(); + } + + boolean isEquals(final String[] srcStringArray, + final String[] dstStringArray) { + final int length; + if ((length = getLength(srcStringArray)) != getLength(dstStringArray)) { + return false; + } + for (int index = 0; index < length; index++) { + if (!StringUtils.equals(srcStringArray[index], dstStringArray[index])) { + return false; + } + } + return true; + } + + /** + * 比较interfaceMethod和targetMethod两个方法是否接近 + * + * @param interfaceMethod 接口声明的方法 + * @param targetMethod 目标对象声明的方法 + * @return TRUE:接近;FALSE:不接近 + */ + boolean isCloseTo(final Method interfaceMethod, final Method targetMethod) { + return StringUtils.equals(getInterfaceMethodName(interfaceMethod), targetMethod.getName()) + && isEquals(getJavaClassNameArray(interfaceMethod.getParameterTypes()), getJavaClassNameArray(targetMethod.getParameterTypes())); + + } + + Method getTargetMethod(final Method interfaceMethod, final Object target) throws NoSuchMethodException { + if (mappingOfWrapMethods.containsKey(interfaceMethod)) { + return mappingOfWrapMethods.get(interfaceMethod); + } + for (final Method targetMethod : target.getClass().getMethods()) { + if (isCloseTo(interfaceMethod, targetMethod)) { + mappingOfWrapMethods.put(interfaceMethod, targetMethod); + return targetMethod; + } + } + throw new NoSuchMethodException(String.format("%s.%s(%s) method not found!", + getJavaClassName(target.getClass()), + getInterfaceMethodName(interfaceMethod), + StringUtils.join(getJavaClassNameArray(interfaceMethod.getParameterTypes()), ",") + )); + } + + } + + /** + * 构造一个接口的实现傀儡类,用接口去调用目标类 + * + * @param interfaceClass 目标接口 + * @param target 傀儡类实例 + * @param 目标接口类型 + * @return 被目标接口操纵的傀儡对象实例 + */ + public static T puppet(final Class interfaceClass, + final Object target) { + return (T) Proxy.newProxyInstance( + interfaceClass.getClassLoader(), + new Class[]{interfaceClass}, + new WrapInvocationHandler() { + + @Override + public Object invoke(Object proxy, Method interfaceMethod, Object[] args) throws Throwable { + return getTargetMethod(interfaceMethod, target).invoke(target, args); + } + + } + ); + } + + + public interface MethodInterceptor { + Object invoke(MethodInvocation methodInvocation) throws Throwable; + } + + public interface MethodInvocation { + Method getMethod(); + + Object[] getArguments(); + + Object proceed() throws Throwable; + + Object getThis(); + + AccessibleObject getStaticPart(); + } + + /** + * 拦截目标类的方法 + * + * @param interfaceClassInTargetClassLoader 目标接口 + * @param targetClassLoader 目标对象所在ClassLoader + * @param target 目标对象实例 + * @param interceptor 拦截器 + * @return 带拦截器的目标对象实例 + */ + public static Object intercept(final Class interfaceClassInTargetClassLoader, + final ClassLoader targetClassLoader, + final Object target, + final MethodInterceptor interceptor) { + return Proxy.newProxyInstance( + targetClassLoader, + new Class[]{interfaceClassInTargetClassLoader}, + new InvocationHandler() { + @Override + public Object invoke(Object proxy, final Method method, final Object[] args) throws Throwable { + return interceptor.invoke(new MethodInvocation() { + @Override + public Method getMethod() { + return method; + } + + @Override + public Object[] getArguments() { + return args; + } + + @Override + public Object proceed() throws Throwable { + return method.invoke(target, args); + } + + @Override + public Object getThis() { + return target; + } + + @Override + public AccessibleObject getStaticPart() { + return method; + } + }); + } + } + ); + } + +} diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.java deleted file mode 100755 index 62335d8a..00000000 --- a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.alibaba.jvm.sandbox.module.debug.util; - -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * SimpleDateFormat Holder - * - * @author oldmanpushcart@gmail.com - */ -public class SimpleDateFormatHolder extends ThreadLocal { - - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - } - - private static final SimpleDateFormatHolder instance = new SimpleDateFormatHolder(); - - private SimpleDateFormatHolder() { - // - } - - public static SimpleDateFormatHolder getInstance() { - return instance; - } - - /** - * 格式化日期 - * - * @param date 日期 - * @return 格式化后字符串 - */ - public String format(Date date) { - return getInstance().get().format(date); - } - - - /** - * 格式化日期 - * - * @param gmt gmt - * @return 格式化后字符串 - */ - public String format(long gmt) { - return getInstance().get().format(new Date(gmt)); - } - -} diff --git a/sandbox-mgr-module/pom.xml b/sandbox-mgr-module/pom.xml index ba77aa62..7bf4238b 100755 --- a/sandbox-mgr-module/pom.xml +++ b/sandbox-mgr-module/pom.xml @@ -47,12 +47,6 @@ com.alibaba.jvm.sandbox sandbox-api provided - - - javax.servlet - javax.servlet-api - - org.slf4j diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java index 5920bfa5..f7a411c5 100644 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java @@ -18,7 +18,7 @@ import java.lang.reflect.Method; @MetaInfServices(Module.class) -@Information(id = "control", version = "0.0.2", author = "luanjia@taobao.com") +@Information(id = "sandbox-control", version = "0.0.2", author = "luanjia@taobao.com") public class ControlModule implements Module { private final Logger logger = LoggerFactory.getLogger(getClass()); diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java index 2ccb6495..af7abffa 100755 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java @@ -17,7 +17,7 @@ * @author luanjia@taobao.com */ @MetaInfServices(Module.class) -@Information(id = "info", version = "0.0.4", author = "luanjia@taobao.com") +@Information(id = "sandbox-info", version = "0.0.4", author = "luanjia@taobao.com") public class InfoModule implements Module { @Resource diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java index 068dd730..c3cecee7 100755 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java @@ -29,7 +29,7 @@ * @author luanjia@taobao.com */ @MetaInfServices(Module.class) -@Information(id = "module-mgr", author = "luanjia@taobao.com", version = "0.0.2") +@Information(id = "sandbox-module-mgr", author = "luanjia@taobao.com", version = "0.0.2") public class ModuleMgrModule implements Module { private final Logger logger = LoggerFactory.getLogger(getClass()); diff --git a/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java b/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java index e7d0b01e..a8e2ddc2 100755 --- a/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java +++ b/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java @@ -19,6 +19,13 @@ */ public class Spy { + /** + * 控制Spy是否在发生异常时主动对外抛出 + * T:主动对外抛出,会中断方法 + * F:不对外抛出,只将异常信息打印出来 + */ + public static volatile boolean isSpyThrowException = false; + private static final Class SPY_RET_CLASS = Spy.Ret.class; private static final Map namespaceMethodHookMap @@ -85,6 +92,15 @@ public static void clean(final String namespace) { } + + private static void handleException(Throwable cause) throws Throwable { + if (isSpyThrowException) { + throw cause; + } else { + cause.printStackTrace(); + } + } + private static final SelfCallBarrier selfCallBarrier = new SelfCallBarrier(); public static void spyMethodOnCallBefore(final int lineNumber, @@ -93,24 +109,52 @@ public static void spyMethodOnCallBefore(final int lineNumber, final String desc, final String namespace, final int listenerId) throws Throwable { - namespaceMethodHookMap.get(namespace).ON_CALL_BEFORE_METHOD.invoke(null, listenerId, lineNumber, owner, name, desc); + try { + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null != hook) { + hook.ON_CALL_BEFORE_METHOD.invoke(null, listenerId, lineNumber, owner, name, desc); + } + } catch (Throwable cause) { + handleException(cause); + } } public static void spyMethodOnCallReturn(final String namespace, final int listenerId) throws Throwable { - namespaceMethodHookMap.get(namespace).ON_CALL_RETURN_METHOD.invoke(null, listenerId); + try { + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null != hook) { + hook.ON_CALL_RETURN_METHOD.invoke(null, listenerId); + } + } catch (Throwable cause) { + handleException(cause); + } } public static void spyMethodOnCallThrows(final String throwException, final String namespace, final int listenerId) throws Throwable { - namespaceMethodHookMap.get(namespace).ON_CALL_THROWS_METHOD.invoke(null, listenerId, throwException); + try { + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null != hook) { + hook.ON_CALL_THROWS_METHOD.invoke(null, listenerId, throwException); + } + } catch (Throwable cause) { + handleException(cause); + } } public static void spyMethodOnLine(final int lineNumber, final String namespace, final int listenerId) throws Throwable { - namespaceMethodHookMap.get(namespace).ON_LINE_METHOD.invoke(null, listenerId, lineNumber); + try { + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null != hook) { + hook.ON_LINE_METHOD.invoke(null, listenerId, lineNumber); + } + } catch (Throwable cause) { + handleException(cause); + } } public static Ret spyMethodOnBefore(final Object[] argumentArray, @@ -127,8 +171,15 @@ public static Ret spyMethodOnBefore(final Object[] argumentArray, } final SelfCallBarrier.Node node = selfCallBarrier.enter(thread); try { - return (Ret) namespaceMethodHookMap.get(namespace).ON_BEFORE_METHOD.invoke(null, + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null == hook) { + return Ret.RET_NONE; + } + return (Ret) hook.ON_BEFORE_METHOD.invoke(null, listenerId, targetClassLoaderObjectID, SPY_RET_CLASS, javaClassName, javaMethodName, javaMethodDesc, target, argumentArray); + } catch (Throwable cause) { + handleException(cause); + return Ret.RET_NONE; } finally { selfCallBarrier.exit(thread, node); } @@ -143,7 +194,14 @@ public static Ret spyMethodOnReturn(final Object object, } final SelfCallBarrier.Node node = selfCallBarrier.enter(thread); try { - return (Ret) namespaceMethodHookMap.get(namespace).ON_RETURN_METHOD.invoke(null, listenerId, SPY_RET_CLASS, object); + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null == hook) { + return Ret.RET_NONE; + } + return (Ret) hook.ON_RETURN_METHOD.invoke(null, listenerId, SPY_RET_CLASS, object); + } catch (Throwable cause) { + handleException(cause); + return Ret.RET_NONE; } finally { selfCallBarrier.exit(thread, node); } @@ -158,7 +216,14 @@ public static Ret spyMethodOnThrows(final Throwable throwable, } final SelfCallBarrier.Node node = selfCallBarrier.enter(thread); try { - return (Ret) namespaceMethodHookMap.get(namespace).ON_THROWS_METHOD.invoke(null, listenerId, SPY_RET_CLASS, throwable); + final MethodHook hook = namespaceMethodHookMap.get(namespace); + if (null == hook) { + return Ret.RET_NONE; + } + return (Ret) hook.ON_THROWS_METHOD.invoke(null, listenerId, SPY_RET_CLASS, throwable); + } catch (Throwable cause) { + handleException(cause); + return Ret.RET_NONE; } finally { selfCallBarrier.exit(thread, node); } @@ -317,6 +382,13 @@ public MethodHook(final Method on_before_method, final Method on_call_before_method, final Method on_call_return_method, final Method on_call_throws_method) { + assert null != on_before_method; + assert null != on_return_method; + assert null != on_throws_method; + assert null != on_line_method; + assert null != on_call_before_method; + assert null != on_call_return_method; + assert null != on_call_throws_method; this.ON_BEFORE_METHOD = on_before_method; this.ON_RETURN_METHOD = on_return_method; this.ON_THROWS_METHOD = on_throws_method; From 35520fdf8fabf109ad730b7b411fca1480f84c8d Mon Sep 17 00:00:00 2001 From: luanjia Date: Sun, 30 Dec 2018 21:37:00 +0800 Subject: [PATCH 06/30] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...alculatorTestCaseImplByAdviceListener.java | 709 +++++++++++++++++- ...CalculatorTestCaseImplByEventListener.java | 683 ++++++++++++++++- .../InterruptedAdviceAdapterListener.java | 3 + .../listener/LineNumTracingEventListener.java | 61 ++ .../listener/TracingAdviceListener.java | 16 +- .../core/enhance/target/Calculator.java | 4 +- .../qatest/core/util/CalculatorHelper.java | 86 +++ 7 files changed, 1525 insertions(+), 37 deletions(-) create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/LineNumTracingEventListener.java diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java index 4312e805..a611fcb6 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java @@ -1,15 +1,48 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; -import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingAdviceListener.generateTracing; +import com.alibaba.jvm.sandbox.api.event.BeforeEvent; +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.listener.ext.Advice; +import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingAdviceListener; +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; +import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; +import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; +import org.junit.Test; + +import static com.alibaba.jvm.sandbox.api.ProcessController.returnImmediately; +import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately; +import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.ERROR_EXCEPTION_MESSAGE; +import static com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.TestCase.ADD$EXCEPTION; +import static com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.TestCase.SUM$EXCEPTION; +import static com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * AdviceListener相关测试用例 */ public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCase { + @Test @Override public void cal$sum$around() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener() + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } @Override @@ -17,59 +50,305 @@ public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCa } + @Test @Override public void cal$sum$call() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(), + CALL_BEFORE, CALL_RETURN,CALL_THROWS + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "CALL-BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "CALL-RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "CALL-BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "CALL-RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$before$changeParameters() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + advice.changeParameter(0, new int[]{40, 60}); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$before$returnImmediately() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener() { + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + returnImmediately(100); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$before$throwsImmediately() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$return$changeParameters() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterReturning(Advice advice) throws Throwable{ + super.afterReturning(advice); + advice.changeParameter(0, new int[]{40, 60}); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$return$returnImmediately() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterReturning(Advice advice) throws Throwable{ + super.afterReturning(advice); + returnImmediately(100); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$return$throwsImmediately() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterReturning(Advice advice) throws Throwable { + super.afterReturning(advice); + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$throws$changeParameters() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterThrowing(Advice advice) throws Throwable{ + super.afterThrowing(advice); + advice.changeParameter(0, new int[]{40, 60}); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, SUM$EXCEPTION), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$throws$returnImmediately() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterThrowing(Advice advice) throws Throwable{ + super.afterThrowing(advice); + returnImmediately(100); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass, SUM$EXCEPTION), 10, 20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum$throws$throwsImmediately() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterThrowing(Advice advice) throws Throwable{ + super.afterThrowing(advice); + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, SUM$EXCEPTION), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum_add$around() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener() + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } @Override @@ -77,59 +356,353 @@ public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCa } + @Test @Override public void cal$sum_add$call() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(), + CALL_BEFORE, CALL_RETURN,CALL_THROWS + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "CALL-BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "CALL-RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "CALL-BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "CALL-RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE|96|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum_add$before$changeParameters_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + advice.changeParameter(0, 40); + advice.changeParameter(1, 60); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum_add$before$returnImmediately_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + returnImmediately(100); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } @Override public void cal$sum_add$before$throwsImmediately_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } @Override public void cal$sum_add$return$changeParameters_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterReturning(Advice advice) throws Throwable { + super.afterReturning(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + advice.changeParameter(0, 40); + advice.changeParameter(0, 60); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum_add$return$returnImmediately_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterReturning(Advice advice) throws Throwable { + super.afterReturning(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + returnImmediately(100); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum_add$return$throwsImmediately_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterReturning(Advice advice) throws Throwable { + super.afterReturning(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$sum_add$throws$changeParameters_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterThrowing(Advice advice) throws Throwable { + super.afterThrowing(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + advice.changeParameter(0, 40); + advice.changeParameter(1, 60); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, ADD$EXCEPTION), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } @Override public void cal$sum_add$throws$returnImmediately_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterThrowing(Advice advice) throws Throwable { + super.afterThrowing(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + returnImmediately(100); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } @Override public void cal$sum_add$throws$throwsImmediately_at_add() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingAdviceListener(){ + @Override + protected void afterThrowing(Advice advice) throws Throwable { + super.afterThrowing(advice); + if (advice.getBehavior().getName().equalsIgnoreCase("add")){ + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, ADD$EXCEPTION), 10,20); + assertTrue(false); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.add(int,int)|FALSE", + "THROWING|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.sum(int[])|TRUE" + ); } + @Test @Override public void cal$pow$around() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_POW_FILTER, + listener = new TracingAdviceListener() + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(25, pow(newInstance(calculatorClass), 5,2)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|TRUE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|TRUE" + ); } @Override @@ -137,14 +710,53 @@ public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCa } + @Test @Override public void cal$pow$call() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_POW_FILTER, + listener = new TracingAdviceListener(), + CALL_BEFORE, CALL_RETURN, CALL_THROWS + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(25, pow(newInstance(calculatorClass), 5,2)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|TRUE", + "CALL-BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|TRUE|115|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "CALL-BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE|115|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)", + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "CALL-RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE|115|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|FALSE", + "CALL-RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|TRUE|115|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.pow(int,int)|TRUE" + ); } + @Test @Override public void cal$init_with_TestCase$around() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_INIT_FILTER_WITH_TEST_CASE, + listener = new TracingAdviceListener() + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.(com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase)|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.(com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase)|TRUE" + ); } @Override @@ -152,13 +764,54 @@ public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCa } + @Test @Override public void cal$init_with_TestCase$call() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_INIT_FILTER_WITH_TEST_CASE, + listener = new TracingAdviceListener(), + CALL_BEFORE, CALL_RETURN, CALL_THROWS + ) + ).loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.(com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase)|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.(com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase)|TRUE" + ); } + @Test @Override public void cal$init_with_TestCase$before$changeParameters() throws Throwable { - + final TracingAdviceListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + new JvmHelper.Transformer( + CALCULATOR_INIT_FILTER_WITH_TEST_CASE, + listener = new TracingAdviceListener(){ + @Override + protected void before(Advice advice) throws Throwable { + super.before(advice); + advice.changeParameter(0, Calculator.TestCase.SUM$EXCEPTION); + } + } + ) + ).loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + }catch (RuntimeException e){ + assertEquals(ERROR_EXCEPTION_MESSAGE, e.getMessage()); + } + listener.assertTracing( + "BEFORE|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.(com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase)|TRUE", + "RETURN|com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.(com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase)|TRUE" + ); } } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java index 802dbf60..7ffa7e07 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByEventListener.java @@ -1,16 +1,19 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance; -import com.alibaba.jvm.sandbox.api.ProcessController; +import com.alibaba.jvm.sandbox.api.event.BeforeEvent; import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.LineNumTracingEventListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; -import com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper; import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; -import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import static com.alibaba.jvm.sandbox.api.ProcessController.returnImmediately; +import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately; import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; +import static com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.ERROR_EXCEPTION_MESSAGE; +import static com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator.TestCase.*; import static com.alibaba.jvm.sandbox.qatest.core.util.CalculatorHelper.*; import static org.junit.Assert.assertEquals; @@ -39,34 +42,166 @@ public class CalculatorTestCaseImplByEventListener implements ICalculatorTestCas } + @Test @Override public void cal$sum$line() throws Throwable { + final LineNumTracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new LineNumTracingEventListener(), + LINE + ) + .loadClass(CALCULATOR_CLASS_NAME); + + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertLIneTracing( + 91, + 94, + 95, + 96, + 95, + 96, + 95, + 98 + ); } + @Test @Override public void cal$sum$call() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(), + CALL_BEFORE, CALL_RETURN, CALL_THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + CALL_BEFORE, + CALL_RETURN, + CALL_BEFORE, + CALL_RETURN + ); + } + @Test @Override public void cal$sum$before$changeParameters() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + ((int[]) ((BeforeEvent) event).argumentArray[0])[0]=40; + ((int[]) ((BeforeEvent) event).argumentArray[0])[1]=60; + } + }, + BEFORE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE + ); } + @Test @Override public void cal$sum$before$returnImmediately() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + returnImmediately(100); + } + }, + BEFORE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE + ); } + @Test @Override public void cal$sum$before$throwsImmediately() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + }, + THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, SUM$EXCEPTION), 10,20); + }catch (Throwable e){ + assertEquals(ERROR_EXCEPTION_MESSAGE, e.getMessage()); + } + listener.assertEventTracing( + THROWS + ); } + @Test @Override public void cal$sum$return$changeParameters() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + returnImmediately(100); + } + }, + RETURN + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + RETURN + ); } @Test @@ -95,14 +230,60 @@ public void onEvent(Event event) throws Throwable { ); } + @Test @Override public void cal$sum$return$throwsImmediately() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + }, + RETURN + ) + .loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertEventTracing( + RETURN + ); } + @Test @Override public void cal$sum$throws$changeParameters() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + returnImmediately(100); + } + }, + THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass, SUM$EXCEPTION), 10,20)); + listener.assertEventTracing( + THROWS + ); } @Override @@ -110,103 +291,599 @@ public void onEvent(Event event) throws Throwable { } + @Test @Override public void cal$sum$throws$throwsImmediately() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + }, + THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, SUM$EXCEPTION), 10,20); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertEventTracing( + THROWS + ); } + @Test @Override public void cal$sum_add$around() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + BEFORE, + RETURN, + RETURN + ); + } + @Test @Override public void cal$sum_add$line() throws Throwable { + final LineNumTracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new LineNumTracingEventListener(), + LINE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertLIneTracing( + 91, + 94, + 95, + 96, + 78, + 81, + 95, + 96, + 78, + 81, + 95, + 98 + ); } + @Test @Override public void cal$sum_add$call() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(), + CALL_BEFORE, CALL_RETURN, CALL_THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + CALL_BEFORE, + CALL_RETURN, + CALL_BEFORE, + CALL_RETURN + ); } + @Test @Override public void cal$sum_add$before$changeParameters_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equalsIgnoreCase("add")){ + beforeEvent.argumentArray[0]=20; + } + } + }, + BEFORE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(40, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE, + BEFORE, + BEFORE + ); } + @Test @Override public void cal$sum_add$before$returnImmediately_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equalsIgnoreCase("add")){ + returnImmediately(100); + } + } + }, + BEFORE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE, + BEFORE, + BEFORE + ); } + @Test @Override public void cal$sum_add$before$throwsImmediately_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equalsIgnoreCase("add")){ + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + }, + BEFORE + ) + .loadClass(CALCULATOR_CLASS_NAME); + try{ + sum(newInstance(calculatorClass), 10,20); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + listener.assertEventTracing( + BEFORE, + BEFORE + ); } + @Test @Override public void cal$sum_add$return$changeParameters_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (IsSpecalMethodEnvet(event, "add")){ + returnImmediately(100); + } + } + }, + BEFORE,RETURN + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + assertEquals(true, stack.isEmpty()); + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + BEFORE, + RETURN, + RETURN + ); } + @Test @Override public void cal$sum_add$return$returnImmediately_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (IsSpecalMethodEnvet(event, "add")){ + returnImmediately(100); + } + } + }, + BEFORE,RETURN + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass), 10,20)); + assertEquals(true, stack.isEmpty()); + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + BEFORE, + RETURN, + RETURN + ); } + @Test @Override public void cal$sum_add$return$throwsImmediately_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (IsSpecalMethodEnvet(event, "add")){ + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + }, + BEFORE,RETURN,THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass), 10,20); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + + assertEquals(true, stack.isEmpty()); + listener.assertEventTracing( + BEFORE, + BEFORE, + RETURN, + THROWS + ); } + @Test @Override public void cal$sum_add$throws$changeParameters_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (IsSpecalMethodEnvet(event, "add")){ + ((BeforeEvent)stack.peek()).argumentArray[0] = 100; + } + } + }, + BEFORE,RETURN,THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + try { + sum(newInstance(calculatorClass, ADD$EXCEPTION), 10,20); + }catch (RuntimeException throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + + assertEquals(true, stack.isEmpty()); + listener.assertEventTracing( + BEFORE, + BEFORE, + THROWS, + THROWS + ); } + @Test @Override public void cal$sum_add$throws$returnImmediately_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (IsSpecalMethodEnvet(event, "add")){ + returnImmediately(100); + } + } + }, + BEFORE,RETURN,THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(100, sum(newInstance(calculatorClass, ADD$EXCEPTION), 10,20)); + assertEquals(true, stack.isEmpty()); + listener.assertEventTracing( + BEFORE, + BEFORE, + THROWS, + BEFORE, + THROWS, + RETURN + ); } + @Test @Override public void cal$sum_add$throws$throwsImmediately_at_add() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_SUM_and_ADD_FILTER, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (IsSpecalMethodEnvet(event, "add")){ + throwsImmediately(new Throwable(ERROR_EXCEPTION_MESSAGE)); + } + } + }, + BEFORE,RETURN,THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + + try { + sum(newInstance(calculatorClass, ADD$EXCEPTION), 10,20); + }catch (Throwable throwable){ + assertEquals(ERROR_EXCEPTION_MESSAGE, throwable.getMessage()); + } + assertEquals(true, stack.isEmpty()); + listener.assertEventTracing( + BEFORE, + BEFORE, + THROWS, + THROWS + ); } + @Test @Override public void cal$pow$around() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_POW_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(25, pow(newInstance(calculatorClass), 5,2)); + listener.assertEventTracing( + BEFORE, + BEFORE, + BEFORE, + RETURN, + RETURN, + RETURN + ); } + @Test @Override public void cal$pow$line() throws Throwable { + final LineNumTracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_POW_FILTER, + listener = new LineNumTracingEventListener(), + LINE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(25, pow(newInstance(calculatorClass), 5,2)); + listener.assertLIneTracing( + 109, + 115, + 109, + 115, + 109, + 110, + 113 + ); } + @Test @Override public void cal$pow$call() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_POW_FILTER, + listener = new TracingEventListener(), + CALL_BEFORE, CALL_RETURN, CALL_THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(25, pow(newInstance(calculatorClass), 5,2)); + listener.assertEventTracing( + CALL_BEFORE, + CALL_BEFORE, + CALL_RETURN, + CALL_RETURN + ); } + @Test @Override public void cal$init_with_TestCase$around() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_INIT_FILTER, + listener = new TracingEventListener(), + BEFORE, RETURN, THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertEventTracing( + BEFORE, + RETURN, + BEFORE, + RETURN + ); } + @Test @Override public void cal$init_with_TestCase$line() throws Throwable { + final LineNumTracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_INIT_FILTER, + listener = new LineNumTracingEventListener(), + LINE + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(30, sum(newInstance(calculatorClass), 10,20)); + listener.assertLIneTracing( + 64, + 65, + 68, + 57 + ); } + @Ignore @Override public void cal$init_with_TestCase$call() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_INIT_FILTER, + listener = new TracingEventListener(), + CALL_BEFORE, CALL_RETURN, CALL_THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + assertEquals(25, pow(newInstance(calculatorClass), 5,2)); + listener.assertEventTracing( + CALL_BEFORE, + CALL_RETURN + ); } + @Test @Override public void cal$init_with_TestCase$before$changeParameters() throws Throwable { + final TracingEventListener listener; + final Class calculatorClass = JvmHelper + .createJvm() + .defineClass( + Calculator.class, + CALCULATOR_INIT_FILTER_WITH_TEST_CASE, + listener = new TracingEventListener(){ + @Override + public void onEvent(Event event) throws Throwable { + super.onEvent(event); + if (event instanceof BeforeEvent){ + ((BeforeEvent) event).argumentArray[0] = Calculator.TestCase.ADD$EXCEPTION; + } + + } + }, + BEFORE, RETURN, THROWS + ) + .loadClass(CALCULATOR_CLASS_NAME); + try { + assertEquals(-1, sum(newInstance(calculatorClass), 10,20)); + }catch (RuntimeException e){ + assertEquals(ERROR_EXCEPTION_MESSAGE, e.getMessage()); + } + + listener.assertEventTracing( + BEFORE, + RETURN + ); } } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.java index ea5d0814..bacd4d87 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.java @@ -9,6 +9,9 @@ public class InterruptedAdviceAdapterListener extends AdviceAdapterListener { public InterruptedAdviceAdapterListener(AdviceListener adviceListener) { super(adviceListener); + if(adviceListener instanceof TracingAdviceListener) { + ((TracingAdviceListener) adviceListener).setEventListener(this); + } } } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/LineNumTracingEventListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/LineNumTracingEventListener.java new file mode 100644 index 00000000..0d38ab1d --- /dev/null +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/LineNumTracingEventListener.java @@ -0,0 +1,61 @@ +package com.alibaba.jvm.sandbox.qatest.core.enhance.listener; + +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.event.LineEvent; +import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; +import com.alibaba.jvm.sandbox.core.util.ObjectIDs; + +import java.util.ArrayList; +import java.util.List; + +import static org.apache.commons.lang3.ArrayUtils.getLength; +import static org.junit.Assert.assertEquals; + +public class LineNumTracingEventListener extends InterruptedEventListener { + private final List lineTracing = new ArrayList(); + + @Override + public void onEvent(Event event) throws Throwable { + if (event instanceof LineEvent){ + LineEvent lineEvent = (LineEvent) event; + lineTracing.add(((LineEvent) event).lineNumber); + } + + } + + /** + * 获取跟踪行信息 + * + * @return 跟踪信息 + */ + public List getLineTracing() { + return lineTracing; + } + + /** + * 断言跟踪行信息 + * + * @param exceptLineNums 期待的行号 + */ + public void assertLIneTracing(final Integer... exceptLineNums) { + assertEventProcessor(); + assertArrayEquals( + exceptLineNums, + getLineTracing().toArray(new Integer[]{}) + ); + } + + // 检查内核事件处理器是否正确 + private void assertEventProcessor() { + EventListenerHandlers + .getSingleton() + .checkEventProcessor(ObjectIDs.instance.identity(this)); + } + + private void assertArrayEquals(E[] exceptArray, E[] actualArray) { + assertEquals("except size not matched!", getLength(exceptArray), getLength(actualArray)); + for (int index = 0; index < exceptArray.length; index++) { + assertEquals("[" + index + "] not matched", exceptArray[index], actualArray[index]); + } + } +} diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java index 1890fb0c..8277c569 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingAdviceListener.java @@ -1,6 +1,7 @@ package com.alibaba.jvm.sandbox.qatest.core.enhance.listener; import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.listener.EventListener; import com.alibaba.jvm.sandbox.api.listener.ext.Advice; import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener; import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; @@ -59,7 +60,7 @@ public static String generateTracing(final String prefix, callLineNum, callJavaClassName, callJavaMethodName, - callParameterTypes + join(callParameterTypes, ",") ); } @@ -83,7 +84,7 @@ public static String generateTracing(final String prefix, callLineNum, callJavaClassName, callJavaMethodName, - callParameterTypes, + join(callParameterTypes, ","), callThrowJavaClassName ); } @@ -207,6 +208,13 @@ public List getTracing() { return tracing; } + private EventListener eventListener; + + TracingAdviceListener setEventListener(EventListener eventListener) { + this.eventListener = eventListener; + return this; + } + /** * 断言跟踪信息 * @@ -216,7 +224,7 @@ public void assertTracing(final String... exceptTracings) { assertEventProcessor(); assertArrayEquals( exceptTracings, - getTracing().toArray(new Event.Type[]{}) + getTracing().toArray(new String[]{}) ); } @@ -224,7 +232,7 @@ public void assertTracing(final String... exceptTracings) { private void assertEventProcessor() { EventListenerHandlers .getSingleton() - .checkEventProcessor(ObjectIDs.instance.identity(this)); + .checkEventProcessor(ObjectIDs.instance.identity(eventListener)); } private void assertArrayEquals(E[] exceptArray, E[] actualArray) { diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java index 59e026e0..a416b633 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.java @@ -110,9 +110,9 @@ public int pow(int num, int n) { if (tCase == POW$EXCEPTION$AT_LAST) { throwCalculatorException(); } - return num; + return 1; } - return n * pow(num, n - 1); + return num * pow(num, n - 1); } /** diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java index 47f2d4f2..6c6e6102 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/CalculatorHelper.java @@ -1,12 +1,19 @@ package com.alibaba.jvm.sandbox.qatest.core.util; +import com.alibaba.jvm.sandbox.api.event.BeforeEvent; +import com.alibaba.jvm.sandbox.api.event.Event; +import com.alibaba.jvm.sandbox.api.event.ReturnEvent; +import com.alibaba.jvm.sandbox.api.event.ThrowsEvent; import com.alibaba.jvm.sandbox.api.filter.Filter; import com.alibaba.jvm.sandbox.api.filter.NameRegexFilter; +import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus; import com.alibaba.jvm.sandbox.core.util.UnCaughtException; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; import java.lang.reflect.InvocationTargetException; +import java.util.Stack; +import static com.alibaba.jvm.sandbox.api.ProcessController.returnImmediately; import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.unCaughtGetClassDeclaredJavaMethod; import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.unCaughtInvokeMethod; @@ -45,6 +52,85 @@ public class CalculatorHelper { "^errorSum$" ); + /** + * 拦截pow()方法过滤器 + */ + public static final Filter CALCULATOR_POW_FILTER + = new NameRegexFilter( + "^com\\.alibaba\\.jvm.sandbox\\.qatest\\.core\\.enhance\\.target\\.Calculator$", + "^pow" + ); + + /** + * 拦截初始化方法过滤器 + */ + public static final Filter CALCULATOR_INIT_FILTER + = new NameRegexFilter( + "^com\\.alibaba\\.jvm.sandbox\\.qatest\\.core\\.enhance\\.target\\.Calculator$", + "" + ); + + public static final Filter CALCULATOR_INIT_FILTER_WITH_TEST_CASE + = new Filter() { + @Override + public boolean doClassFilter(int access, String javaClassName, String superClassTypeJavaClassName, String[] interfaceTypeJavaClassNameArray, String[] annotationTypeJavaClassNameArray) { + return javaClassName.equalsIgnoreCase("com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator"); + } + + @Override + public boolean doMethodFilter(int access, String javaMethodName, String[] parameterTypeJavaClassNameArray, String[] throwsTypeJavaClassNameArray, String[] annotationTypeJavaClassNameArray) { + if (javaMethodName.equalsIgnoreCase("")) + return (parameterTypeJavaClassNameArray.length == 1 + &¶meterTypeJavaClassNameArray[0].equalsIgnoreCase("com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator$TestCase")); + return false; + } + }; + + // 栈 + public static Stack stack = new Stack(); + + /** + * 判断是否是指定方法的Return||Throws事件 + * @param event + * @param javaMethodeName + * @return + */ + public static boolean IsSpecalMethodEnvet(Event event, String javaMethodeName){ + + if (event instanceof BeforeEvent){ + BeforeEvent beforeEvent = new BeforeEvent( + ((BeforeEvent) event).processId, + ((BeforeEvent) event).invokeId, + ((BeforeEvent) event).javaClassLoader, + ((BeforeEvent) event).javaClassName, + ((BeforeEvent) event).javaMethodName, + ((BeforeEvent) event).javaMethodDesc, + ((BeforeEvent) event).target, + ((BeforeEvent) event).argumentArray); + stack.push(beforeEvent); + } + if (event instanceof ReturnEvent){ + Event eventEnd = stack.pop(); + return isSpecalMethod(eventEnd, javaMethodeName); + } + + if (event instanceof ThrowsEvent){ + Event eventEnd = stack.pop(); + return isSpecalMethod(eventEnd, javaMethodeName); + } + return false; + } + + public static boolean isSpecalMethod(Event event, String javaMethodeName){ + if (event instanceof BeforeEvent){ + BeforeEvent beforeEvent = (BeforeEvent) event; + if (beforeEvent.javaMethodName.equalsIgnoreCase(javaMethodeName)){ + return true; + } + } + return false; + } + /** * 调用sum()方法 * From ff88409c74839bf06934e916682203fd7d51595a Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Mon, 31 Dec 2018 23:28:47 +0800 Subject: [PATCH 07/30] =?UTF-8?q?1.=20=E5=AE=8C=E5=96=84=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=202.=20=E5=AE=8C=E5=96=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=203.=20=E4=BF=AE=E5=A4=8Dsandbox.sh=E4=B8=8D?= =?UTF-8?q?=E9=80=82=E5=BA=94=E6=96=B0=E7=9A=84mgr=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/sandbox.sh | 22 +++++++++---------- .../core/server/jetty/JettyCoreServer.java | 2 +- ...alculatorTestCaseImplByAdviceListener.java | 8 +++++++ 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/bin/sandbox.sh b/bin/sandbox.sh index 7385e877..575d7ada 100755 --- a/bin/sandbox.sh +++ b/bin/sandbox.sh @@ -307,43 +307,43 @@ function main() { # -v show version [[ ! -z ${OP_VERSION} ]] \ - && sandbox_curl_with_exit "info/version" + && sandbox_curl_with_exit "sandbox-info/version" # -l list loaded modules [[ ! -z ${OP_MODULE_LIST} ]] \ - && sandbox_curl_with_exit "module-mgr/list" + && sandbox_curl_with_exit "sandbox-module-mgr/list" # -F force flush module [[ ! -z ${OP_MODULE_FORCE_FLUSH} ]] \ - && sandbox_curl_with_exit "module-mgr/flush" "&force=true" + && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=true" # -f flush module [[ ! -z ${OP_MODULE_FLUSH} ]] \ - && sandbox_curl_with_exit "module-mgr/flush" "&force=false" + && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=false" # -R reset sandbox [[ ! -z ${OP_MODULE_RESET} ]] \ - && sandbox_curl_with_exit "module-mgr/reset" + && sandbox_curl_with_exit "sandbox-module-mgr/reset" # -u unload module [[ ! -z ${OP_MODULE_UNLOAD} ]] \ - && sandbox_curl_with_exit "module-mgr/unload" "&action=unload&ids=${ARG_MODULE_UNLOAD}" + && sandbox_curl_with_exit "sandbox-module-mgr/unload" "&action=unload&ids=${ARG_MODULE_UNLOAD}" # -a active module [[ ! -z ${OP_MODULE_ACTIVE} ]] \ - && sandbox_curl_with_exit "module-mgr/active" "&ids=${ARG_MODULE_ACTIVE}" + && sandbox_curl_with_exit "sandbox-module-mgr/active" "&ids=${ARG_MODULE_ACTIVE}" # -A frozen module [[ ! -z ${OP_MODULE_FROZEN} ]] \ - && sandbox_curl_with_exit "module-mgr/frozen" "&ids=${ARG_MODULE_FROZEN}" + && sandbox_curl_with_exit "sandbox-module-mgr/frozen" "&ids=${ARG_MODULE_FROZEN}" # -m module detail [[ ! -z ${OP_MODULE_DETAIL} ]] \ - && sandbox_curl_with_exit "module-mgr/detail" "&id=${ARG_MODULE_DETAIL}" + && sandbox_curl_with_exit "sandbox-module-mgr/detail" "&id=${ARG_MODULE_DETAIL}" # -S shutdown [[ ! -z ${OP_SHUTDOWN} ]] \ - && sandbox_curl_with_exit "control/shutdown" + && sandbox_curl_with_exit "sandbox-control/shutdown" # -d debug if [[ ! -z ${OP_DEBUG} ]]; then @@ -352,7 +352,7 @@ function main() { fi # default - sandbox_curl "info/version" + sandbox_curl "sandbox-info/version" exit } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java index 1fe8c6ac..c65f33ae 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java @@ -176,7 +176,7 @@ private void closeLogback() { try { ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); } catch (Throwable cause) { - // + cause.printStackTrace(); } } diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java index a611fcb6..592a958c 100644 --- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java +++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCaseImplByAdviceListener.java @@ -8,8 +8,11 @@ import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener; import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator; import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper; +import org.junit.BeforeClass; import org.junit.Test; +import java.com.alibaba.jvm.sandbox.spy.Spy; + import static com.alibaba.jvm.sandbox.api.ProcessController.returnImmediately; import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately; import static com.alibaba.jvm.sandbox.api.event.Event.Type.*; @@ -25,6 +28,11 @@ */ public class CalculatorTestCaseImplByAdviceListener implements ICalculatorTestCase { + @BeforeClass + public static void initSpy() { + Spy.isSpyThrowException = true; + } + @Test @Override public void cal$sum$around() throws Throwable { From b2256d2a88889c6a45c4ca94cd94411b86d84a39 Mon Sep 17 00:00:00 2001 From: luanjia Date: Wed, 2 Jan 2019 12:43:15 +0800 Subject: [PATCH 08/30] ignore target --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 928b1847..ae9d54f8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,7 @@ sandbox-common-api/target/ sandbox-core/target/ sandbox-provider-api/target/ sandbox-spy/target/ +sandbox-agent/target/ +sandbox-debug-module/target/ +sandbox-mgr-module/target/ +sandbox-mgr-provider/target/ From b23f7ee36a6fe1d923483777951ece406248cb7b Mon Sep 17 00:00:00 2001 From: luanjia Date: Wed, 2 Jan 2019 12:51:19 +0800 Subject: [PATCH 09/30] =?UTF-8?q?=E4=BF=AE=E6=94=B9shell=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/sandbox.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/sandbox.sh b/bin/sandbox.sh index 7385e877..e0856ac3 100755 --- a/bin/sandbox.sh +++ b/bin/sandbox.sh @@ -307,43 +307,43 @@ function main() { # -v show version [[ ! -z ${OP_VERSION} ]] \ - && sandbox_curl_with_exit "info/version" + && sandbox_curl_with_exit "sandbox-info/version" # -l list loaded modules [[ ! -z ${OP_MODULE_LIST} ]] \ - && sandbox_curl_with_exit "module-mgr/list" + && sandbox_curl_with_exit "sandbox-module-mgr/list" # -F force flush module [[ ! -z ${OP_MODULE_FORCE_FLUSH} ]] \ - && sandbox_curl_with_exit "module-mgr/flush" "&force=true" + && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=true" # -f flush module [[ ! -z ${OP_MODULE_FLUSH} ]] \ - && sandbox_curl_with_exit "module-mgr/flush" "&force=false" + && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=false" # -R reset sandbox [[ ! -z ${OP_MODULE_RESET} ]] \ - && sandbox_curl_with_exit "module-mgr/reset" + && sandbox_curl_with_exit "sandbox-module-mgr/reset" # -u unload module [[ ! -z ${OP_MODULE_UNLOAD} ]] \ - && sandbox_curl_with_exit "module-mgr/unload" "&action=unload&ids=${ARG_MODULE_UNLOAD}" + && sandbox_curl_with_exit "sandbox-module-mgr/unload" "&action=unload&ids=${ARG_MODULE_UNLOAD}" # -a active module [[ ! -z ${OP_MODULE_ACTIVE} ]] \ - && sandbox_curl_with_exit "module-mgr/active" "&ids=${ARG_MODULE_ACTIVE}" + && sandbox_curl_with_exit "sandbox-module-mgr/active" "&ids=${ARG_MODULE_ACTIVE}" # -A frozen module [[ ! -z ${OP_MODULE_FROZEN} ]] \ - && sandbox_curl_with_exit "module-mgr/frozen" "&ids=${ARG_MODULE_FROZEN}" + && sandbox_curl_with_exit "sandbox-module-mgr/frozen" "&ids=${ARG_MODULE_FROZEN}" # -m module detail [[ ! -z ${OP_MODULE_DETAIL} ]] \ - && sandbox_curl_with_exit "module-mgr/detail" "&id=${ARG_MODULE_DETAIL}" + && sandbox_curl_with_exit "sandbox-module-mgr/detail" "&id=${ARG_MODULE_DETAIL}" # -S shutdown [[ ! -z ${OP_SHUTDOWN} ]] \ - && sandbox_curl_with_exit "control/shutdown" + && sandbox_curl_with_exit "sandbox-control/shutdown" # -d debug if [[ ! -z ${OP_DEBUG} ]]; then From 86e6e33066959271054466167266a1ee934d36e9 Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Fri, 4 Jan 2019 22:06:57 +0800 Subject: [PATCH 10/30] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alibaba/jvm/sandbox/api/event/BeforeEvent.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/event/BeforeEvent.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/event/BeforeEvent.java index e79f68f4..4415d503 100755 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/event/BeforeEvent.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/event/BeforeEvent.java @@ -43,7 +43,7 @@ public class BeforeEvent extends InvokeEvent { * @param processId 调用过程ID * @param invokeId 调用ID * @param javaClassLoader 触发调用事件的ClassLoader - * @param javaClassName 触发调用事件的类名称java.lang.String + * @param javaClassName 触发调用事件的类名称 * @param javaMethodName 触发调用事件的方法名称 * @param javaMethodDesc 触发调用事件的方法签名 * @param target 触发调用事件的对象(静态方法为null) @@ -51,9 +51,12 @@ public class BeforeEvent extends InvokeEvent { */ public BeforeEvent(final int processId, final int invokeId, - final ClassLoader javaClassLoader, String javaClassName, - final String javaMethodName, String javaMethodDesc, - final Object target, Object[] argumentArray) { + final ClassLoader javaClassLoader, + final String javaClassName, + final String javaMethodName, + final String javaMethodDesc, + final Object target, + final Object[] argumentArray) { super(processId, invokeId, Type.BEFORE); this.javaClassLoader = javaClassLoader; this.javaClassName = javaClassName; From c64dde410cb027527bfd2518489404599b9cd3f4 Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Sat, 5 Jan 2019 01:51:52 +0800 Subject: [PATCH 11/30] =?UTF-8?q?=E5=BC=95=E5=85=A5ModuleJarLifeCycleProvi?= =?UTF-8?q?der=E6=8E=A5=E5=8F=A3=E8=A7=A3=E5=86=B3=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/spi/ModuleJarLifeCycleProvider.java | 16 +++++ .../core/classloader/ModuleClassLoader.java | 17 ++++- .../enhance/weaver/EventListenerHandlers.java | 2 +- .../core/enhance/weaver/EventProcessor.java | 15 ++--- .../core/manager/impl/ModuleJarLoader.java | 4 ++ .../module/debug/OnJarUnLoadCompleted.java | 25 +++++++ .../jvm/sandbox/module/mgr/ControlModule.java | 67 +++++++++++-------- .../module/mgr/OnJarUnLoadCompleted.java | 25 +++++++ 8 files changed, 129 insertions(+), 42 deletions(-) create mode 100644 sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java create mode 100644 sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/OnJarUnLoadCompleted.java create mode 100644 sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/OnJarUnLoadCompleted.java diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java new file mode 100644 index 00000000..1d14985b --- /dev/null +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java @@ -0,0 +1,16 @@ +package com.alibaba.jvm.sandbox.api.spi; + +/** + * 模块Jar包生命周期管理 + * + * @author oldmanpushcart@gmail.com + * @since {@code sandbox-api:1.2.0} + */ +public interface ModuleJarLifeCycleProvider { + + /** + * 模块Jar文件卸载完所有模块后,正式卸载Jar文件之前之后调用! + */ + void onJarUnLoadCompleted(); + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java index 77cac513..54a06db0 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java @@ -1,6 +1,7 @@ package com.alibaba.jvm.sandbox.core.classloader; import com.alibaba.jvm.sandbox.api.annotation.Stealth; +import com.alibaba.jvm.sandbox.api.spi.ModuleJarLifeCycleProvider; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -17,9 +18,11 @@ import java.security.ProtectionDomain; import java.util.Collection; import java.util.LinkedHashSet; +import java.util.ServiceLoader; import java.util.Set; import java.util.jar.JarFile; +import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName; import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.*; /** @@ -104,9 +107,21 @@ private void cleanProtectionDomainWhichCameFromModuleClassLoader() { } + private void onJarUnLoadCompleted() { + try { + final ServiceLoader moduleJarLifeCycleProviders + = ServiceLoader.load(ModuleJarLifeCycleProvider.class, this); + for (ModuleJarLifeCycleProvider provider : moduleJarLifeCycleProviders) { + logger.info("unloading module-jar: onJarUnLoadCompleted() loader={};provider={};", this, getJavaClassName(provider.getClass())); + provider.onJarUnLoadCompleted(); + } + } catch (Throwable cause) { + logger.warn("unloading module-jar: onJarUnLoadCompleted() occur error! loader={};", this, cause); + } + } public void closeIfPossible() { - + onJarUnLoadCompleted(); try { // 如果是JDK7+的版本, URLClassLoader实现了Closeable接口,直接调用即可 diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java index b3c90ae7..f9c90271 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java @@ -73,7 +73,7 @@ public void frozen(int listenerId) { processor.listener ); - processor.clean(); + // processor.clean(); } /** diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java index 082723f4..7e0c0160 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java @@ -49,12 +49,10 @@ int popInvokeId() { stack.deep(), listenerId ); - // 这里注释掉,避免频繁删除和创建ThreadLocal的开销 - // 采用frozen的方式来释放 -// if (stack.isEmpty()) { -// processRef.remove(); -// logger.debug("clean TLS: event-processor, listener={};", listenerId); -// } + if (stack.isEmpty()) { + processRef.remove(); + logger.debug("clean TLS: event-processor, listener={};", listenerId); + } return invokeId; } @@ -127,11 +125,6 @@ protected Process initialValue() { : listener; } - void clean() { - processRef.remove(); - logger.debug("clean TLS: event-processor, listener={};", listenerId); - } - /** * 校验器,用于校验事件处理器状态是否正确 diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java index 20dacfa2..e2bb7f74 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java @@ -2,6 +2,7 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; +import com.alibaba.jvm.sandbox.api.spi.ModuleJarLifeCycleProvider; import com.alibaba.jvm.sandbox.core.classloader.ModuleClassLoader; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -112,6 +113,9 @@ void load(final ModuleJarLoadCallback mjCb, final ClassLoader preTCL = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(moduleClassLoader); + // 模块Jar加载前回调 + + try { final ServiceLoader moduleServiceLoader = ServiceLoader.load(Module.class, moduleClassLoader); diff --git a/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/OnJarUnLoadCompleted.java b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/OnJarUnLoadCompleted.java new file mode 100644 index 00000000..24aae83e --- /dev/null +++ b/sandbox-debug-module/src/main/java/com/alibaba/jvm/sandbox/module/debug/OnJarUnLoadCompleted.java @@ -0,0 +1,25 @@ +package com.alibaba.jvm.sandbox.module.debug; + +import ch.qos.logback.classic.LoggerContext; +import com.alibaba.jvm.sandbox.api.spi.ModuleJarLifeCycleProvider; +import org.kohsuke.MetaInfServices; +import org.slf4j.LoggerFactory; + +@MetaInfServices(ModuleJarLifeCycleProvider.class) +public class OnJarUnLoadCompleted implements ModuleJarLifeCycleProvider { + + @Override + public void onJarUnLoadCompleted() { + closeLogback(); + } + + // 关闭Logback日志框架 + private void closeLogback() { + try { + ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); + } catch (Throwable cause) { + cause.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java index f7a411c5..37dbb0d1 100644 --- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java @@ -39,16 +39,20 @@ private ClassLoader getSandboxClassLoader(final Class classOfAgentLauncher) } // 清理命名空间所对应的SandboxClassLoader - private ClassLoader cleanSandboxClassLoader(final Class classOfAgentLauncher) - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { + private ClassLoader cleanSandboxClassLoader(final Class classOfAgentLauncher) { // 清理AgentLauncher.sandboxClassLoaderMap - final ClassLoader sandboxClassLoader = (ClassLoader) MethodUtils.invokeStaticMethod( - classOfAgentLauncher, - "cleanClassLoader", - configInfo.getNamespace() - ); - logger.info("clean SandboxClassLoader from jvm-sandbox[{}] success, for shutdown.", configInfo.getNamespace()); - return sandboxClassLoader; + try { + final ClassLoader sandboxClassLoader = (ClassLoader) MethodUtils.invokeStaticMethod( + classOfAgentLauncher, + "cleanClassLoader", + configInfo.getNamespace() + ); + logger.info("clean SandboxClassLoader from jvm-sandbox[{}] success, for shutdown.", configInfo.getNamespace()); + return sandboxClassLoader; + } catch (Throwable cause) { + logger.warn("clean SandboxClassLoader from jvm-sandbox[{}] occur error for shutdown!", configInfo.getNamespace(), cause); + return null; + } } // 清理Spy中对Method的引用 @@ -83,29 +87,36 @@ private void unloadModules() throws ModuleException { } // 卸载自己 - private void unloadSelf() throws ModuleException { + private void unloadSelf() { // 卸载自己 - final String self = getClass().getAnnotation(Information.class).id(); - moduleManager.unload(self); - logger.info("unload module={} from jvm-sandbox[{}] success, for shutdown.", self, configInfo.getNamespace()); + try { + final String self = getClass().getAnnotation(Information.class).id(); + moduleManager.unload(self); + } catch (Throwable cause) { + cause.printStackTrace(); + } + // logger.info("unload module={} from jvm-sandbox[{}] success, for shutdown.", self, configInfo.getNamespace()); } // 关闭HTTP服务器 - private void shutdownServer(final ClassLoader sandboxClassLoader) - throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { + private void shutdownServer(final ClassLoader sandboxClassLoader) { - if (null == sandboxClassLoader) { - logger.warn("detection an warning, target SandboxClassLoader[namespace={}] is null, shutdown server will be ignore", - configInfo.getNamespace()); - return; - } + try { + if (null == sandboxClassLoader) { + logger.warn("detection an warning, target SandboxClassLoader[namespace={}] is null, shutdown server will be ignore", + configInfo.getNamespace()); + return; + } - final Class classOfCoreServer = sandboxClassLoader - .loadClass("com.alibaba.jvm.sandbox.core.server.ProxyCoreServer"); - final Object objectOfJettyCoreServer = classOfCoreServer.getMethod("getInstance").invoke(null); - final Method methodOfDestroy = classOfCoreServer.getMethod("destroy"); - methodOfDestroy.invoke(objectOfJettyCoreServer); - logger.info("shutdown jvm-sandbox[{}] server success for shutdown.", configInfo.getNamespace()); + final Class classOfCoreServer = sandboxClassLoader + .loadClass("com.alibaba.jvm.sandbox.core.server.ProxyCoreServer"); + final Object objectOfJettyCoreServer = classOfCoreServer.getMethod("getInstance").invoke(null); + final Method methodOfDestroy = classOfCoreServer.getMethod("destroy"); + methodOfDestroy.invoke(objectOfJettyCoreServer); + logger.info("shutdown jvm-sandbox[{}] server success for shutdown.", configInfo.getNamespace()); + } catch (Throwable cause) { + logger.warn("shutdown jvm-sandbox[{}] server occur error for shutdown!", configInfo.getNamespace(), cause); + } } // @Http("/shutdown") @@ -128,11 +139,9 @@ public void shutdown(final PrintWriter writer) throws Exception { @Override public void run() { try { - shutdownServer(getSandboxClassLoader(classOfAgentLauncher)); - unloadSelf(); cleanSandboxClassLoader(classOfAgentLauncher); - + unloadSelf(); } catch (Throwable cause) { logger.warn("shutdown jvm-sandbox[{}] failed.", configInfo.getNamespace(), cause); } diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/OnJarUnLoadCompleted.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/OnJarUnLoadCompleted.java new file mode 100644 index 00000000..dd1f50db --- /dev/null +++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/OnJarUnLoadCompleted.java @@ -0,0 +1,25 @@ +package com.alibaba.jvm.sandbox.module.mgr; + +import ch.qos.logback.classic.LoggerContext; +import com.alibaba.jvm.sandbox.api.spi.ModuleJarLifeCycleProvider; +import org.kohsuke.MetaInfServices; +import org.slf4j.LoggerFactory; + +@MetaInfServices(ModuleJarLifeCycleProvider.class) +public class OnJarUnLoadCompleted implements ModuleJarLifeCycleProvider { + + @Override + public void onJarUnLoadCompleted() { + closeLogback(); + } + + // 关闭Logback日志框架 + private void closeLogback() { + try { + ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); + } catch (Throwable cause) { + cause.printStackTrace(); + } + } + +} From bb04366079d684b8b354be14e2a7054ee40eb673 Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Sat, 5 Jan 2019 17:40:05 +0800 Subject: [PATCH 12/30] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/listener/EventListenerFactory.java | 2 + .../jvm/sandbox/api/listener/Sentry.java | 2 + .../api/listener/ThreadSafeEventListener.java | 2 + .../impl/DefaultCoreModuleManager.java | 8 +- .../core/manager/impl/ModuleJarLoader.java | 265 +++++++----------- .../core/manager/impl/ModuleLibLoader.java | 122 ++++++++ 6 files changed, 232 insertions(+), 169 deletions(-) mode change 100755 => 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java create mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.java index acd0a3e9..21fdebc6 100644 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.java @@ -5,7 +5,9 @@ * * @author luanjia@taobao.com * @since {@code sandbox-api:1.0.10} + * @deprecated */ +@Deprecated public interface EventListenerFactory { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/Sentry.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/Sentry.java index 99f5ceca..01a0aac6 100644 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/Sentry.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/Sentry.java @@ -12,7 +12,9 @@ * @param 哨点类型,一般喜欢用枚举 * @author luanjia@taobao.com * @since {@code sandbox-api:1.0.10} + * @deprecated */ +@Deprecated public class Sentry implements Attachment { /** diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.java index 966e8448..66a78994 100644 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.java @@ -10,7 +10,9 @@ * * @author luanjia@taobao.com * @since {@code sandbox-api:1.0.10} + * @deprecated */ +@Deprecated public class ThreadSafeEventListener implements EventListener { private final EventListenerFactory factory; diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java index 4c92a2a5..1e0d680a 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java @@ -532,7 +532,7 @@ public synchronized void flush(final boolean isForce) throws ModuleException { @Override public synchronized void reset() throws ModuleException { - + logger.info("resetting all loaded modules:{}", loadedModuleBOMap.keySet()); // 1. 强制卸载所有模块 @@ -546,7 +546,7 @@ public synchronized void reset() throws ModuleException { // 对模块访问权限进行校验 if (moduleLibDir.exists() && moduleLibDir.canRead()) { - new ModuleJarLoader(moduleLibDir, cfg.getLaunchMode(), sandboxClassLoader) + new ModuleLibLoader(moduleLibDir, cfg.getLaunchMode(), sandboxClassLoader) .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback()); } else { logger.warn("module-lib not access, ignore flush load this lib. path={}", moduleLibDir); @@ -662,7 +662,7 @@ private void softFlush() { // 4. 加载add for (final File jarFile : appendJarFiles) { - new ModuleJarLoader(jarFile, cfg.getLaunchMode(), sandboxClassLoader) + new ModuleLibLoader(jarFile, cfg.getLaunchMode(), sandboxClassLoader) .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback()); } } catch (Throwable cause) { @@ -716,7 +716,7 @@ private void forceFlush() throws ModuleException { if (userModuleLibDir.exists() && userModuleLibDir.canRead()) { logger.info("force-flush modules: module-lib={}", userModuleLibDir); - new ModuleJarLoader(userModuleLibDir, cfg.getLaunchMode(), sandboxClassLoader) + new ModuleLibLoader(userModuleLibDir, cfg.getLaunchMode(), sandboxClassLoader) .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback()); } else { logger.warn("force-flush modules: module-lib can not access, will be ignored. module-lib={}", userModuleLibDir); diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java old mode 100755 new mode 100644 index e2bb7f74..ebd76607 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java @@ -2,7 +2,6 @@ import com.alibaba.jvm.sandbox.api.Information; import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.api.spi.ModuleJarLifeCycleProvider; import com.alibaba.jvm.sandbox.core.classloader.ModuleClassLoader; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -10,22 +9,18 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.util.*; +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.ServiceLoader; +import java.util.Set; -import static org.apache.commons.io.FileUtils.convertFileCollectionToFileArray; -import static org.apache.commons.io.FileUtils.listFiles; - -/** - * 模块加载器 - * 用于从${module.lib}中加载所有的沙箱模块 - * Created by luanjia@taobao.com on 2016/11/17. - */ class ModuleJarLoader { private final Logger logger = LoggerFactory.getLogger(getClass()); - // 模块加载目录 - private final File moduleLibDir; + // 等待加载的模块jar文件 + private final File moduleJarFile; // 沙箱加载模式 private final Information.Mode mode; @@ -33,181 +28,121 @@ class ModuleJarLoader { // 沙箱加载ClassLoader private final ClassLoader sandboxClassLoader; - ModuleJarLoader(final File moduleLibDir, + ModuleJarLoader(final File moduleJarFile, final Information.Mode mode, final ClassLoader sandboxClassLoader) { - this.moduleLibDir = moduleLibDir; + this.moduleJarFile = moduleJarFile; this.mode = mode; this.sandboxClassLoader = sandboxClassLoader; } - private File[] toModuleJarFileArray() { - if (moduleLibDir.exists() - && moduleLibDir.isFile() - && moduleLibDir.canRead() - && StringUtils.endsWith(moduleLibDir.getName(), ".jar")) { - return new File[]{ - moduleLibDir - }; - } else { - return convertFileCollectionToFileArray( - listFiles(moduleLibDir, new String[]{"jar"}, false) - ); - } - } - /** - * 加载Module - * - * @param mjCb 模块文件加载回调 - * @param mCb 模块加载回掉 - */ - void load(final ModuleJarLoadCallback mjCb, - final ModuleLoadCallback mCb) { - - // 查找所有可加载的Jar文件 - final File[] moduleJarFileArray = toModuleJarFileArray(); - Arrays.sort(moduleJarFileArray); - - // 记录下都有那些模块文件被找到即将被加载 - if (logger.isInfoEnabled()) { - final Set moduleJarFileNameSet = new LinkedHashSet(); - for (final File moduleJarFile : moduleJarFileArray) { - moduleJarFileNameSet.add(moduleJarFile.getName()); + private boolean loadingModules(final ModuleClassLoader moduleClassLoader, + final ModuleJarLoadCallback mjCb, + final ModuleLoadCallback mCb) { + + final Set loadedModuleUniqueIds = new LinkedHashSet(); + final ServiceLoader moduleServiceLoader = ServiceLoader.load(Module.class, moduleClassLoader); + final Iterator moduleIt = moduleServiceLoader.iterator(); + while (moduleIt.hasNext()) { + + final Module module; + try { + module = moduleIt.next(); + } catch (Throwable cause) { + logger.warn("loading module instance failed: instance occur error, will be ignored. module-jar={}", moduleJarFile, cause); + continue; } - logger.info("loading module-lib={}, found {} module-jar files : {}", - moduleLibDir, - moduleJarFileArray.length, - moduleJarFileNameSet - ); - } - // 开始逐条加载 - for (final File moduleJarFile : moduleJarFileArray) { + final Class classOfModule = module.getClass(); - logger.info("loading module-jar={} from module-lib={};", moduleJarFile, moduleLibDir); + // 判断模块是否实现了@Information标记 + if (!classOfModule.isAnnotationPresent(Information.class)) { + logger.warn("loading module instance failed: not implements @Information, will be ignored. class={};module-jar={};", + classOfModule, + moduleJarFile + ); + continue; + } - // 是否有模块加载成功 - boolean hasModuleLoadedSuccessFlag = false; + final Information info = classOfModule.getAnnotation(Information.class); + final String uniqueId = info.id(); - // 已加载的模块ID集合 - final Set loadedModuleUniqueIds = new LinkedHashSet(); + // 判断模块ID是否合法 + if (StringUtils.isBlank(uniqueId)) { + logger.warn("loading module instance failed: @Information.id is missing, will be ignored. class={};module-jar={};", + classOfModule, + moduleJarFile + ); + continue; + } - // MODULE-JAR-CLASSLOADER - ModuleClassLoader moduleClassLoader = null; + // 判断模块要求的启动模式和容器的启动模式是否匹配 + if (!ArrayUtils.contains(info.mode(), mode)) { + logger.warn("loading module instance failed: launch-mode is not match module required, will be ignored. module={};launch-mode={};required-mode={};class={};module-jar={};", + uniqueId, + mode, + StringUtils.join(info.mode(), ","), + classOfModule, + moduleJarFile + ); + continue; + } try { - - if (null != mjCb) { - try { - mjCb.onLoad(moduleJarFile); - } catch (Throwable cause) { - logger.warn("loading module-jar failed: JAR-LOADER-PROVIDER denied, will be ignore. module-jar={};", moduleJarFile, cause); - continue; - } + if (null != mCb) { + mCb.onLoad(uniqueId, classOfModule, module, moduleJarFile, moduleClassLoader); } - - // 模块ClassLoader - moduleClassLoader = new ModuleClassLoader(moduleJarFile, sandboxClassLoader); - - final ClassLoader preTCL = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(moduleClassLoader); - - // 模块Jar加载前回调 - - - try { - - final ServiceLoader moduleServiceLoader = ServiceLoader.load(Module.class, moduleClassLoader); - final Iterator moduleIt = moduleServiceLoader.iterator(); - while (moduleIt.hasNext()) { - - final Module module; - try { - module = moduleIt.next(); - } catch (Throwable cause) { - logger.warn("loading module instance failed: instance occur error, will be ignored. module-jar={}", moduleJarFile, cause); - continue; - } - - final Class classOfModule = module.getClass(); - - // 判断模块是否实现了@Information标记 - if (!classOfModule.isAnnotationPresent(Information.class)) { - logger.warn("loading module instance failed: not implements @Information, will be ignored. class={};module-jar={};", - classOfModule, - moduleJarFile - ); - continue; - } - - final Information info = classOfModule.getAnnotation(Information.class); - final String uniqueId = info.id(); - - // 判断模块ID是否合法 - if (StringUtils.isBlank(uniqueId)) { - logger.warn("loading module instance failed: @Information.id is missing, will be ignored. class={};module-jar={};", - classOfModule, - moduleJarFile - ); - continue; - } - - // 判断模块要求的启动模式和容器的启动模式是否匹配 - if (!ArrayUtils.contains(info.mode(), mode)) { - logger.warn("loading module instance failed: launch-mode is not match module required, will be ignored. module={};launch-mode={};required-mode={};class={};module-jar={};", - uniqueId, - mode, - StringUtils.join(info.mode(), ","), - classOfModule, - moduleJarFile - ); - continue; - } - - try { - if (null != mCb) { - mCb.onLoad(uniqueId, classOfModule, module, moduleJarFile, moduleClassLoader); - } - } catch (Throwable cause) { - logger.warn("loading module instance failed: MODULE-LOADER-PROVIDER denied, will be ignored. module={};class={};module-jar={};", - uniqueId, - classOfModule, - moduleJarFile, - cause - ); - continue; - } - - loadedModuleUniqueIds.add(uniqueId); - hasModuleLoadedSuccessFlag = true; - - }//while - - } finally { - Thread.currentThread().setContextClassLoader(preTCL); - }// try-catch for load module from Jar - } catch (Throwable cause) { - logger.info("load module-jar occur error, will be ignored. module-jar={};", + logger.warn("loading module instance failed: MODULE-LOADER-PROVIDER denied, will be ignored. module={};class={};module-jar={};", + uniqueId, + classOfModule, moduleJarFile, cause ); + continue; + } + + loadedModuleUniqueIds.add(uniqueId); + + } + + + logger.info("loaded module-jar completed, loaded {} module in module-jar={}, modules={}", + loadedModuleUniqueIds.size(), + moduleJarFile, + loadedModuleUniqueIds + ); + return !loadedModuleUniqueIds.isEmpty(); + } + + + public void load(final ModuleJarLoadCallback mjCb, + final ModuleLoadCallback mCb) throws IOException { + + boolean hasModuleLoadedSuccessFlag = false; + ModuleClassLoader moduleClassLoader = null; + logger.info("prepare loading module-jar={};", moduleJarFile); + try { + moduleClassLoader = new ModuleClassLoader(moduleJarFile, sandboxClassLoader); + + final ClassLoader preTCL = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(moduleClassLoader); + + try { + hasModuleLoadedSuccessFlag = loadingModules(moduleClassLoader, mjCb, mCb); } finally { - if (hasModuleLoadedSuccessFlag) { - logger.info("loaded module-jar completed, loaded {} module in module-jar={}, modules={}", - loadedModuleUniqueIds.size(), - moduleJarFile, - loadedModuleUniqueIds - ); - } else { - logger.warn("loaded module-jar completed, NONE module loaded, will be close ModuleClassLoader. module-jar={};", moduleJarFile, moduleClassLoader); - if (null != moduleClassLoader) { - moduleClassLoader.closeIfPossible(); - } - } - }// try-catch for load jar from lib + Thread.currentThread().setContextClassLoader(preTCL); + } + } finally { + if (!hasModuleLoadedSuccessFlag + && null != moduleClassLoader) { + logger.warn("loading module-jar completed, but NONE module loaded, will be close ModuleClassLoader. module-jar={};", moduleJarFile); + if (null != moduleClassLoader) { + moduleClassLoader.closeIfPossible(); + } + } } } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java new file mode 100755 index 00000000..530b0743 --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java @@ -0,0 +1,122 @@ +package com.alibaba.jvm.sandbox.core.manager.impl; + +import com.alibaba.jvm.sandbox.api.Information; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.Arrays; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadFactory; + +import static java.util.concurrent.Executors.newCachedThreadPool; +import static org.apache.commons.io.FileUtils.convertFileCollectionToFileArray; +import static org.apache.commons.io.FileUtils.listFiles; +import static org.apache.commons.lang3.StringUtils.join; + +/** + * 模块目录加载器 + * 用于从${module.lib}中加载所有的沙箱模块 + * Created by luanjia@taobao.com on 2016/11/17. + */ +class ModuleLibLoader { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + // 模块加载目录 + private final File moduleLibDir; + + // 沙箱加载模式 + private final Information.Mode mode; + + // 沙箱加载ClassLoader + private final ClassLoader sandboxClassLoader; + + ModuleLibLoader(final File moduleLibDir, + final Information.Mode mode, + final ClassLoader sandboxClassLoader) { + this.moduleLibDir = moduleLibDir; + this.mode = mode; + this.sandboxClassLoader = sandboxClassLoader; + } + + private File[] toModuleJarFileArray() { + if (moduleLibDir.exists() + && moduleLibDir.isFile() + && moduleLibDir.canRead() + && StringUtils.endsWith(moduleLibDir.getName(), ".jar")) { + return new File[]{ + moduleLibDir + }; + } else { + return convertFileCollectionToFileArray( + listFiles(moduleLibDir, new String[]{"jar"}, false) + ); + } + } + + + private File[] listModuleJarFileInLib() { + final File[] moduleJarFileArray = toModuleJarFileArray(); + Arrays.sort(moduleJarFileArray); + logger.info("loading module-lib={}, found {} module-jar files : {}", + moduleLibDir, + moduleJarFileArray.length, + join(moduleJarFileArray, ",") + ); + return moduleJarFileArray; + } + + /** + * 加载Module + * + * @param mjCb 模块文件加载回调 + * @param mCb 模块加载回掉 + */ + void load(final ModuleJarLoader.ModuleJarLoadCallback mjCb, + final ModuleJarLoader.ModuleLoadCallback mCb) { + + // 开始逐条加载 + for (final File moduleJarFile : listModuleJarFileInLib()) { +// moduleJarLoaderExecutor.submit(new Runnable() { +// @Override +// public void run() { +// try { +// new ModuleJarLoader( +// moduleJarFile, +// mode, +// sandboxClassLoader +// ).load(mjCb, mCb); +// } catch (Exception cause) { +// logger.warn("loading module-jar occur error! module-jar={};", moduleJarFile, cause); +// } +// } +// }); + try { + new ModuleJarLoader( + moduleJarFile, + mode, + sandboxClassLoader + ).load(mjCb, mCb); + } catch (Exception cause) { + logger.warn("loading module-jar occur error! module-jar={};", moduleJarFile, cause); + } + } + + } + + +// private static final ExecutorService moduleJarLoaderExecutor = newCachedThreadPool(new ThreadFactory() { +// @Override +// public Thread newThread(Runnable runnable) { +// final Thread moduleJarLoaderThread = new Thread(runnable, "sandbox-module-jar-loader"); +// moduleJarLoaderThread.setDaemon(true); +// return moduleJarLoaderThread; +// } +// }); +// +// static void shutdown() { +// moduleJarLoaderExecutor.shutdown(); +// } +} From 1e73ca9dc997b865680585261e4b7f7ef68263b9 Mon Sep 17 00:00:00 2001 From: dongchenxu Date: Sun, 6 Jan 2019 14:00:51 +0800 Subject: [PATCH 13/30] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=86=85=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jvm/sandbox/agent/AgentLauncher.java | 98 +-- .../api/spi/ModuleJarLifeCycleProvider.java | 8 + .../alibaba/jvm/sandbox/core/CoreModule.java | 276 ++++++++ .../alibaba/jvm/sandbox/core/JvmSandbox.java | 61 ++ .../core/classloader/ModuleClassLoader.java | 10 +- .../jvm/sandbox/core/domain/CoreModule.java | 119 ---- .../sandbox/core/enhance/EventEnhancer.java | 55 +- .../manager/CoreLoadedClassDataSource.java | 14 +- .../core/manager/CoreModuleManager.java | 9 +- .../manager/LoadedClassLoaderListener.java | 7 + .../core/manager/ModuleLifeCycleEventBus.java | 75 -- .../core/manager/ModuleResourceManager.java | 62 -- .../core/manager/impl/DefaultConfigInfo.java | 5 +- .../impl/DefaultCoreModuleManager.java | 183 +++-- .../manager/impl/DefaultEventMonitor.java | 36 - .../impl/DefaultLoadedClassDataSource.java | 64 +- .../manager/impl/DefaultModuleController.java | 2 +- .../impl/DefaultModuleEventWatcher.java | 34 +- .../impl/DefaultModuleLifeCycleEventBus.java | 57 -- .../manager/impl/DefaultModuleManager.java | 2 +- .../impl/DefaultModuleResourceManager.java | 115 ---- .../manager/impl/DefaultProviderManager.java | 10 +- .../core/manager/impl/ModuleJarLoader.java | 35 +- .../core/manager/impl/ModuleLibLoader.java | 34 +- .../core/server/jetty/JettyCoreServer.java | 154 ++--- .../jetty/servlet/ModuleHttpServlet.java | 27 +- .../servlet/WebSocketAcceptorServlet.java | 56 +- .../jvm/sandbox/core/util/LogbackUtils.java | 60 ++ .../jvm/sandbox/core/util/SpyUtils.java | 14 +- .../core/util/matcher/ExtFilterMatcher.java | 2 +- .../listener/LineNumTracingEventListener.java | 7 +- .../listener/TracingAdviceListener.java | 8 +- .../listener/TracingEventListener.java | 8 +- .../CoreLoadedClassDataSourceTestCase.java | 74 +- .../manager/CoreModuleManagerTestCase.java | 651 ++++++------------ .../core/manager/ModuleLifeCycleAdapter.java | 30 - .../core/manager/TracingLifeCycleModule.java | 62 ++ .../mock/EmptyCoreLoadedClassDataSource.java | 54 ++ .../core/mock/EmptyInstrumentation.java | 84 +++ .../core/mock/EmptyProviderManager.java | 18 + .../sandbox/qatest/core/util/AssertUtils.java | 25 + .../qatest/core/util/CalculatorHelper.java | 2 - .../module/debug/OnJarUnLoadCompleted.java | 5 + .../jvm/sandbox/module/mgr/ControlModule.java | 114 +-- .../module/mgr/OnJarUnLoadCompleted.java | 5 + 45 files changed, 1291 insertions(+), 1540 deletions(-) create mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreModule.java create mode 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/JvmSandbox.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/domain/CoreModule.java create mode 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/LoadedClassLoaderListener.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.java delete mode 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.java delete mode 100755 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.java create mode 100644 sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/LogbackUtils.java delete mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/TracingLifeCycleModule.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/mock/EmptyCoreLoadedClassDataSource.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/mock/EmptyInstrumentation.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/mock/EmptyProviderManager.java create mode 100644 sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/AssertUtils.java diff --git a/sandbox-agent/src/main/java/com/alibaba/jvm/sandbox/agent/AgentLauncher.java b/sandbox-agent/src/main/java/com/alibaba/jvm/sandbox/agent/AgentLauncher.java index 3b331223..d14db8c5 100755 --- a/sandbox-agent/src/main/java/com/alibaba/jvm/sandbox/agent/AgentLauncher.java +++ b/sandbox-agent/src/main/java/com/alibaba/jvm/sandbox/agent/AgentLauncher.java @@ -15,39 +15,14 @@ /** * SandboxAgent启动器 *
      - *
    • 这个类的所有静态属性都必须和版本、环境无关
    • - *
    • 这个类删除、修改方法时必须考虑多版本情况下,兼容性问题!
    • + *
    • 这个类的所有静态属性都必须和版本、环境无关
    • + *
    • 这个类删除、修改方法时必须考虑多版本情况下,兼容性问题!
    • *
    * * @author luanjia@taobao.com */ public class AgentLauncher { -// // sandbox配置文件目录 -// private static final String SANDBOX_CFG_PATH -// = SANDBOX_HOME + File.separatorChar + "cfg"; -// -// // 模块目录 -// private static final String SANDBOX_MODULE_PATH -// = SANDBOX_HOME + File.separatorChar + "module"; -// -// -// // sandbox核心工程文件 -// private static final String SANDBOX_CORE_JAR_PATH -// = SANDBOX_HOME + File.separatorChar + "lib" + File.separator + "sandbox-core.jar"; -// -// // sandbox-spy工程文件 -// private static final String SANDBOX_SPY_JAR_PATH -// = SANDBOX_HOME + File.separatorChar + "lib" + File.separator + "sandbox-spy.jar"; -// -// private static final String SANDBOX_PROPERTIES_PATH -// = SANDBOX_CFG_PATH + File.separator + "sandbox.properties"; -// -// // sandbox-provider库目录 -// private static final String SANDBOX_PROVIDER_LIB_PATH -// = SANDBOX_HOME + File.separatorChar + "provider"; - - private static String getSandboxCfgPath(String sandboxHome) { return sandboxHome + File.separatorChar + "cfg"; } @@ -114,7 +89,7 @@ private static String getSandboxProviderPath(String sandboxHome) { */ public static void premain(String featureString, Instrumentation inst) { LAUNCH_MODE = LAUNCH_MODE_AGENT; - main(toFeatureMap(featureString), inst); + install(toFeatureMap(featureString), inst); } /** @@ -130,7 +105,7 @@ public static void agentmain(String featureString, Instrumentation inst) { writeAttachResult( getNamespace(featureMap), getToken(featureMap), - main(featureMap, inst) + install(featureMap, inst) ); } @@ -202,40 +177,37 @@ private static synchronized ClassLoader loadOrDefineClassLoader(final String nam } /** - * 获取当前命名空间下的ClassLoader - *

    - * 该方法将会被{@code ControlModule#shutdown}通过反射调用, - * 请保持方法声明一致 + * 删除指定命名空间下的jvm-sandbox * - * @param namespace 命名空间 - * @return 当前的ClassLoader - * @since {@code sandbox-api:1.0.15} + * @param namespace 指定命名空间 + * @throws Throwable 删除失败 */ @SuppressWarnings("unused") - public static ClassLoader getClassLoader(final String namespace) { - return sandboxClassLoaderMap.get(namespace); + public static synchronized void uninstall(final String namespace) throws Throwable { + final SandboxClassLoader sandboxClassLoader = sandboxClassLoaderMap.get(namespace); + if (null == sandboxClassLoader) { + return; + } + + // 关闭服务器 + final Class classOfProxyServer = sandboxClassLoader.loadClass(CLASS_OF_PROXY_CORE_SERVER); + classOfProxyServer.getMethod("destroy") + .invoke(classOfProxyServer.getMethod("getInstance").invoke(null)); + + // 关闭SandboxClassLoader + sandboxClassLoader.closeIfPossible(); + sandboxClassLoaderMap.remove(namespace); } /** - * 清理namespace所指定的ClassLoader - *

    - * 该方法将会被{@code ControlModule#shutdown}通过反射调用, - * 请保持方法声明一致 + * 在当前JVM安装jvm-sandbox * - * @param namespace 命名空间 - * @return 被清理的ClassLoader + * @param featureMap 启动参数配置 + * @param inst inst + * @return 服务器IP:PORT */ - @SuppressWarnings("unused") - public static synchronized ClassLoader cleanClassLoader(final String namespace) { - final SandboxClassLoader sandboxClassLoader = sandboxClassLoaderMap.remove(namespace); - if (null != sandboxClassLoader) { - sandboxClassLoader.closeIfPossible(); - } - return sandboxClassLoader; - } - - private static synchronized InetSocketAddress main(final Map featureMap, - final Instrumentation inst) { + private static synchronized InetSocketAddress install(final Map featureMap, + final Instrumentation inst) { final String namespace = getNamespace(featureMap); final String propertiesFilePath = getPropertiesFilePath(featureMap); @@ -250,29 +222,29 @@ private static synchronized InetSocketAddress main(final Map fea ))); // 构造自定义的类加载器,尽量减少Sandbox对现有工程的侵蚀 - final ClassLoader agentLoader = loadOrDefineClassLoader( + final ClassLoader sandboxClassLoader = loadOrDefineClassLoader( namespace, getSandboxCoreJarPath(getSandboxHome(featureMap)) // SANDBOX_CORE_JAR_PATH ); // CoreConfigure类定义 - final Class classOfConfigure = agentLoader.loadClass(CLASS_OF_CORE_CONFIGURE); + final Class classOfConfigure = sandboxClassLoader.loadClass(CLASS_OF_CORE_CONFIGURE); // 反序列化成CoreConfigure类实例 final Object objectOfCoreConfigure = classOfConfigure.getMethod("toConfigure", String.class, String.class) .invoke(null, coreFeatureString, propertiesFilePath); // CoreServer类定义 - final Class classOfProxyServer = agentLoader.loadClass(CLASS_OF_PROXY_CORE_SERVER); + final Class classOfProxyServer = sandboxClassLoader.loadClass(CLASS_OF_PROXY_CORE_SERVER); // 获取CoreServer单例 - final Object objectOfCoreServer = classOfProxyServer + final Object objectOfProxyServer = classOfProxyServer .getMethod("getInstance") .invoke(null); // CoreServer.isBind() - final boolean isBind = (Boolean) classOfProxyServer.getMethod("isBind").invoke(objectOfCoreServer); + final boolean isBind = (Boolean) classOfProxyServer.getMethod("isBind").invoke(objectOfProxyServer); // 如果未绑定,则需要绑定一个地址 @@ -280,9 +252,9 @@ private static synchronized InetSocketAddress main(final Map fea try { classOfProxyServer .getMethod("bind", classOfConfigure, Instrumentation.class) - .invoke(objectOfCoreServer, objectOfCoreConfigure, inst); + .invoke(objectOfProxyServer, objectOfCoreConfigure, inst); } catch (Throwable t) { - classOfProxyServer.getMethod("destroy").invoke(objectOfCoreServer); + classOfProxyServer.getMethod("destroy").invoke(objectOfProxyServer); throw t; } @@ -291,7 +263,7 @@ private static synchronized InetSocketAddress main(final Map fea // 返回服务器绑定的地址 return (InetSocketAddress) classOfProxyServer .getMethod("getLocal") - .invoke(objectOfCoreServer); + .invoke(objectOfProxyServer); } catch (Throwable cause) { diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java index 1d14985b..c271d27f 100644 --- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java +++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/spi/ModuleJarLifeCycleProvider.java @@ -8,6 +8,14 @@ */ public interface ModuleJarLifeCycleProvider { + /** + * 等待 + * @param loaded + * @param inComing + * @return + */ + ClassLoader waitingFor(ClassLoader[] loaded, ClassLoader inComing); + /** * 模块Jar文件卸载完所有模块后,正式卸载Jar文件之前之后调用! */ diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreModule.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreModule.java new file mode 100755 index 00000000..594d4c5b --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreModule.java @@ -0,0 +1,276 @@ +package com.alibaba.jvm.sandbox.core; + +import com.alibaba.jvm.sandbox.api.Module; +import com.alibaba.jvm.sandbox.core.classloader.ModuleClassLoader; +import com.alibaba.jvm.sandbox.core.manager.impl.SandboxClassFileTransformer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.lang.ref.WeakReference; +import java.util.*; + +/** + * 沙箱模块内核封装对象 + * + * @author luanjia@taobao.com + */ +public class CoreModule { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + // 全局唯一编号 + private final String uniqueId; + + // 模块归属Jar文件 + private final File jarFile; + + // 模块加载的ClassLoader + private final ModuleClassLoader loader; + + // 模块 + private final Module module; + + // 模块的类转换器 + private final Set sandboxClassFileTransformers + = new LinkedHashSet(); + + // 模块所持有的可释放资源 + private final List> releaseResources + = new ArrayList>(); + + // 是否已经激活 + private boolean isActivated; + + // 是否已被加载 + private boolean isLoaded; + + /** + * 模块业务对象 + * + * @param uniqueId 模块ID + * @param jarFile 模块归属Jar文件 + * @param loader 模块加载ClassLoader + * @param module 模块 + */ + public CoreModule(final String uniqueId, + final File jarFile, + final ModuleClassLoader loader, + final Module module) { + this.uniqueId = uniqueId; + this.jarFile = jarFile; + this.loader = loader; + this.module = module; + } + + /** + * 判断模块是否已被激活 + * + * @return TRUE:已激活;FALSE:未激活 + */ + public boolean isActivated() { + return isActivated; + } + + /** + * 标记模块激活状态 + * + * @param isActivated 模块激活状态 + * @return this + */ + public CoreModule markActivated(boolean isActivated) { + this.isActivated = isActivated; + return this; + } + + /** + * 判断模块是否已经被加载 + * + * @return TRUE:被加载;FALSE:未被加载 + */ + public boolean isLoaded() { + return isLoaded; + } + + + /** + * 标记模块加载状态 + * + * @param isLoaded 模块加载状态 + * @return this + */ + public CoreModule markLoaded(boolean isLoaded) { + this.isLoaded = isLoaded; + return this; + } + + /** + * 获取ModuleJar文件 + * + * @return ModuleJar文件 + */ + public File getJarFile() { + return jarFile; + } + + /** + * 获取对应的ModuleClassLoader + * + * @return ModuleClassLoader + */ + public ModuleClassLoader getLoader() { + return loader; + } + + /** + * 获取模块ID + * + * @return 模块ID + */ + public String getUniqueId() { + return uniqueId; + } + + /** + * 获取模块实例 + * + * @return 模块实例 + */ + public Module getModule() { + return module; + } + + /** + * 获取模块所创建的SandboxClassFileTransformer集合 + * + * @return 模块所创建的SandboxClassFileTransformer集合 + */ + public Set getSandboxClassFileTransformers() { + return sandboxClassFileTransformers; + } + + /** + * 获取模块所编织的类个数 + * + * @return 模块所编织的类个数 + */ + public int cCnt() { + int cCnt = 0; + for (final SandboxClassFileTransformer sandboxClassFileTransformer : sandboxClassFileTransformers) { + cCnt += sandboxClassFileTransformer.getAffectStatistic().cCnt(); + } + return cCnt; + } + + /** + * 获取模块所编织的方法个数 + * + * @return 模块所编织的方法个数 + */ + public int mCnt() { + int mCnt = 0; + for (final SandboxClassFileTransformer sandboxClassFileTransformer : sandboxClassFileTransformers) { + mCnt += sandboxClassFileTransformer.getAffectStatistic().mCnt(); + } + return mCnt; + } + + @Override + public String toString() { + return String.format( + "module[id=%s;class=%s;]", + uniqueId, + module.getClass() + ); + } + + + /** + * 在模块下追加一个可释放资源 + * + * @param resource 可释放资源封装 + * @param 资源实体 + * @return 资源实体本身 + */ + public T append(ReleaseResource resource) { + if (null == resource + || null == resource.get()) { + return null; + } + releaseResources.add(resource); + logger.debug("append resource={} in module[id={};]", resource.get(), uniqueId); + return resource.get(); + } + + /** + * 在当前模块下移除一个可释放资源 + * + * @param target 待释放的资源实体 + */ + public void remove(Object target) { + final Iterator> resourceRefIt = releaseResources.iterator(); + while (resourceRefIt.hasNext()) { + final ReleaseResource resourceRef = resourceRefIt.next(); + + // 删除掉无效的资源 + if (null == resourceRef) { + resourceRefIt.remove(); + logger.info("remove null resource in module={}", uniqueId); + continue; + } + + // 删除掉已经被GC掉的资源 + if (null == resourceRef.get()) { + resourceRefIt.remove(); + logger.info("remove empty resource in module={}", uniqueId); + continue; + } + + if (target.equals(resourceRef.get())) { + resourceRefIt.remove(); + logger.info("remove resource={} in module={}", resourceRef.get(), uniqueId); + try { + resourceRef.release(); + } catch (Exception cause) { + logger.warn("release resource occur error in module={};", uniqueId, cause); + } + } + } + } + + /** + * 可释放资源 + * + * @param 资源类型 + */ + public static abstract class ReleaseResource { + + // 资源弱引用,允许被GC回收 + private final WeakReference reference; + + /** + * 构造释放资源 + * + * @param resource 资源目标 + */ + public ReleaseResource(T resource) { + this.reference = new WeakReference(resource); + } + + /** + * 释放资源 + */ + public abstract void release(); + + /** + * 获取资源实体 + * + * @return 资源实体 + */ + public T get() { + return reference.get(); + } + + } + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/JvmSandbox.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/JvmSandbox.java new file mode 100644 index 00000000..cd09d539 --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/JvmSandbox.java @@ -0,0 +1,61 @@ +package com.alibaba.jvm.sandbox.core; + +import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; +import com.alibaba.jvm.sandbox.core.manager.CoreLoadedClassDataSource; +import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; +import com.alibaba.jvm.sandbox.core.manager.impl.DefaultCoreModuleManager; +import com.alibaba.jvm.sandbox.core.manager.impl.DefaultLoadedClassDataSource; +import com.alibaba.jvm.sandbox.core.manager.impl.DefaultProviderManager; +import com.alibaba.jvm.sandbox.core.util.SpyUtils; + +import java.lang.instrument.Instrumentation; + +public class JvmSandbox { + + private final CoreConfigure cfg; + private final Instrumentation inst; + private final CoreLoadedClassDataSource loadedClassDataSource; + private final CoreModuleManager coreModuleManager; + + public JvmSandbox(final CoreConfigure cfg, + final Instrumentation inst) { + EventListenerHandlers.getSingleton(); + this.cfg = cfg; + this.coreModuleManager = new DefaultCoreModuleManager( + cfg, + this.inst = inst, + this.loadedClassDataSource = new DefaultLoadedClassDataSource(inst, cfg.isEnableUnsafe()), + new DefaultProviderManager(cfg) + ); + + init(); + } + + private void init() { + SpyUtils.init(cfg.getNamespace()); + inst.addTransformer(this.loadedClassDataSource); + } + + + /** + * 获取模块管理器 + * + * @return + */ + public CoreModuleManager getCoreModuleManager() { + return coreModuleManager; + } + + public void destroy() { + + inst.removeTransformer(loadedClassDataSource); + + // 卸载所有的模块 + coreModuleManager.unloadAll(); + + // 清理Spy + SpyUtils.clean(cfg.getNamespace()); + + } + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java index 54a06db0..df905bf8 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.java @@ -45,18 +45,16 @@ private static File copyToTempFile(final File moduleJarFile) throws IOException return tempFile; } - public ModuleClassLoader(final File moduleJarFile, - final ClassLoader sandboxClassLoader) throws IOException { - this(moduleJarFile, copyToTempFile(moduleJarFile), sandboxClassLoader); + public ModuleClassLoader(final File moduleJarFile) throws IOException { + this(moduleJarFile, copyToTempFile(moduleJarFile)); } private ModuleClassLoader(final File moduleJarFile, - final File tempModuleJarFile, - final ClassLoader sandboxClassLoader) throws IOException { + final File tempModuleJarFile) throws IOException { super( new URL[]{new URL("file:" + tempModuleJarFile.getPath())}, new Routing( - sandboxClassLoader, + ModuleClassLoader.class.getClassLoader(), "^com\\.alibaba\\.jvm\\.sandbox\\.api\\..*", "^javax\\.servlet\\..*", "^javax\\.annotation\\.Resource.*$" diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/domain/CoreModule.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/domain/CoreModule.java deleted file mode 100755 index 3d198460..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/domain/CoreModule.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.alibaba.jvm.sandbox.core.domain; - -import com.alibaba.jvm.sandbox.api.Module; -import com.alibaba.jvm.sandbox.core.classloader.ModuleClassLoader; -import com.alibaba.jvm.sandbox.core.manager.impl.SandboxClassFileTransformer; - -import java.io.File; -import java.util.LinkedHashSet; -import java.util.Set; - -/** - * 沙箱模块内核封装对象 - * Created by luanjia on 16/10/4. - */ -public class CoreModule { - - // 全局唯一编号 - private final String uniqueId; - - // 模块归属Jar文件 - private final File jarFile; - - // 模块加载的ClassLoader - private final ModuleClassLoader loader; - - // 模块 - private final Module module; - - // 模块的类转换器 - private final Set sandboxClassFileTransformers - = new LinkedHashSet(); - - // 是否已经激活 - private boolean activated; - - // 是否已被加载 - private boolean loaded; - - /** - * 模块业务对象 - * - * @param uniqueId 模块ID - * @param jarFile 模块归属Jar文件 - * @param loader 模块加载ClassLoader - * @param module 模块 - */ - public CoreModule(final String uniqueId, - final File jarFile, - final ModuleClassLoader loader, - final Module module) { - this.uniqueId = uniqueId; - this.jarFile = jarFile; - this.loader = loader; - this.module = module; - } - - public boolean isActivated() { - return activated; - } - - public CoreModule setActivated(boolean activated) { - this.activated = activated; - return this; - } - - public boolean isLoaded() { - return loaded; - } - - public CoreModule setLoaded(boolean loaded) { - this.loaded = loaded; - return this; - } - - public File getJarFile() { - return jarFile; - } - - public ModuleClassLoader getLoader() { - return loader; - } - - public Module getModule() { - return module; - } - - public Set getSandboxClassFileTransformers() { - return sandboxClassFileTransformers; - } - - public String getUniqueId() { - return uniqueId; - } - - public int cCnt() { - int cCnt = 0; - for (final SandboxClassFileTransformer sandboxClassFileTransformer : sandboxClassFileTransformers) { - cCnt += sandboxClassFileTransformer.getAffectStatistic().cCnt(); - } - return cCnt; - } - - public int mCnt() { - int mCnt = 0; - for (final SandboxClassFileTransformer sandboxClassFileTransformer : sandboxClassFileTransformers) { - mCnt += sandboxClassFileTransformer.getAffectStatistic().mCnt(); - } - return mCnt; - } - - @Override - public String toString() { - return String.format( - "module[id:%s;class:%s;]", - uniqueId, - module.getClass() - ); - } -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.java index 84343980..91773f51 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.java @@ -3,7 +3,6 @@ import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.core.enhance.weaver.asm.EventWeaver; import com.alibaba.jvm.sandbox.core.util.ObjectIDs; -import com.alibaba.jvm.sandbox.core.util.SpyUtils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.slf4j.Logger; @@ -73,36 +72,6 @@ protected String getCommonSuperClass(String type1, String type2) { }; } - /** - * 编织事件方法 - * - * @param sourceByteCodeArray 原始字节码数组 - * @return 编织后的字节码数组 - */ - private byte[] weavingEvent(final ClassLoader targetClassLoader, - final byte[] sourceByteCodeArray, - final Set signCodes, - final String namespace, - final int listenerId, - final Event.Type[] eventTypeArray) { - final ClassReader cr = new ClassReader(sourceByteCodeArray); - final ClassWriter cw = createClassWriter(targetClassLoader, cr); - final int targetClassLoaderObjectID = ObjectIDs.instance.identity(targetClassLoader); - cr.accept( - new EventWeaver( - ASM7, cw, namespace, listenerId, - targetClassLoaderObjectID, - cr.getClassName(), - signCodes, - eventTypeArray - ), - EXPAND_FRAMES - ); - return cw.toByteArray(); - // return dumpClassIfNecessary(SandboxStringUtils.toJavaClassName(cr.getClassName()), cw.toByteArray()); - } - - // /* // * dump class to file // * 用于代码调试 @@ -136,17 +105,21 @@ public byte[] toByteCodeArray(final ClassLoader targetClassLoader, final String namespace, final int listenerId, final Event.Type[] eventTypeArray) { - // 如果定义间谍类失败了,则后续不需要增强 - try { - SpyUtils.init(namespace); - // defineSpyIfNecessary(targetClassLoader); - } catch (Throwable cause) { - logger.warn("define Spy to target ClassLoader={} failed.", targetClassLoader, cause); - return byteCodeArray; - } - // 返回增强后字节码 - return weavingEvent(targetClassLoader, byteCodeArray, signCodes, namespace, listenerId, eventTypeArray); + final ClassReader cr = new ClassReader(byteCodeArray); + final ClassWriter cw = createClassWriter(targetClassLoader, cr); + final int targetClassLoaderObjectID = ObjectIDs.instance.identity(targetClassLoader); + cr.accept( + new EventWeaver( + ASM7, cw, namespace, listenerId, + targetClassLoaderObjectID, + cr.getClassName(), + signCodes, + eventTypeArray + ), + EXPAND_FRAMES + ); + return cw.toByteArray(); } } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.java index d2f52e25..d3ae6f56 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.java @@ -3,6 +3,7 @@ import com.alibaba.jvm.sandbox.api.resource.LoadedClassDataSource; import com.alibaba.jvm.sandbox.core.util.matcher.Matcher; +import java.lang.instrument.ClassFileTransformer; import java.util.List; /** @@ -10,7 +11,7 @@ * * @author luanjia@taobao.com */ -public interface CoreLoadedClassDataSource extends LoadedClassDataSource { +public interface CoreLoadedClassDataSource extends LoadedClassDataSource, ClassFileTransformer { /** * 使用{@link Matcher}来完成类的检索 @@ -23,4 +24,15 @@ public interface CoreLoadedClassDataSource extends LoadedClassDataSource { */ List> findForReTransform(Matcher matcher); + /** + * 列出所有已经加载的ClassLoader + * + * @return 已经加载的ClassLoader + */ + ClassLoader[] listLoadedClassLoader(); + + void appendLoadedClassLoaderListener(LoadedClassLoaderListener listener); + + void removeLoadedClassLoaderListener(LoadedClassLoaderListener listener); + } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.java index 68b2a09b..6048ce80 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.java @@ -1,7 +1,7 @@ package com.alibaba.jvm.sandbox.core.manager; import com.alibaba.jvm.sandbox.api.ModuleException; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule; import java.util.Collection; @@ -22,9 +22,10 @@ public interface CoreModuleManager { /** * 沙箱重置 * + * @return this * @throws ModuleException 沙箱重置失败 */ - void reset() throws ModuleException; + CoreModuleManager reset() throws ModuleException; /** * 激活模块 @@ -79,5 +80,9 @@ public interface CoreModuleManager { */ CoreModule unload(CoreModule coreModule, boolean isIgnoreModuleException) throws ModuleException; + /** + * 卸载所有模块 + */ + void unloadAll(); } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/LoadedClassLoaderListener.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/LoadedClassLoaderListener.java new file mode 100644 index 00000000..c00ce74c --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/LoadedClassLoaderListener.java @@ -0,0 +1,7 @@ +package com.alibaba.jvm.sandbox.core.manager; + +public interface LoadedClassLoaderListener { + + void onLoaded(ClassLoader loader); + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.java deleted file mode 100755 index af3940b0..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.alibaba.jvm.sandbox.core.manager; - -import com.alibaba.jvm.sandbox.core.domain.CoreModule; - -/** - * 模块生命周期事件总线 - * Created by luanjia@taobao.com on 2017/2/3. - */ -public interface ModuleLifeCycleEventBus { - - /** - * 添加模块生命周期监听器 - *

    被添加的监听器将按顺序完成生命周期的通知

    - * - * @param lifeCycleEventListener 模块生命周期监听 - */ - void append(ModuleLifeCycleEventListener lifeCycleEventListener); - - /** - * 通知事件 - * - * @param coreModule 被通知的沙箱模块 - * @param event 通知事件类型 - */ - void fire(CoreModule coreModule, Event event); - - /** - * 模块事件类型 - */ - enum Event { - - /** - * 模块加载 - */ - LOAD, - - /** - * 模块加载完成 - */ - LOAD_COMPLETED, - - /** - * 模块卸载 - */ - UNLOAD, - - /** - * 模块激活 - */ - ACTIVE, - - /** - * 模块冻结 - */ - FROZE - } - - /** - * 模块生命周期事件监听器 - */ - interface ModuleLifeCycleEventListener { - - /** - * 模块生命周期事件到达 - * - * @param coreModule 被通知的沙箱模块 - * @param event 通知事件类型 - * @return TRUE : 继续保持监听,下次有事件通知时继续接收消息 - * FALSE : 放弃后续的监听 - */ - boolean onFire(CoreModule coreModule, Event event); - - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.java deleted file mode 100755 index 60d6002a..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.alibaba.jvm.sandbox.core.manager; - -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus.ModuleLifeCycleEventListener; - -import java.lang.ref.WeakReference; - -/** - * 模块可释放资源管理 - * 通常用来管理围绕Module所展开的http/websocket连接 - * Created by luanjia@taobao.com on 2017/2/4. - */ -public interface ModuleResourceManager extends ModuleLifeCycleEventListener { - - /** - * 在模块下追加一个可释放资源 - * - * @param uniqueId 模块ID - * @param resource 可释放资源封装 - * @param 资源实体 - * @return 资源实体本身 - */ - T append(String uniqueId, WeakResource resource); - - /** - * 在当前模块下移除一个可释放资源 - * - * @param uniqueId 模块ID - * @param target 待释放的资源实体 - * @param 资源实体 - */ - void remove(String uniqueId, T target); - - /** - * 弱引用资源 - * - * @param 资源类型 - */ - abstract class WeakResource { - - private final WeakReference weakReference; - - public WeakResource(T resource) { - this.weakReference = new WeakReference(resource); - } - - /** - * 释放资源 - */ - public abstract void release(); - - /** - * 获取资源实体 - * - * @return 资源实体 - */ - public T get() { - return weakReference.get(); - } - - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java index 730870ee..04f347bf 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java @@ -12,9 +12,10 @@ /** * 默认配置信息实现 - * Created by luanjia@taobao.com on 2017/2/9. + * + * @author luanjia@taobao.com */ -public class DefaultConfigInfo implements ConfigInfo { +class DefaultConfigInfo implements ConfigInfo { private final CoreConfigure cfg; diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java index 1e0d680a..26aeb9fe 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java @@ -1,15 +1,16 @@ package com.alibaba.jvm.sandbox.core.manager.impl; import com.alibaba.jvm.sandbox.api.*; +import com.alibaba.jvm.sandbox.api.event.Event; import com.alibaba.jvm.sandbox.api.resource.*; import com.alibaba.jvm.sandbox.core.CoreConfigure; +import com.alibaba.jvm.sandbox.core.CoreModule; import com.alibaba.jvm.sandbox.core.classloader.ModuleClassLoader; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; import com.alibaba.jvm.sandbox.core.manager.CoreLoadedClassDataSource; import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus; import com.alibaba.jvm.sandbox.core.manager.ProviderManager; +import com.alibaba.jvm.sandbox.core.manager.impl.ModuleLibLoader.ModuleJarLoadCallback; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.reflect.FieldUtils; import org.slf4j.Logger; @@ -24,7 +25,7 @@ import java.util.concurrent.ConcurrentHashMap; import static com.alibaba.jvm.sandbox.api.ModuleException.ErrorCode.*; -import static com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus.Event.LOAD_COMPLETED; +import static com.alibaba.jvm.sandbox.core.manager.impl.DefaultCoreModuleManager.ModuleLifeCycleType.*; import static org.apache.commons.lang3.reflect.FieldUtils.writeField; /** @@ -37,9 +38,7 @@ public class DefaultCoreModuleManager implements CoreModuleManager { private final CoreConfigure cfg; private final Instrumentation inst; - private final ClassLoader sandboxClassLoader; private final CoreLoadedClassDataSource classDataSource; - private final ModuleLifeCycleEventBus moduleLifeCycleEventBus; private final ProviderManager providerManager; // 模块目录&文件集合 @@ -51,24 +50,18 @@ public class DefaultCoreModuleManager implements CoreModuleManager { /** * 模块模块管理 * - * @param cfg 模块核心配置 - * @param inst inst - * @param sandboxClassLoader 沙箱加载ClassLoader - * @param classDataSource 已加载类数据源 - * @param moduleLifeCycleEventBus 模块生命周期通知总线 - * @param providerManager 服务提供者管理器 + * @param cfg 模块核心配置 + * @param inst inst + * @param classDataSource 已加载类数据源 + * @param providerManager 服务提供者管理器 */ public DefaultCoreModuleManager(final CoreConfigure cfg, final Instrumentation inst, - final ClassLoader sandboxClassLoader, final CoreLoadedClassDataSource classDataSource, - final ModuleLifeCycleEventBus moduleLifeCycleEventBus, final ProviderManager providerManager) { this.cfg = cfg; this.inst = inst; - this.sandboxClassLoader = sandboxClassLoader; this.classDataSource = classDataSource; - this.moduleLifeCycleEventBus = moduleLifeCycleEventBus; this.providerManager = providerManager; // 初始化模块目录 @@ -76,13 +69,6 @@ public DefaultCoreModuleManager(final CoreConfigure cfg, new File[]{new File(cfg.getSystemModuleLibPath())}, cfg.getUserModuleLibFilesWithCache() ); - -// // 初始化加载所有的模块 -// try { -// reset(); -// } catch (Throwable cause) { -// logger.warn("reset occur error when initializing.", cause); -// } } private File[] mergeFileArray(File[] aFileArray, File[] bFileArray) { @@ -95,13 +81,13 @@ private File[] mergeFileArray(File[] aFileArray, File[] bFileArray) { /* * 通知模块生命周期 */ - private void callAndFireModuleLifeCycle(final CoreModule coreModule, final ModuleLifeCycleEventBus.Event e) throws ModuleException { + private void callAndFireModuleLifeCycle(final CoreModule coreModule, final ModuleLifeCycleType type) throws ModuleException { if (coreModule.getModule() instanceof ModuleLifecycle) { final ModuleLifecycle moduleLifecycle = (ModuleLifecycle) coreModule.getModule(); final String uniqueId = coreModule.getUniqueId(); - switch (e) { + switch (type) { - case LOAD: { + case MODULE_LOAD: { try { moduleLifecycle.onLoad(); } catch (Throwable throwable) { @@ -110,7 +96,7 @@ private void callAndFireModuleLifeCycle(final CoreModule coreModule, final Modul break; } - case UNLOAD: { + case MODULE_UNLOAD: { try { moduleLifecycle.onUnload(); } catch (Throwable throwable) { @@ -119,7 +105,7 @@ private void callAndFireModuleLifeCycle(final CoreModule coreModule, final Modul break; } - case ACTIVE: { + case MODULE_ACTIVE: { try { moduleLifecycle.onActive(); } catch (Throwable throwable) { @@ -128,7 +114,7 @@ private void callAndFireModuleLifeCycle(final CoreModule coreModule, final Modul break; } - case FROZE: { + case MODULE_FROZEN: { try { moduleLifecycle.onFrozen(); } catch (Throwable throwable) { @@ -142,7 +128,7 @@ private void callAndFireModuleLifeCycle(final CoreModule coreModule, final Modul // 这里要对LOAD_COMPLETED事件做特殊处理 // 因为这个事件处理失败不会影响模块变更行为,只做简单的日志处理 - if (e == LOAD_COMPLETED + if (type == MODULE_LOAD_COMPLETED && coreModule.getModule() instanceof LoadCompleted) { try { ((LoadCompleted) coreModule.getModule()).loadCompleted(); @@ -151,8 +137,6 @@ private void callAndFireModuleLifeCycle(final CoreModule coreModule, final Modul } } - // fire the bus - moduleLifeCycleEventBus.fire(coreModule, e); } /** @@ -189,11 +173,10 @@ private synchronized void load(final String uniqueId, // 注入@Resource资源 injectResourceOnLoadIfNecessary(coreModule); - // 通知生命周期:模块加载开始 - callAndFireModuleLifeCycle(coreModule, ModuleLifeCycleEventBus.Event.LOAD); + callAndFireModuleLifeCycle(coreModule, MODULE_LOAD); // 设置为已经加载 - coreModule.setLoaded(true); + coreModule.markLoaded(true); // 如果模块标记了加载时自动激活,则需要在加载完成之后激活模块 markActiveOnLoadIfNecessary(coreModule); @@ -202,7 +185,7 @@ private synchronized void load(final String uniqueId, loadedModuleBOMap.put(uniqueId, coreModule); // 通知生命周期,模块加载完成 - callAndFireModuleLifeCycle(coreModule, LOAD_COMPLETED); + callAndFireModuleLifeCycle(coreModule, MODULE_LOAD_COMPLETED); } @@ -231,7 +214,19 @@ else if (ModuleEventWatcher.class.isAssignableFrom(fieldType)) { cfg.isEnableUnsafe(), cfg.getNamespace() ); - moduleLifeCycleEventBus.append((DefaultModuleEventWatcher) moduleEventWatcher); + coreModule.append(new CoreModule.ReleaseResource(moduleEventWatcher) { + + @Override + public void release() { + for (final SandboxClassFileTransformer transformer + : new ArrayList(coreModule.getSandboxClassFileTransformers())) { + logger.info("delete watch[id={}] by module[id={};] unload.", + transformer.getWatchId(), coreModule.getUniqueId()); + moduleEventWatcher.delete(transformer.getWatchId()); + } + } + + }); writeField( resourceField, module, @@ -275,7 +270,32 @@ else if (EventMonitor.class.isAssignableFrom(fieldType)) { writeField( resourceField, module, - new DefaultEventMonitor(), + new EventMonitor() { + @Override + public EventPoolInfo getEventPoolInfo() { + return new EventPoolInfo() { + @Override + public int getNumActive() { + return 0; + } + + @Override + public int getNumActive(Event.Type type) { + return 0; + } + + @Override + public int getNumIdle() { + return 0; + } + + @Override + public int getNumIdle(Event.Type type) { + return 0; + } + }; + } + }, true ); } @@ -284,9 +304,9 @@ else if (EventMonitor.class.isAssignableFrom(fieldType)) { else { logger.warn("module inject @Resource ignored: field not found. module={};class={};type={};field={};", coreModule.getUniqueId(), - resourceField.getName(), coreModule.getModule().getClass().getName(), - fieldType.getName() + fieldType.getName(), + resourceField.getName() ); } @@ -333,7 +353,7 @@ public synchronized CoreModule unload(final CoreModule coreModule, // 通知生命周期 try { - callAndFireModuleLifeCycle(coreModule, ModuleLifeCycleEventBus.Event.UNLOAD); + callAndFireModuleLifeCycle(coreModule, MODULE_UNLOAD); } catch (ModuleException meCause) { if (isIgnoreModuleException) { logger.warn("unload module occur error, ignored. module={};class={};code={};", @@ -351,7 +371,7 @@ public synchronized CoreModule unload(final CoreModule coreModule, loadedModuleBOMap.remove(coreModule.getUniqueId()); // 标记模块为:已卸载 - coreModule.setLoaded(false); + coreModule.markLoaded(false); // 尝试关闭ClassLoader closeModuleClassLoaderIfNecessary(coreModule.getLoader()); @@ -359,6 +379,23 @@ public synchronized CoreModule unload(final CoreModule coreModule, return coreModule; } + @Override + public void unloadAll() { + + logger.info("force unloading all loaded modules:{}", loadedModuleBOMap.keySet()); + + // 强制卸载所有模块 + for (final CoreModule coreModule : new ArrayList(loadedModuleBOMap.values())) { + try { + unload(coreModule, true); + } catch (ModuleException cause) { + // 强制卸载不可能出错,这里不对外继续抛出任何异常 + logger.warn("force unloading module occur error! module={};", coreModule.getUniqueId(), cause); + } + } + + } + @Override public synchronized void active(final CoreModule coreModule) throws ModuleException { @@ -375,7 +412,7 @@ public synchronized void active(final CoreModule coreModule) throws ModuleExcept ); // 通知生命周期 - callAndFireModuleLifeCycle(coreModule, ModuleLifeCycleEventBus.Event.ACTIVE); + callAndFireModuleLifeCycle(coreModule, MODULE_ACTIVE); // 激活所有监听器 for (final SandboxClassFileTransformer sandboxClassFileTransformer : coreModule.getSandboxClassFileTransformers()) { @@ -387,7 +424,7 @@ public synchronized void active(final CoreModule coreModule) throws ModuleExcept } // 标记模块为:已激活 - coreModule.setActivated(true); + coreModule.markActivated(true); } @Override @@ -408,7 +445,7 @@ public synchronized void frozen(final CoreModule coreModule, // 通知生命周期 try { - callAndFireModuleLifeCycle(coreModule, ModuleLifeCycleEventBus.Event.FROZE); + callAndFireModuleLifeCycle(coreModule, MODULE_FROZEN); } catch (ModuleException meCause) { if (isIgnoreModuleException) { logger.warn("frozen module occur error, ignored. module={};class={};code={};", @@ -429,7 +466,7 @@ public synchronized void frozen(final CoreModule coreModule, } // 标记模块为:已冻结 - coreModule.setActivated(false); + coreModule.markActivated(false); } @Override @@ -472,7 +509,7 @@ private boolean isSystemModule(final File child) { /** * 用户模块文件加载回调 */ - final private class InnerModuleJarLoadCallback implements ModuleJarLoader.ModuleJarLoadCallback { + final private class InnerModuleJarLoadCallback implements ModuleJarLoadCallback { @Override public void onLoad(File moduleJarFile) throws Throwable { providerManager.loading(moduleJarFile); @@ -517,6 +554,8 @@ public void onLoad(final String uniqueId, moduleClass, moduleClassLoader ); + + // 这里进行真正的模块加载 load(uniqueId, module, moduleJarFile, moduleClassLoader); } } @@ -531,28 +570,29 @@ public synchronized void flush(final boolean isForce) throws ModuleException { } @Override - public synchronized void reset() throws ModuleException { + public synchronized CoreModuleManager reset() throws ModuleException { logger.info("resetting all loaded modules:{}", loadedModuleBOMap.keySet()); // 1. 强制卸载所有模块 - for (final CoreModule coreModule : new ArrayList(loadedModuleBOMap.values())) { - unload(coreModule, true); - } + unloadAll(); // 2. 加载所有模块 for (final File moduleLibDir : moduleLibDirArray) { // 用户模块加载目录,加载用户模块目录下的所有模块 // 对模块访问权限进行校验 - if (moduleLibDir.exists() - && moduleLibDir.canRead()) { - new ModuleLibLoader(moduleLibDir, cfg.getLaunchMode(), sandboxClassLoader) - .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback()); + if (moduleLibDir.exists() && moduleLibDir.canRead()) { + new ModuleLibLoader(moduleLibDir, cfg.getLaunchMode()) + .load( + new InnerModuleJarLoadCallback(), + new InnerModuleLoadCallback() + ); } else { logger.warn("module-lib not access, ignore flush load this lib. path={}", moduleLibDir); } } + return this; } /** @@ -662,7 +702,7 @@ private void softFlush() { // 4. 加载add for (final File jarFile : appendJarFiles) { - new ModuleLibLoader(jarFile, cfg.getLaunchMode(), sandboxClassLoader) + new ModuleLibLoader(jarFile, cfg.getLaunchMode()) .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback()); } } catch (Throwable cause) { @@ -716,7 +756,7 @@ private void forceFlush() throws ModuleException { if (userModuleLibDir.exists() && userModuleLibDir.canRead()) { logger.info("force-flush modules: module-lib={}", userModuleLibDir); - new ModuleLibLoader(userModuleLibDir, cfg.getLaunchMode(), sandboxClassLoader) + new ModuleLibLoader(userModuleLibDir, cfg.getLaunchMode()) .load(new InnerModuleJarLoadCallback(), new InnerModuleLoadCallback()); } else { logger.warn("force-flush modules: module-lib can not access, will be ignored. module-lib={}", userModuleLibDir); @@ -725,4 +765,35 @@ private void forceFlush() throws ModuleException { } + /** + * 模块生命周期类型 + */ + enum ModuleLifeCycleType { + + /** + * 模块加载 + */ + MODULE_LOAD, + + /** + * 模块卸载 + */ + MODULE_UNLOAD, + + /** + * 模块激活 + */ + MODULE_ACTIVE, + + /** + * 模块冻结 + */ + MODULE_FROZEN, + + /** + * 模块加载完成 + */ + MODULE_LOAD_COMPLETED + } + } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java deleted file mode 100644 index da411a7a..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.alibaba.jvm.sandbox.core.manager.impl; - -import com.alibaba.jvm.sandbox.api.event.Event; -import com.alibaba.jvm.sandbox.api.resource.EventMonitor; - -/** - * 事件监控器实现 - */ -class DefaultEventMonitor implements EventMonitor { - - @Override - public EventPoolInfo getEventPoolInfo() { - return new EventPoolInfo() { - @Override - public int getNumActive() { - return 0; - } - - @Override - public int getNumActive(Event.Type type) { - return 0; - } - - @Override - public int getNumIdle() { - return 0; - } - - @Override - public int getNumIdle(Event.Type type) { - return 0; - } - }; - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.java index b9b542dc..7b24b251 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.java @@ -1,8 +1,8 @@ package com.alibaba.jvm.sandbox.core.manager.impl; import com.alibaba.jvm.sandbox.api.filter.Filter; -import com.alibaba.jvm.sandbox.core.CoreConfigure; import com.alibaba.jvm.sandbox.core.manager.CoreLoadedClassDataSource; +import com.alibaba.jvm.sandbox.core.manager.LoadedClassLoaderListener; import com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher; import com.alibaba.jvm.sandbox.core.util.matcher.Matcher; import com.alibaba.jvm.sandbox.core.util.matcher.UnsupportedMatcher; @@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory; import java.lang.instrument.Instrumentation; +import java.security.ProtectionDomain; import java.util.*; import static com.alibaba.jvm.sandbox.api.filter.ExtFilter.ExtFilterFactory.make; @@ -24,12 +25,14 @@ public class DefaultLoadedClassDataSource implements CoreLoadedClassDataSource { private final Logger logger = LoggerFactory.getLogger(getClass()); private final Instrumentation inst; - private final CoreConfigure cfg; + private final boolean isEnableUnsafe; + private final List loadedClassLoaderListeners + = new ArrayList(); public DefaultLoadedClassDataSource(final Instrumentation inst, - final CoreConfigure cfg) { + final boolean isEnableUnsafe) { this.inst = inst; - this.cfg = cfg; + this.isEnableUnsafe = isEnableUnsafe; } @Override @@ -89,7 +92,7 @@ private List> find(final Matcher matcher, } try { if (isRemoveUnsupported) { - if (new UnsupportedMatcher(clazz.getClassLoader(), cfg.isEnableUnsafe()) + if (new UnsupportedMatcher(clazz.getClassLoader(), isEnableUnsafe) .and(matcher) .matching(ClassStructureFactory.createClassStructure(clazz)) .isMatched()) { @@ -125,4 +128,55 @@ public Set> find(Filter filter) { return new LinkedHashSet>(find(new ExtFilterMatcher(make(filter)), false)); } + private void appendClassLoader(final ClassLoader loader, + final Set loadedClassLoaderSet) { + if (null == loader) { + return; + } + loadedClassLoaderSet.add(loader); + loadedClassLoaderSet.add(loader.getParent()); + } + + @Override + public ClassLoader[] listLoadedClassLoader() { + final Set loadedClassLoaderSet = new LinkedHashSet(); + for (Class loadedClass : list()) { + if (null == loadedClass) { + continue; + } + appendClassLoader(loadedClass.getClassLoader(), loadedClassLoaderSet); + + } + return loadedClassLoaderSet.toArray(new ClassLoader[]{}); + } + + @Override + public void appendLoadedClassLoaderListener(LoadedClassLoaderListener listener) { + synchronized (loadedClassLoaderListeners) { + loadedClassLoaderListeners.add(listener); + } + } + + @Override + public void removeLoadedClassLoaderListener(LoadedClassLoaderListener listener) { + synchronized (loadedClassLoaderListeners) { + loadedClassLoaderListeners.remove(listener); + } + } + + @Override + public byte[] transform(final ClassLoader loader, + final String className, + final Class classBeingRedefined, + final ProtectionDomain protectionDomain, + final byte[] classfileBuffer) { + final List cloneLoadedClassLoaderListener + = new ArrayList(loadedClassLoaderListeners); + if (null != loader) { + for (final LoadedClassLoaderListener listener : cloneLoadedClassLoaderListener) { + listener.onLoaded(loader); + } + } + return classfileBuffer; + } } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.java index bd6c26b0..725f0148 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.java @@ -2,7 +2,7 @@ import com.alibaba.jvm.sandbox.api.ModuleException; import com.alibaba.jvm.sandbox.api.resource.ModuleController; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule; import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; /** diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.java index cedc58a3..3f03e11d 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.java @@ -5,10 +5,9 @@ import com.alibaba.jvm.sandbox.api.listener.EventListener; import com.alibaba.jvm.sandbox.api.listener.ext.EventWatchCondition; import com.alibaba.jvm.sandbox.api.resource.ModuleEventWatcher; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule; import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; import com.alibaba.jvm.sandbox.core.manager.CoreLoadedClassDataSource; -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus; import com.alibaba.jvm.sandbox.core.util.Sequencer; import com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher; import com.alibaba.jvm.sandbox.core.util.matcher.GroupMatcher; @@ -18,16 +17,20 @@ import org.slf4j.LoggerFactory; import java.lang.instrument.Instrumentation; -import java.util.*; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; import static com.alibaba.jvm.sandbox.api.filter.ExtFilter.ExtFilterFactory.make; import static com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher.toOrGroupMatcher; /** * 默认事件观察者实现 - * Created by luanjia@taobao.com on 2017/2/23. + * + * @author luanjia@taobao.com */ -public class DefaultModuleEventWatcher implements ModuleEventWatcher, ModuleLifeCycleEventBus.ModuleLifeCycleEventListener { +public class DefaultModuleEventWatcher implements ModuleEventWatcher { private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -101,7 +104,7 @@ private void reTransformClasses(final int watchId, boolean batchReTransformSuccess = true; if (null == progress) { try { - inst.retransformClasses(waitingReTransformClasses.toArray(new Class[waitingReTransformClasses.size()])); + inst.retransformClasses(waitingReTransformClasses.toArray(new Class[0])); logger.info("module[id:{}] watch[id:{}] batch reTransform classes[count:{}] success.", coreModule.getUniqueId(), watchId, waitingReTransformClasses.size()); } catch (Throwable e) { @@ -307,23 +310,4 @@ public void watching(final Filter filter, } } - @Override - public boolean onFire(final CoreModule coreModule, - final ModuleLifeCycleEventBus.Event event) { - - if (this.coreModule == coreModule - && event == ModuleLifeCycleEventBus.Event.UNLOAD) { - // 是当前模块的卸载事件,需要主动清理掉之前的埋点 - for (final SandboxClassFileTransformer transformer : new ArrayList(coreModule.getSandboxClassFileTransformers())) { - logger.info("delete watch[id={}] by module[id={};] unload.", - transformer.getWatchId(), coreModule.getUniqueId()); - delete(transformer.getWatchId()); - } - // 当前模块都卸载了,我还留着做啥... - return false; - } - - // 不是当前模块的卸载事件,继续保持监听 - return true; - } } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.java deleted file mode 100755 index bc17b6c0..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.alibaba.jvm.sandbox.core.manager.impl; - -import com.alibaba.jvm.sandbox.core.domain.CoreModule; -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Iterator; -import java.util.LinkedList; - -/** - * 默认模块生命周期实现 - * Created by luanjia@taobao.com on 2017/2/3. - */ -public class DefaultModuleLifeCycleEventBus implements ModuleLifeCycleEventBus { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - private final LinkedList moduleLifeCycleEventListeners - = new LinkedList(); - - @Override - public void append(ModuleLifeCycleEventListener lifeCycleEventListener) { - moduleLifeCycleEventListeners.add(lifeCycleEventListener); - } - - @Override - public void fire(CoreModule coreModule, Event event) { - - logger.info("firing module-event: event={};module={};", event, coreModule.getUniqueId()); - final Iterator listenerIt = moduleLifeCycleEventListeners.iterator(); - while (listenerIt.hasNext()) { - - final ModuleLifeCycleEventListener moduleLifeCycleEventListener = listenerIt.next(); - try { - if (!moduleLifeCycleEventListener.onFire(coreModule, event)) { - // 监听器返回FALSE,说明监听器主动放弃后续的消息监听 - listenerIt.remove(); - logger.debug("fired module-event by once. event={};module={};listener={};", - event, - coreModule.getUniqueId(), - moduleLifeCycleEventListener - ); - } - } catch (Throwable cause) { - logger.warn("fire module-event failed, event={};module={};listener={};", - event, - coreModule.getUniqueId(), - moduleLifeCycleEventListener, - cause - ); - } - - } - - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.java index b953e153..f37eaf29 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.java @@ -3,7 +3,7 @@ import com.alibaba.jvm.sandbox.api.Module; import com.alibaba.jvm.sandbox.api.ModuleException; import com.alibaba.jvm.sandbox.api.resource.ModuleManager; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule; import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; import java.io.File; diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.java deleted file mode 100755 index 73dfd915..00000000 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.alibaba.jvm.sandbox.core.manager.impl; - -import com.alibaba.jvm.sandbox.core.domain.CoreModule; -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus; -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus.ModuleLifeCycleEventListener; -import com.alibaba.jvm.sandbox.core.manager.ModuleResourceManager; -import org.apache.commons.collections.CollectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; - -/** - * 默认实现自动释放连接释放管理 - * Created by luanjia@taobao.com on 2017/2/4. - */ -public class DefaultModuleResourceManager implements ModuleResourceManager, ModuleLifeCycleEventListener { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private final Map>> moduleResourceListMapping - = new HashMap>>(); - - @Override - public synchronized T append(String uniqueId, WeakResource resource) { - if (null == resource - || null == resource.get()) { - return null; - } - final List> moduleResourceList; - if (moduleResourceListMapping.containsKey(uniqueId)) { - moduleResourceList = moduleResourceListMapping.get(uniqueId); - } else { - moduleResourceListMapping.put(uniqueId, moduleResourceList - = new ArrayList>()); - } - moduleResourceList.add(resource); - logger.debug("append resource={} in module[id={};]", resource.get(), uniqueId); - return resource.get(); - } - - @Override - public void remove(String uniqueId, T target) { - if (null == target) { - return; - } - synchronized (this) { - final List> moduleResourceList = moduleResourceListMapping.get(uniqueId); - if (null == moduleResourceList) { - return; - } - final Iterator> resourceRefIt = moduleResourceList.iterator(); - while (resourceRefIt.hasNext()) { - final WeakResource resourceRef = resourceRefIt.next(); - - // 删除掉无效的资源 - if (null == resourceRef) { - resourceRefIt.remove(); - logger.debug("remove illegal resource in module[id={};]", uniqueId); - continue; - } - - // 删除掉已经被GC掉的资源 - if (null == resourceRef.get()) { - resourceRefIt.remove(); - logger.debug("remove empty resource in module[id={};]", uniqueId); - continue; - } - - if (target.equals(resourceRef.get())) { - resourceRefIt.remove(); - logger.debug("remove resource={} in module[id={};]", resourceRef.get(), uniqueId); - } - }//while - }//sync - } - - @Override - public boolean onFire(CoreModule coreModule, ModuleLifeCycleEventBus.Event event) { - - // 只有模块卸载的时候才需要关注处理 - if (event != ModuleLifeCycleEventBus.Event.UNLOAD) { - return true; - } - - final String uniqueId = coreModule.getUniqueId(); - final List> moduleResourceList; - synchronized (this) { - moduleResourceList = moduleResourceListMapping.remove(uniqueId); - } - if (CollectionUtils.isEmpty(moduleResourceList)) { - logger.debug("module[id={};] mapping resources was empty.", uniqueId); - return true; - } else { - logger.info("module[id={};] is unloading, will release {} resources.", uniqueId, moduleResourceList.size()); - } - - for (final WeakResource resource : moduleResourceList) { - if (null == resource - || null == resource.get()) { - continue; - } - try { - resource.release(); - logger.info("module[id={};] is unloading, resource={} was closed.", uniqueId, resource); - } catch (Throwable cause) { - logger.warn("module[id={};] is unloading, resource={} closing failed.", - uniqueId, resource, cause); - } - } - return true; - - } - -} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.java index 98d57f80..645bf616 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.java @@ -33,18 +33,16 @@ public class DefaultProviderManager implements ProviderManager { private final Collection moduleLoadingChains = new ArrayList(); private final CoreConfigure cfg; - public DefaultProviderManager(final CoreConfigure cfg, - final ClassLoader sandboxClassLoader) { + public DefaultProviderManager(final CoreConfigure cfg) { this.cfg = cfg; try { - init(cfg, sandboxClassLoader); + init(cfg); } catch (Throwable cause) { logger.warn("loading sandbox's provider-lib[{}] failed.", cfg.getProviderLibPath(), cause); } } - private void init(final CoreConfigure cfg, - final ClassLoader sandboxClassLoader) { + private void init(final CoreConfigure cfg) { final File providerLibDir = new File(cfg.getProviderLibPath()); if (!providerLibDir.exists() || !providerLibDir.canRead()) { @@ -55,7 +53,7 @@ private void init(final CoreConfigure cfg, for (final File providerJarFile : FileUtils.listFiles(providerLibDir, new String[]{"jar"}, false)) { try { - final ProviderClassLoader providerClassLoader = new ProviderClassLoader(providerJarFile, sandboxClassLoader); + final ProviderClassLoader providerClassLoader = new ProviderClassLoader(providerJarFile, getClass().getClassLoader()); // load ModuleJarLoadingChain inject(moduleJarLoadingChains, ModuleJarLoadingChain.class, providerClassLoader, providerJarFile); diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java index ebd76607..7f3292a0 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.java @@ -25,20 +25,14 @@ class ModuleJarLoader { // 沙箱加载模式 private final Information.Mode mode; - // 沙箱加载ClassLoader - private final ClassLoader sandboxClassLoader; - ModuleJarLoader(final File moduleJarFile, - final Information.Mode mode, - final ClassLoader sandboxClassLoader) { + final Information.Mode mode) { this.moduleJarFile = moduleJarFile; this.mode = mode; - this.sandboxClassLoader = sandboxClassLoader; } private boolean loadingModules(final ModuleClassLoader moduleClassLoader, - final ModuleJarLoadCallback mjCb, final ModuleLoadCallback mCb) { final Set loadedModuleUniqueIds = new LinkedHashSet(); @@ -117,20 +111,19 @@ private boolean loadingModules(final ModuleClassLoader moduleClassLoader, } - public void load(final ModuleJarLoadCallback mjCb, - final ModuleLoadCallback mCb) throws IOException { + void load(final ModuleLoadCallback mCb) throws IOException { boolean hasModuleLoadedSuccessFlag = false; ModuleClassLoader moduleClassLoader = null; logger.info("prepare loading module-jar={};", moduleJarFile); try { - moduleClassLoader = new ModuleClassLoader(moduleJarFile, sandboxClassLoader); + moduleClassLoader = new ModuleClassLoader(moduleJarFile); final ClassLoader preTCL = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(moduleClassLoader); try { - hasModuleLoadedSuccessFlag = loadingModules(moduleClassLoader, mjCb, mCb); + hasModuleLoadedSuccessFlag = loadingModules(moduleClassLoader, mCb); } finally { Thread.currentThread().setContextClassLoader(preTCL); } @@ -139,30 +132,12 @@ public void load(final ModuleJarLoadCallback mjCb, if (!hasModuleLoadedSuccessFlag && null != moduleClassLoader) { logger.warn("loading module-jar completed, but NONE module loaded, will be close ModuleClassLoader. module-jar={};", moduleJarFile); - if (null != moduleClassLoader) { - moduleClassLoader.closeIfPossible(); - } + moduleClassLoader.closeIfPossible(); } } } - - /** - * 模块文件加载回调 - */ - public interface ModuleJarLoadCallback { - - /** - * 模块文件加载回调 - * - * @param moduleJarFile 模块文件 - * @throws Throwable 加载回调异常 - */ - void onLoad(File moduleJarFile) throws Throwable; - - } - /** * 模块加载回调 */ diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java index 530b0743..2a43c891 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/ModuleLibLoader.java @@ -7,10 +7,7 @@ import java.io.File; import java.util.Arrays; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadFactory; -import static java.util.concurrent.Executors.newCachedThreadPool; import static org.apache.commons.io.FileUtils.convertFileCollectionToFileArray; import static org.apache.commons.io.FileUtils.listFiles; import static org.apache.commons.lang3.StringUtils.join; @@ -30,15 +27,10 @@ class ModuleLibLoader { // 沙箱加载模式 private final Information.Mode mode; - // 沙箱加载ClassLoader - private final ClassLoader sandboxClassLoader; - ModuleLibLoader(final File moduleLibDir, - final Information.Mode mode, - final ClassLoader sandboxClassLoader) { + final Information.Mode mode) { this.moduleLibDir = moduleLibDir; this.mode = mode; - this.sandboxClassLoader = sandboxClassLoader; } private File[] toModuleJarFileArray() { @@ -74,7 +66,7 @@ private File[] listModuleJarFileInLib() { * @param mjCb 模块文件加载回调 * @param mCb 模块加载回掉 */ - void load(final ModuleJarLoader.ModuleJarLoadCallback mjCb, + void load(final ModuleJarLoadCallback mjCb, final ModuleJarLoader.ModuleLoadCallback mCb) { // 开始逐条加载 @@ -94,11 +86,7 @@ void load(final ModuleJarLoader.ModuleJarLoadCallback mjCb, // } // }); try { - new ModuleJarLoader( - moduleJarFile, - mode, - sandboxClassLoader - ).load(mjCb, mCb); + new ModuleJarLoader(moduleJarFile, mode).load(mCb); } catch (Exception cause) { logger.warn("loading module-jar occur error! module-jar={};", moduleJarFile, cause); } @@ -119,4 +107,20 @@ void load(final ModuleJarLoader.ModuleJarLoadCallback mjCb, // static void shutdown() { // moduleJarLoaderExecutor.shutdown(); // } + + /** + * 模块文件加载回调 + */ + public interface ModuleJarLoadCallback { + + /** + * 模块文件加载回调 + * + * @param moduleJarFile 模块文件 + * @throws Throwable 加载回调异常 + */ + void onLoad(File moduleJarFile) throws Throwable; + + } + } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java index c65f33ae..7cdc51e0 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java @@ -1,20 +1,12 @@ package com.alibaba.jvm.sandbox.core.server.jetty; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.JoranConfigurator; import com.alibaba.jvm.sandbox.core.CoreConfigure; -import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers; -import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; -import com.alibaba.jvm.sandbox.core.manager.ModuleLifeCycleEventBus; -import com.alibaba.jvm.sandbox.core.manager.ModuleResourceManager; -import com.alibaba.jvm.sandbox.core.manager.ProviderManager; -import com.alibaba.jvm.sandbox.core.manager.impl.*; +import com.alibaba.jvm.sandbox.core.JvmSandbox; import com.alibaba.jvm.sandbox.core.server.CoreServer; import com.alibaba.jvm.sandbox.core.server.jetty.servlet.ModuleHttpServlet; import com.alibaba.jvm.sandbox.core.server.jetty.servlet.WebSocketAcceptorServlet; import com.alibaba.jvm.sandbox.core.util.Initializer; -import com.alibaba.jvm.sandbox.core.util.SandboxStringUtils; -import org.apache.commons.io.IOUtils; +import com.alibaba.jvm.sandbox.core.util.LogbackUtils; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.nio.SelectChannelConnector; @@ -25,13 +17,10 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.lang.instrument.Instrumentation; import java.net.InetSocketAddress; -import static com.alibaba.jvm.sandbox.core.util.NamespaceConvert.initNamespaceConvert; import static com.alibaba.jvm.sandbox.core.util.NetworkUtils.isPortInUsing; import static java.lang.String.format; import static org.eclipse.jetty.servlet.ServletContextHandler.NO_SESSIONS; @@ -49,8 +38,7 @@ public class JettyCoreServer implements CoreServer { private Server httpServer; private CoreConfigure cfg; - private ModuleResourceManager moduleResourceManager; - private CoreModuleManager coreModuleManager; + private JvmSandbox jvmSandbox; /** * 单例 @@ -79,6 +67,7 @@ public void unbind() throws IOException { initializer.destroyProcess(new Initializer.Processor() { @Override public void process() throws Throwable { + if (null != httpServer) { // stop http server @@ -86,6 +75,7 @@ public void process() throws Throwable { httpServer.stop(); } + } }); @@ -130,143 +120,95 @@ public InetSocketAddress getLocal() throws IOException { /* * 初始化Jetty's ContextHandler */ - private void initJettyContextHandler(final CoreConfigure cfg) { + private void initJettyContextHandler() { + final String namespace = cfg.getNamespace(); final ServletContextHandler context = new ServletContextHandler(NO_SESSIONS); - final String contextPath = "/sandbox/" + cfg.getNamespace(); + final String contextPath = "/sandbox/" + namespace; context.setContextPath(contextPath); context.setClassLoader(getClass().getClassLoader()); // web-socket-servlet final String wsPathSpec = "/module/websocket/*"; logger.info("initializing ws-http-handler. path={}", contextPath + wsPathSpec); - context.addServlet(new ServletHolder(new WebSocketAcceptorServlet(coreModuleManager, moduleResourceManager)), wsPathSpec); + //noinspection deprecation + context.addServlet( + new ServletHolder(new WebSocketAcceptorServlet(jvmSandbox.getCoreModuleManager())), + wsPathSpec + ); // module-http-servlet final String pathSpec = "/module/http/*"; logger.info("initializing http-handler. path={}", contextPath + pathSpec); - context.addServlet(new ServletHolder(new ModuleHttpServlet(coreModuleManager, moduleResourceManager)), pathSpec); + context.addServlet( + new ServletHolder(new ModuleHttpServlet(jvmSandbox.getCoreModuleManager())), + pathSpec + ); httpServer.setHandler(context); } - // 初始化Logback日志配置 - private void initLogback(final CoreConfigure cfg) { - final LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); - final JoranConfigurator configurator = new JoranConfigurator(); - final File configureFile = new File(cfg.getCfgLibPath() + File.separator + "sandbox-logback.xml"); - configurator.setContext(loggerContext); - loggerContext.reset(); - InputStream is = null; - try { - is = new FileInputStream(configureFile); - initNamespaceConvert(cfg.getNamespace()); - configurator.doConfigure(is); - logger.info(SandboxStringUtils.getLogo()); - logger.info("initializing logback success. file={};", configureFile); - } catch (Throwable cause) { - logger.warn("initialize logback failed. file={};", configureFile, cause); - } finally { - IOUtils.closeQuietly(is); - } - } + private void initHttpServer() { - // 关闭Logback日志框架 - private void closeLogback() { - try { - ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); - } catch (Throwable cause) { - cause.printStackTrace(); - } - } - - private void initHttpServer(final CoreConfigure cfg) { + final String serverIp = cfg.getServerIp(); + final int serverPort = cfg.getServerPort(); // 如果IP:PORT已经被占用,则无法继续被绑定 // 这里说明下为什么要这么无聊加个这个判断,让Jetty的Server.bind()抛出异常不是更好么? // 比较郁闷的是,如果这个端口的绑定是"SO_REUSEADDR"端口可重用的模式,那么这个server是能正常启动,但无法正常工作的 // 所以这里必须先主动检查一次端口占用情况,当然了,这里也会存在一定的并发问题,BUT,我认为这种概率事件我可以选择暂时忽略 - if (isPortInUsing(cfg.getServerIp(), cfg.getServerPort())) { + if (isPortInUsing(serverIp, serverPort)) { throw new IllegalStateException(format("address[%s:%s] already in using, server bind failed.", - cfg.getServerIp(), - cfg.getServerPort()) - ); + serverIp, + serverPort + )); } - httpServer = new Server(new InetSocketAddress(cfg.getServerIp(), cfg.getServerPort())); + httpServer = new Server(new InetSocketAddress(serverIp, serverPort)); if (httpServer.getThreadPool() instanceof QueuedThreadPool) { final QueuedThreadPool qtp = (QueuedThreadPool) httpServer.getThreadPool(); qtp.setName("sandbox-jetty-qtp-" + qtp.hashCode()); } } - // 关闭HTTP服务器 - private void closeHttpServer() { - if (null != httpServer) { - httpServer.destroy(); - } - } - - // 初始化各种manager - private void initManager(final Instrumentation inst, - final CoreConfigure cfg) { - - final ClassLoader sandboxClassLoader = getClass().getClassLoader(); - - // 初始化事件处理总线 - logger.info("initializing manager : EventListenerHandlers"); - EventListenerHandlers.getSingleton(); - - // 初始化模块生命周期事件总线 - logger.info("initializing manager : ModuleLifeCycleEventBus"); - final ModuleLifeCycleEventBus moduleLifeCycleEventBus = new DefaultModuleLifeCycleEventBus(); - - // 初始化模块资源管理器 - logger.info("initializing manager : ModuleResourceManager"); - moduleLifeCycleEventBus.append(moduleResourceManager = new DefaultModuleResourceManager()); - - // 初始化服务管理器 - logger.info("initializing manager : ProviderManager"); - final ProviderManager providerManager = new DefaultProviderManager(cfg, sandboxClassLoader); - - // 初始化模块管理器 - logger.info("initializing manager : CoreModuleManager"); - coreModuleManager = new DefaultCoreModuleManager( - cfg, inst, - sandboxClassLoader, new DefaultLoadedClassDataSource(inst, cfg), - moduleLifeCycleEventBus, - providerManager - ); - - } - @Override public synchronized void bind(final CoreConfigure cfg, final Instrumentation inst) throws IOException { + this.cfg = cfg; try { initializer.initProcess(new Initializer.Processor() { @Override public void process() throws Throwable { - JettyCoreServer.this.cfg = cfg; - initLogback(cfg); + LogbackUtils.init( + cfg.getNamespace(), + cfg.getCfgLibPath() + File.separator + "sandbox-logback.xml" + ); logger.info("initializing server. cfg={}", cfg); - initManager(inst, cfg); - initHttpServer(cfg); - initJettyContextHandler(cfg); + jvmSandbox = new JvmSandbox(cfg, inst); + initHttpServer(); + initJettyContextHandler(); httpServer.start(); } }); // 初始化加载所有的模块 try { - coreModuleManager.reset(); + jvmSandbox.getCoreModuleManager().reset(); } catch (Throwable cause) { logger.warn("reset occur error when initializing.", cause); } final InetSocketAddress local = getLocal(); - logger.info("initialized server. actual bind to {}:{}", local.getHostName(), local.getPort()); + logger.info("initialized server. actual bind to {}:{}", + local.getHostName(), + local.getPort() + ); + } catch (Throwable cause) { + + // 这里会抛出到目标应用层,所以在这里留下错误信息 logger.warn("initialize server failed.", cause); + + // 对外抛出到目标应用中 throw new IOException("server bind failed.", cause); } @@ -275,6 +217,8 @@ public void process() throws Throwable { @Override public void destroy() { + + // 关闭HTTP服务器 if (isBind()) { try { unbind(); @@ -283,11 +227,11 @@ public void destroy() { } } - // STOP HTTP-SERVER - closeHttpServer(); + // 关闭JVM-SANDBOX + jvmSandbox.destroy(); - // STOP LOGBACK - closeLogback(); + // 关闭LOGBACK + LogbackUtils.destroy(); } @Override diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java index d6b6b6d6..ef1a4bc6 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java @@ -2,9 +2,9 @@ import com.alibaba.jvm.sandbox.api.annotation.Command; import com.alibaba.jvm.sandbox.api.http.Http; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule.ReleaseResource; import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; -import com.alibaba.jvm.sandbox.core.manager.ModuleResourceManager; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -36,12 +36,9 @@ public class ModuleHttpServlet extends HttpServlet { private final Logger logger = LoggerFactory.getLogger(getClass()); private final CoreModuleManager coreModuleManager; - private final ModuleResourceManager moduleResourceManager; - public ModuleHttpServlet(final CoreModuleManager coreModuleManager, - final ModuleResourceManager moduleResourceManager) { + public ModuleHttpServlet(final CoreModuleManager coreModuleManager) { this.coreModuleManager = coreModuleManager; - this.moduleResourceManager = moduleResourceManager; } @Override @@ -104,18 +101,16 @@ private void doMethod(final HttpServletRequest req, // 生成方法调用参数 final Object[] parameterObjectArray = generateParameterObjectArray(method, req, resp); - final PrintWriter writer = resp.getWriter(); + final PrintWriter writer = coreModule.append(new ReleaseResource(resp.getWriter()) { - // 调用方法 - moduleResourceManager.append(uniqueId, - new ModuleResourceManager.WeakResource(writer) { + @Override + public void release() { + IOUtils.closeQuietly(get()); + } + + }); - @Override - public void release() { - IOUtils.closeQuietly(get()); - } - }); final boolean isAccessible = method.isAccessible(); final ClassLoader oriThreadContextClassLoader = Thread.currentThread().getContextClassLoader(); try { @@ -142,7 +137,7 @@ public void release() { } finally { Thread.currentThread().setContextClassLoader(oriThreadContextClassLoader); method.setAccessible(isAccessible); - moduleResourceManager.remove(uniqueId, writer); + coreModule.remove(writer); } } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java index fb931a45..e342b0c6 100755 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java @@ -4,9 +4,8 @@ import com.alibaba.jvm.sandbox.api.http.websocket.WebSocketAcceptor; import com.alibaba.jvm.sandbox.api.http.websocket.WebSocketConnection; import com.alibaba.jvm.sandbox.api.http.websocket.WebSocketConnectionListener; -import com.alibaba.jvm.sandbox.core.domain.CoreModule; +import com.alibaba.jvm.sandbox.core.CoreModule; import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager; -import com.alibaba.jvm.sandbox.core.manager.ModuleResourceManager; import org.apache.commons.lang3.StringUtils; import org.eclipse.jetty.websocket.WebSocket; import org.eclipse.jetty.websocket.WebSocket.OnTextMessage; @@ -28,15 +27,10 @@ public class WebSocketAcceptorServlet extends WebSocketServlet { private final Logger logger = LoggerFactory.getLogger(getClass()); - // WebSocket Connection auto release Map - private final ModuleResourceManager moduleResourceManager; - private final CoreModuleManager coreModuleManager; - public WebSocketAcceptorServlet(final CoreModuleManager coreModuleManager, - final ModuleResourceManager moduleResourceManager) { + public WebSocketAcceptorServlet(final CoreModuleManager coreModuleManager) { this.coreModuleManager = coreModuleManager; - this.moduleResourceManager = moduleResourceManager; } @@ -77,9 +71,9 @@ public WebSocket doWebSocketConnect(final HttpServletRequest req, uniqueId, coreModule.getModule().getClass().getName(), req.getPathInfo()); if (listener instanceof TextMessageListener) { - return new InnerOnTextMessage(uniqueId, (TextMessageListener) listener); + return new InnerOnTextMessage(coreModule, (TextMessageListener) listener); } else { - return new InnerWebSocket(uniqueId, listener); + return new InnerWebSocket(coreModule, listener); } } @@ -96,42 +90,27 @@ private String parseUniqueId(final String pathInfo) { return null; } - private class WebSocketConnectionResource extends ModuleResourceManager.WeakResource { - - final WebSocketConnection conn; - - WebSocketConnectionResource(WebSocketConnection conn) { - super(conn); - this.conn = conn; - } - - @Override - public void release() { - if (null != conn) { - conn.disconnect(); - } - } - - } - private class InnerWebSocket implements WebSocket { - final String uniqueId; + final CoreModule coreModule; final WebSocketConnectionListener listener; private WebSocketConnection conn = null; - InnerWebSocket(String uniqueId, WebSocketConnectionListener listener) { - this.uniqueId = uniqueId; + InnerWebSocket(final CoreModule coreModule, + final WebSocketConnectionListener listener) { + this.coreModule = coreModule; this.listener = listener; } @Override public void onOpen(Connection connection) { - conn = moduleResourceManager.append( - uniqueId, - new WebSocketConnectionResource(toWebSocketConnection(connection)) - ); + conn = coreModule.append(new CoreModule.ReleaseResource(toWebSocketConnection(connection)) { + @Override + public void release() { + get().disconnect(); + } + }); listener.onOpen(conn); } @@ -164,7 +143,7 @@ public void onClose(int closeCode, String message) { try { listener.onClose(closeCode, message); } finally { - moduleResourceManager.remove(uniqueId, conn); + coreModule.remove(conn); } } @@ -174,8 +153,9 @@ private class InnerOnTextMessage extends InnerWebSocket implements OnTextMessage private final TextMessageListener textMessageListener; - InnerOnTextMessage(String uniqueId, TextMessageListener listener) { - super(uniqueId, listener); + InnerOnTextMessage(final CoreModule coreModule, + final TextMessageListener listener) { + super(coreModule, listener); this.textMessageListener = listener; } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/LogbackUtils.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/LogbackUtils.java new file mode 100644 index 00000000..6493ca8a --- /dev/null +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/LogbackUtils.java @@ -0,0 +1,60 @@ +package com.alibaba.jvm.sandbox.core.util; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; + +import static com.alibaba.jvm.sandbox.core.util.NamespaceConvert.initNamespaceConvert; + +/** + * Logback日志框架工具类 + */ +public class LogbackUtils { + + + /** + * 初始化Logback日志框架 + * + * @param namespace 命名空间 + * @param logbackCfgFilePath logback配置文件路径 + */ + public static void init(final String namespace, + final String logbackCfgFilePath) { + final LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + final JoranConfigurator configurator = new JoranConfigurator(); + final File configureFile = new File(logbackCfgFilePath); + configurator.setContext(loggerContext); + loggerContext.reset(); + InputStream is = null; + final Logger logger = LoggerFactory.getLogger(LoggerFactory.class); + try { + is = new FileInputStream(configureFile); + initNamespaceConvert(namespace); + configurator.doConfigure(is); + logger.info(SandboxStringUtils.getLogo()); + logger.info("initializing logback success. file={};", configureFile); + } catch (Throwable cause) { + logger.warn("initialize logback failed. file={};", configureFile, cause); + } finally { + IOUtils.closeQuietly(is); + } + } + + /** + * 销毁Logback日志框架 + */ + public static void destroy() { + try { + ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); + } catch (Throwable cause) { + cause.printStackTrace(); + } + } + +} diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SpyUtils.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SpyUtils.java index cdb0d407..9d6a32db 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SpyUtils.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SpyUtils.java @@ -13,14 +13,13 @@ */ public class SpyUtils { - private static final Initializer isSpyInit = new Initializer(); /** * 初始化Spy类 * - * @throws Throwable 初始化失败 + * @param namespace 命名空间 */ - public synchronized static void init(final String namespace) throws Throwable { + public synchronized static void init(final String namespace) { if (Spy.isInit(namespace)) { return; @@ -70,4 +69,13 @@ public synchronized static void init(final String namespace) throws Throwable { } + /** + * 清理Spy中的命名空间 + * + * @param namespace 命名空间 + */ + public synchronized static void clean(final String namespace) { + Spy.clean(namespace); + } + } diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.java index 15fc99fc..4a657daf 100644 --- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.java +++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.java @@ -126,7 +126,7 @@ private static int toFilterAccess(final Access access) { * 兼容{@code sandbox-api:1.0.10}时 * 在{@link EventWatchCondition#getOrFilterArray()}中将{@link Filter}直接暴露出来的问题, * 所以这里做一个兼容性的强制转换 - *

    + * *

    S}M`#W7iBaebPZiSq!WxiFmq;fd%}jKn71=`$eD@S7te z`HY_;8A)!G-NbPWc_caBj-T^+GbKgDDFrt4d2A+`?xD z2|hRT*@;$c;a5i&enClluo$=EmwY3PZ&ct{9BVWoCAZ=>{xZDiqqa19ny7L9w)A|0 zL~h#>QgIyV`4=UDHTlT|WQox2Tj>n6YgSs&j{zUO1$SVO+R|QKOWGqkwRY6Bc2X+{ z!B8S08Jjb~`<)z-i~`?cMShnlbXU6wg|SGF)4e8vzC=f2392CHzAQ)06eW8)lINlI zrQ|j`QcJihhSzc6B3ihxHFqBCGV7CHAagX{k(xM~kXlRl2~+q5+Lo|^DQdrft0ykt zr&K+U4k{!+#?Rh|l2}9{egW4kE<=GnU5;`w& zbhPGZ)TK>Tmy&d;_e!qxO8Ct&T)>va<&R_?B>Xx!#*BmIlV$;JVJ>r&-p(8yVvbGb z=PbuhGB-~%D=#tnuVN?8VTk9?E*=JV;Ty*JTkOSmxSPc>CXze^(ij)b*zae0H)Ef} zgSeX*DOz{}yE#g7-2nFZBW5P71CI7$RA!i?G3;Xo(;|U!V#WQ67$io3wxfo2PYrDc zM**5&FFwYB8pc6lOmMG9p!|q+3MLgCT80fp!C?hQ6xOF~-H<#^xe3`ABQz=-L+#0J`wCs>v9;cUDY;Roewc#RQmcWeH=C5m a&BUwd_u+oN#qeu3l3dH{9vLFLv*W*@z=vA^ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$InnerClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$InnerClass.class deleted file mode 100644 index 708b7161569046626db79505b08f19d37c9ea596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 692 zcmb_aO-lnY5PjLMUAwM!ty=Y_(1TVm;#KLviXv2dPL(E;#58(&ERuoH%HluLwGA=&cUdNN>53tk14(cFB{*x%C8=xw zF`w#K-Y9FUJ|D>GM9f5h6;uOw*!8f-aKHGR{}pElZ4I7?Y{dJ~M8<}pa%AUrwRj;M z(1&s9@31hmUD$}WhgG_36m{Ux0{r&L8(8}t&MP4YKAqJv_Yi9oH-EDbpiYSLOEpGp QNXWq^HcFPfV;k$h56wfr%K!iX diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedEnum.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedEnum.class deleted file mode 100644 index 567ebe96214078b81a22e0dc09313f11c4e72fc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcmcJPU2oGc6oy~7S<_}2D`gBA1qKvoI*Diqu3AllYDkkRHm$5TTsf)Ny2^)0or<5u zhXe=-v}=A8;y9~lE4X7zBs=yw_WStwoc#Rt?FWD-*eb!m9SfVdYhu~NeG4XPx_MyY zA%j`#J?|Xvbs1I;lUNB~iT+-ch79(86p5rA@bOrT8M<#eejK_ykRJEAJDP;`+^$MwG-x^(ao9>H_Ic3biPQ*F4kO|r z;Z*)+py;$@B-IYX`acl&ogRashLWOpbP>3vt{g;Mr3vBX>sqbY@`EW+e~wq@OY8gz zb|^orZk#5*cq#RjtiHXfmF!eKZ(?-aFBM#IKctTSAiWyx8EEcrnk z5!YJXnTy7OH=-&c_80#T!|-hW=Cc}V&T0M0)SbI8Ap%TxcS$Yrxu#b|uR(kTq>pIh*+(2RZNg)3Og z>=Zci(u&*2(+il5t?CyPK4j*3x!H0P*KnQeH!>f6fScHuf^232Kr#Ov#wRen&mwky Wx~_^_+4|eCsJF<=pktSItG@w1_Fky~ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedInterface.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedInterface.class deleted file mode 100644 index f69754ceeb0e93eeb81b88d560d40a14ae95e607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmbu5L23d)5Ji8RIFpP*#51@~L5`phaHSwQKuu4nGxT(0cPTkr7CC^25?eRfWanR0 z!7upr_~*;dFMtn>N)#nt4XRBzMk}AK6N9(KzIDyQaZ2wUpSVP2@MS|!?An@ZrtZ{J zV&Bx^n+~j!lx&DXM{OPTtadMvl;cj6{=#PK7*woEv-B!)%Qioo{%4Mt-b=g_NHUn* mD9Ewj(W>rpg2DW8oWj6hkbAgkfT#O>#!KE+z8DNq7UL^hNm>X1 diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedStaticClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedStaticClass.class deleted file mode 100644 index 40e75edcc73197ff6b41d8ee2dbc9a16bc292eff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmcIh%}N6?5dP9`yINOUYp)&z59+~ySH*(`L0D9%R6NdRLz|M_U^XqjmM6i358y+I zv#a36o0!9VKQm+|nfH&^HvlIX_0UE?#&(RMK=;g)CY%ej4-TgS(b(l$pr4vjUoVSH z`#Z`kJHyl|vQzS=*576n=B5%D-Fg?a3Ob(z3Pz1BRct3$WvP85G|Punxk8dP8D%6F zt3p;(=9znvj}&wjq;g)%WiVD26x3XM8OYCckmI?rd2`SHZ=FsBdK0(wN?)3K)c#NX z@q$*AAVMd`j==ptO&~C+8%ay$Ox|P*{tJPNzc<4kTD+|K@M`L3Fm_o& diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicEnum.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicEnum.class deleted file mode 100644 index 0c2612472cc41aa43e5195d89620259a3a1f50f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1287 zcmb_bO>fgc5PciFapD>pLMgNqS|Eial~@(QDN$93ic~3(ia;)$){aRwve&|~BYqYi z5+Ec{&-^IFtQ(O;a3i*~U-Nd}o7tJ4zrOtd@BsTonAowgi(3{}E!?qTp`wR93wIf; zO7C&|)p3`>K26;~ddDga8JrWP{J0f}@z@_ToW5>*QOHFgUEvBonuL5TRNsx>@wX!J z#|ihM*ym{?10IUR8~QO%L_F{l-WtlFpE;_`2pSCei3n2d`$e_3eD7u}>iZ09ZK?d{ zY3Ta#OW_7|Vr8_QHw<32JrWba1EB`Io5WHL8nvZ|S#C$32znxxntv+7R3aoT<-Y|` zUYb(LJXE*@?E2FbBibN~PV diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicInterface.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicInterface.class deleted file mode 100644 index 17b9fe6f0d935709d33fbfa303827fb5a831432b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmbu5L2kk@5JkU3Ng%BRhv>Q^^#~wU%8H7fVC+o6k>d#4L7a^R2k4 zzSiA^PMjnrGF=erlXcW`GDiuNI23l1I2mTse!^nVa!3^BDDveUr+imw diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicStaticClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicStaticClass.class deleted file mode 100644 index 0d2363d7e10adcbcf18e5fa4c33568689e2e8792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmcIhJxc>Y6r8;zo;joWGKnb#i)i73ZPdbm5C|$Hq)GMevLqWWcevRE?fgqtf`vc8 zA0@s!g%m0X;ubs1?Av+sc&~5IF91%^^pHW-Ma@NBVB=Ir+MWyKTBGjaP$1ih$4a2s z(~-Jb&V6MD|Fr<^ZG{- n@+dIla%^LVzb012-&i%cu=%4^DNRvkV+R#%F?y-8%b0%$J~F1h diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass.class deleted file mode 100644 index 14cbb20206e0280d7b2ce1ea696575940a11b52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6030 zcmcIoZFAd15Pr^iaT-$6q-ompg+d#^X-fnF3M3`XOA~O(i)*`1)4(vYa!sxy%c&%1 z%18bYd}4+V`~ZFw!|G(6WJwv%ghL+dq|@#5?B4CJZuR#+fBpqv0Y8mm0MCl37Evpr z&Tz5fwta5-{BXnRv>3+9j>Fw`+w?r{74e*5w9;wX!U`T2(V+WyL=k%oQwpKxo4&B5 zY!NRQCPK-c?tO+yB~W&J?!GcDUc^g=@o>26WEg%V9N{lB43y@Gd2qdb$Z6b`aQIHA z)#Ps7Y}(W_xz)BzyJ5N_xbJoj`p3d!c(P@+TZUpZD^ttC7 zR@>!9#}~HIGJWfqyM}MNN8C5okA;0GtyyBY+~WRm`*8PFtQ*`=Oosj;e{sl zG%}IjNs&hi_V6EQ;?Dsm6|SXJP?5v%OcSw!%+keysf{j%B)S_Z>!LXbGe=#Mfk{*% zy&93$gmYx`RrjdV;*RgJ!glHZh#@VQkqs*BmbAcToL&oRq--Kiw5Xf#9W8psp05Qi zGCT0zr67rqpGXF^W(;*LM7^lw(vv3xTzXrON}ub&O?egV z9`)cx`o@mMu%`z)<68_b^&m$|C*6yoq6IwRVY(m_PR3BvqGdX(sbVLt)b@mbyy`gZ zpb~96l)N|ITKpuqregM>h#whdsvXA{E#45GplUH5O~vB&xszepp~_KE86D%%tLaLV zcPp+qrE)V|yKMgsse4L=tg0U>rc0aLvbWmweAl#m217xGkD}6fQ@EZlPZ`^5?T%~l zO%asHOKftx^PW}Ii1TWuj_z~6js@np{fJ7_iaHRBLY7+Y|}Y1%C^mqOgjiat}+6{ z^>{=#DX53|00sI~795vApMNk#=PPt)P|K(ty7vdz?{rbXG@XZK=K!wK^;kFn*DynO zzv4P>P){KICH)KZ&j^l4!Rhc}SCEF`CT`K0;XT~$LOhW71jBxlU@`f8g1pehpf5sX zNl1RS<79aMNT+EgH2p{*AT+Wp&VXm*_TCU_h-0v&7nJf7KpL8YP z&{~Y-Eo@B+R>Oyhg`Jm<6fE(l_^i9^3;0~R9K#pnDT4tV9^xwu$*ZsN4S8A6w}>Sa zseOcR=^Xggne;!ONxw{@A^l@TzoO_@75$o`Usv=`B>e`(#DJu~FOdi>9S=M)ZS;1N z@vupQhl%n#e2=ocW_U{ND1J~u7Q{_(NI;edFu@AgqG7?Yt%je;f0Dz`u+v|#lOtHb zF0mF+k@K)fb1+DELn}Aws(_J|8C;-tl*YV6?HK(oQu{9Tj#GPScnlNNP7YuA7rwnE A$^ZZW diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/GrandpaClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/GrandpaClass.class deleted file mode 100644 index b1028e206c437e20e6a81e40399a75a086c59025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmb_Y%Sr<=6g_D>9UZHE{DC`lVZg28rcx;kb)j^BCyi}}%tSM3@wZ$FUHAchlz3CR za4ixzd%J&v3`fia I^O$w~14XiZKL7v# diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirst.class deleted file mode 100644 index 8dca7ca080b046e8c26b1a2abb74c1b32cd2b7ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmb_XF%H5o5OWGNz{JiUIEhDqy1>vETtg_W(gxCN#oHKo0FOeX%!~|YOO|E(Uhl^f zz!nRQR6}db6_&a0gR#5HS%r1B58R%voV8-ZnMXZzvZ;Asg@f@8v8xI$nChXSE_w@p zryGmygp3cCdZ`>WEaqYZ35U`O{Z3U_jk)BwE$LX))`&v>-;VG6R6!w$H;LaP@-$+C F*$3dBR=xlL diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirstFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirstFirst.class deleted file mode 100644 index 66d0191003ea2ac58382631df0349937dae3b35c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmaKm%MHRX5JcDEV~Gq^mgw7KsHczj`}5f&c&j diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirst.class deleted file mode 100644 index 6651214e21304c629abc23ad9e78fce688f8807e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmb`DO-jT-5QSgOUyq}L;La21#sY8PM#w@&47iz9rBgGLkaT0GGU(E4x$poUN=#h4 z914oZ`9Ua8)BNaGTN!L+gc7nc=WMlX{tgB;rh^WC!s9j8^4NaXY6BA?yYLL74v&d zY?5|r{4bPnF=Dxqu;X=6t2e^)QBVApC*((k=IUc87X-p&m?>t%&uR97IToXW8}v7YQ(M_BB!t(OCOBeiYOb03wWGwot-~jMuu4*DLKGU*SaPgQCy|un zN|Y*}g;8mDyhnuD@jPqyBg?li#EnZU2shP1^Y=Zk8DW03p@U?Es|}kh`xQ;=UK*Vs fAdK>V0C1cS4dbj&vnq3Ul53G;1ZUfP{(tfZiX@dQ diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstSecond.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstSecond.class deleted file mode 100644 index 988d9d6b753a754709f04bfb20a54d3e23c4ff70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmaKm%MHRX5Czxa6NwWgPys7Z1X4~Qxq`K`ghY-l)|-ghI8XpZA)E$yhdI2%Xg=T9 z8vssF*RZK!YhY*7B%aTGU;~HdO2Sc_s4O>HZpmudr`R3`n#q9mX+#RWBS$#QBW8-N xOHX`|a#r+77$@xmj->w1f=be{;vcnv{UXOevBQfS*lQ^>P?gkW23Ca?tbcwAI)nfK diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceSecond.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceSecond.class deleted file mode 100644 index bbabb4f19fb56525320042179bc2b8883bd5df25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZvWyA8rH5J1o26N!qR9XN?0kkSBBCOBV?;K;ER=Mpg+1p_b?!s&U%E1%xy`+5Vw z3Ca>SC2S4s>Nq8qv-4u$P~9j=&?=~;JF(QlF*L`HW-@T$*duvo$r5&Rk0XV~#wQM> tGAeRRf|ELrJt;pVp;Br^@qg98e(9p8(Bjp0!kT{!6nSvLz$&|d^$*F#HfjI> diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IllInheritedAnnotation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IllInheritedAnnotation.class deleted file mode 100644 index 2d63669fd5cfbd399ca8548114f153d8cead6e45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmah`%TB{E5M0wopyg5Egb)HD(Ib|)azdquN;Iib7YT84(p7Qg*pN68{WT7J03U_e z^guX7;^47&cRafue|>*^0>Bj!81Ixu2FD|$f0GU~$77o!&z;gdkuD~SxLd!C*IUM*R~ZsSONf=-VYqLj?(}D diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/InheritedAnnotation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/InheritedAnnotation.class deleted file mode 100644 index 72fe85a11d1ae9361c388e210ec7ce735f522267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmah`yH3L}6g{SoK+B^%1{e^Cp%M$0SeZ}>qJlP6nj#@4C%r1J90wAoqQAz#2k=n{ zr$fU~#NgwrbI(1tkH5Y@J^@_fz`?GAJqP;?jbW0f5#35f42NC)La8(~zScT1!pKBl zOvOwv9QnC6GNwnF$xu<*&lrv$3Jq66PqnNYd4KU=MH6~&}YFn=X0 zt_Dv7m!aNsgFEkrq1o~J!@wVP0?%hSU2Wl$u@3gO)}Z~5WRNHs&8^V!NByANvxoiR zx=h20@1rE>t8b)dkj2xBIze9ot)fMuo6}Mgh$NHnCOkgl+7g1^fUf C5Sa7; diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ParentClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ParentClass.class deleted file mode 100644 index 1e1d7054b8c5b52eaf9eb1b1f6628554463fc624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmb_a%T5A85UhcPRYXD5#H%;;;3Qr(CT4wv1knV;y?1wzA-g*|GZ25vlZgjEz>hLE z3kT1HOFwG5D_xWN`ThC^aE^lps%VGU4bcg)7h+$aeyI!XuLP>cCqscCGN}@1^>m^7 z(>zx8nc|F*PR}Hi4aw?xzXSt6)=uEImzZ2qrelgpPG-4uRHU(amv7{i^D;43$*I?w z%*iKXWu+(kqP%<}s|p`wrNo+;!Kn^Oh1X&={DhP1K#9-_riKb~d3I zHBm<>5Ut@1ftyuX?k%f+rBaQ+!>TmhrTW4vJEFN}>-Y!y>*5=z#1v_8gbKT%f&eu( uM+IyJgd8`xlbi+T+UY06NBO+Tv0j2zG`Maq2C&5yb6}g7!PrhY-TDKPg}6@u diff --git a/sandbox-core/target/test-classes/lib/sandbox-spy-1.1.0-for-qatest.jar b/sandbox-core/target/test-classes/lib/sandbox-spy-1.1.0-for-qatest.jar deleted file mode 100644 index 46fd103d2ced1dad44ad2ed767534b9d0f03a652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7002 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 - - - - - %d{yyyy-MM-dd HH:mm:ss} %5level %msg%n   - - - - - - - - \ No newline at end of file diff --git a/sandbox-debug-module/pom.xml b/sandbox-debug-module/pom.xml index 20022526..f91efe1c 100755 --- a/sandbox-debug-module/pom.xml +++ b/sandbox-debug-module/pom.xml @@ -6,7 +6,7 @@ com.alibaba.jvm.sandbox sandbox-module-starter - 1.1.2-SNAPSHOT + 1.2.0-SNAPSHOT ../sandbox-module-starter/pom.xml sandbox-debug-module diff --git a/sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module b/sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module deleted file mode 100644 index 19000a60..00000000 --- a/sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module +++ /dev/null @@ -1,7 +0,0 @@ -com.alibaba.jvm.sandbox.module.debug.DebugRalphModule -com.alibaba.jvm.sandbox.module.debug.DebugTraceModule -com.alibaba.jvm.sandbox.module.debug.DebugWatchModule -com.alibaba.jvm.sandbox.module.debug.ExceptionLoggerModule -com.alibaba.jvm.sandbox.module.debug.HttpHttpAccessLoggerModule -com.alibaba.jvm.sandbox.module.debug.JdbcLoggerModule -com.alibaba.jvm.sandbox.module.debug.SpringLoggerModule diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$1.class deleted file mode 100644 index 776be39b5e72b3eeaf437f6b06d3a263854016ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3179 zcmbVP>2nih82`OV+HJ!2q(2*@j8MDVJZk`jg@1Q`xv1fyY`!&n3V^D}2No=j zX{P2LXD~XRkVm2_T~*CHFEE4#tSo0}Oll?{E*fcWkE>~&AT3ENqv{t_TNCFJFeEHx zkQ1iK?EzhN98Sl+s-o95J9dB!mo;b9wldst#;pSRzqNikOu! zCu1IONqAevJ9u|P%qqMo<2_ts=xTR*+nwl~rt8r(kLsGCxzY4Ow4C}!qx9V}X=Z5h zjMP;#r;Mbhd4^PZAJ=7kfa?-Il<^ThmT*JHC-_vxXZT#g7c#!YO$lGg_!_quTFV^9 zil(a>eD!J=c9o^}tZL#Ve_LCd@Zh3^Z)ALn?__*0oPMO5{~nV}lswfaMfmHQ<8sPc z#fzY1>BO+Pto(T1w&wioKU9s?x=K)dm90$*w=;}&c!hahakxFJbJs7TXQ`5=e83pL zTI7z~|5!AqK%vh2Mb!#+c(tn|A(n8#FCd95L!IW;2C;oYKOQE^SZYplGkK~D)Gmxz zsU5_q9mGoQAVw~YdBGg>{23cxC{Wr3CaI(BtLD3M74m4P__`id$S3aIXd&=~QSI#B zprDd+l4WN#Q>9Wt?jt=TuDx(FbG4}1q&b18lGcl0@ap=oYIsec933f_8eWdXHVBws zK76d^GE#!tXihXziP~zBk4!Oaqg(QOvzKEf4B}IfcocbDr8}!Hwe5%JEghAlK9ne> z9Cv-u|3_F=v4XV^qY6zm*H9@S`}}}ZJZ(x8lNAd3MWDY@@G9T^>v?>w*8%D3y%%(o z;mjI>*DwBSaU}D%uEmHFVcp7G>aqit>DrdAi#uv|MZ!A?!{Av>b-BL4u)UHuIovM@ zUeZZ6*SYF&MCnP_0(x>GgeFn`fu<(WJG_jmK)h!O!T2&l@dv1xh~GnC8MRB0?h;x6-84sN1%|Mh-j6-B+vc73q8Iz=M9f6* zA^`!>N=kx8=_II{yY8WmM)*fap*si#e+v}{RD)Cga!U~6ikb_Lt+5DGc@be`*WnG zi5qZnlX~zi>bt_paWb%voc;pMLjA>6-z<`Ej*?k5)CBv9XTbAPJwpGWLBg^2zi}>% s7l|Z9NXLozCE5pY0w+D#DH5;Hu9d#*p;i1w#MD$re+|xI;lz&r0BH?(ssI20 diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$2.class deleted file mode 100644 index 70f31989b547c3201f6bd3018a896591e989ba9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2786 zcmbVO>sK2^6#q>USXh>40l{ampdmaK(W))Aw&h`?;UPiVw7xdUkSy#Y>~2! z%>~iCETa_{Wn98#Ax<}A2D74>lkkd6nk!;1)r40iyw;3nq(w6?V*!gYmhif0mStqH z(t@R>pPQknpC2w-_WtH+7FY3~D-Wn`+Uviw0L|Xxf%q@pOa6R=(mm z-15|A&Ex67V2Yussu_b0sTkM{LyHj0j&AvIlRlhg=s7K?sq0l!bv3Jyv$s^Otg9u@ zE337&>QZ1sh>c!JcLygJUI?`|?LvhdEbv^VsLqIXSu@I|d0#Cc&g+)$U0^U1{}W>- z)GpNX;Z=s%v|XT+Xiw`FU#OTl?yP7zgEU=fJFgk5nxhN3ri_V58I+V|acA1lT$hu0 zHgxM_!ycTZz!lwHa_l^J-4(mcFc}`c2!mI}eWt9cy}@V2cxw1MLxZnA$c3=W`>!oS zYsS;^8}nMZ7N2BWJ}krNNgS!UK*u;7dIU#q2dn9>bG1E!+&$jk%Y4mtYOzucG03x9 zd0zH(+j1qmO>)MrIC(y&i%aYIcWRBVYgLV|ch<@qwyRskdG3|$f`oSzybDdi0G?Fv z7#>&f1mX%#BPSuRpa8Dm5j-kkO+gVQ1v*L$W1`qj?686nj4D{i2E)*hJ3i#bZ|a5- z&+)ilzwz95TomHDIL+7=wG17?Vb##AqPmz{=XpK~=&{ z1zXsb@ScMA@d3lbM+nOm%hOGMcw!8_V!yG&-TfjQ7#I+Ne<$mJ?}#y`{R`sT$l1 z80-qsSSC;`^UVr(y{QK-bIX))d`eJ8G$C3)6;8~%l=XRs`=mRWmA1+R&hu^oh@jl&wWQXlJSV=i{wI^ z&;{iatg1`Z8N1?>rbLfPg)gpAC5kAIP=W=7QfEYW%{6kUwf0UO$lZy0%Roz(QjvSX z#{XP!=wKamprb=4@-Q`zC^|@lps;EdH|qQgYHg~1<3rquutW@dSjboZku)rZx%+H< zJXwZ3vOV_$I>^H?N~%3A)3)U~wqb}5hE7kEn42<9UeGBajcta$dTcuIpadz|5vOmK zRuHKmh7Li9Ku3q*OTQ<|^m`&v`WlMT|1<_^^$?A&k=#IiJUOxpmQ3s-lI)M|BAVPo zEScOvWFHN?XuM5pB6x~gnR?($bmJ>LO`~34jw692NrWWGn$RPHR%^Q~ktD1-M|L35 zzv(kbvCk2UenHBp58FsffxSA&&O^vfjA5MSRa()2Nc%;q7EIt7!W1$53dxTuJ8~Dz z^U2XY$hQ!?P0lyoLCY;n({$x{8p$-< IPd)wq2DX(BjsO4v diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$3.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$3.class deleted file mode 100644 index ae606de1ca2a9dc508cd8ccc1dfb3e3fa382b298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1584 zcmbVMT~8B16g@+0mzG5;3L<`E#nK8>X^hblqNxx~iY63Ee4K74?UL>8x;xw8FY#~a zgCFt1`0S4|-q}T=RZP=uc0O+JoO|w_bN9#3uipTyqnbqqH*+wsWZ+f~1>DY&W!b~?h426?!@LA zL2THrtu`4R701L_*=I=Cy|!eSY1poO5%pR!*b^;>EVB*I63)H|Y`s4+rZsH_^SSHF zpzeq;l(c;~Ui?CpvM?;q?aM$hOm7`p(pR?U?!EPi!0Te;K=cK7gxldw71(a4wlZd< z0cc&jFvina{uP5^`Ja)G9bdK%q@@TZ+q65bP*Fg1v-Knq88Ey%fqLXT8u4dJ`OV1p zy+Fx!;Sb`*Xs3roQW#8olNjfkUKChz+tyb+H+*1C=SX7MaxKRTso*SM`vkdXmyqJn!S&SQ>RVLZqxLw@*f46HM3jD&Ye$rTU3@@NjC6Z z`Xw?G2<=Qe{ktEk(>;k8lR<8SX0&&=x4XZ+z1_XP|M~q-0E^H@5XUEiEDG{z3=)8^1n0_|c{RVIc2x>v-mDpxqnnK~cbisS!dEgL zp(Nuyye}hxD>AO)T^ZL=W|$jPCf;e4KA#ve)6V>~libw}BdPJ^uFY#dC$;?~e_biJ zleBG_L>b0~M~b1E4dt=6!)vaLbv%}_A;=SKN~p-#!c!UBV)0DI*QiSPM#gh|%aHJ_ z&*`oJ@Cs;ha#F^3_+G*fGJXV|b~(uZ!AZD89U@3mT%n;mE~i@e@4j@rV#oz44TkI8 zqu)m^pTuRWX=`ywC1HC{ak$+zxa)ViHEMSipRvh*>2Sx*{->DJ zwoHe6SszY`+#eH$z23L3w!GpzIYq^#9@?PFx*&Ld-uY4y(-Tgl(jKCp3_bC_1ff81 zwN5a#j%`!by^M!=IKxgtS|be8m)CQt65mtz#2fmOX>TQ%-DIm>iy%P_=idC5a@ zimeu}>#EC*eTIpCJc_%Yrj!s!(xWYb;WEPGnxcErKEo8IX-`=F zl{CUM7H0lJw48Z~P<%-G15!0S`x3*IYJ`T7N;OJ5;X`Vk)uAJd9zw1hVeB_t2;rI7 ziC;X#_z^Ch_;G_y2bM#Wt>PwILz)$_K=Tz=LY|d9|B^m(&%Xjb!pG!Y6c3O>nmo*q iXA$DekmM}QLzu(7$5XI?cW4$T-ZdzgxIaO2@B0_#CZx>( diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$5.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$5.class deleted file mode 100644 index 482f742a3d3af3f992d772dc252d838e1885b906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2801 zcmbVOTXPge6#hDU8M2u`3^$`9izIP(6PSo1#vlT@NaAh+y8%q_);rtmPMDopW@eM% zjRzm}L949Nvcx~&GZsOx%FDCA#2;ZP`2j_7i zg(6BREaIY^UFybVywigvENi%;;a!HFRc;S9Jj)4$$8aofx^;uwR+*Q%v9ek>eC|}r z?z+JnmQf3WhS8EW&WAb^EfW=C^BV=9fz2`WN~4OCcg<@Ix%>)W8#EJw{Drn8AZ;zt}VDj`u*+0Ctasv z1(xeD40kpWdeD|5?PO51{J}AX6Oo~)yOpLbjEX2XtHzWZi`;J13W_aFoFvzSQw)D+ z{-=#dwa6^YZFj#%BivcCV=z05ZVg)Y5<`5_tq96p-g3lzvtAb7A}`y->8Gr6`x5so zxo$DzGRO@2tm6o8(&oM|XgMBv?QJ7Ic${Lcxz6+|)e*yJbkJq=gp@Lr?1XeYp%@I= z$iug4QG&~@vy3NDIxDWao(K=5&L{=kyjI{16$$EO4ev3erq@l;kd^9(>yq2_Ofh50 z2=3ilVn<~&QLLvO({_E!sTM>~b1NF&*YN>9)NvStItK8Jj%V?ljstjJ$3diZ9Ks7a zhCs?kw(D~h5@VC&4Cx{N=#ZaYvurzE7HQSn#LLwEY}$2b#?YsF+~!WzSSYUuGtg0n zsiOi@gV1pmRSh*A7FKjzgRP;i!-1=zq2oF{4Ze;5TtidGD%NzY%f$^HAK_ySpXm4$ zpHW{%dH$FpA#jV*lo_@yKM+)nVQJ)BD~8<)(NUM6*z`sMzz+u z;R|oo7C{KD=Lla*A)_d+H-#TeJXXwaP|*lg%CU?r=w9it>Zy5NR}J{^2Bm;NyGre{ zQ}V*H38fUnP|3@?PL&#pP_!u)2z_^F=CUCWw71E^rfgGO1h3G^EnI)F-jms^7jk8* zRz(mV`lvwLxlN`+9(5e`P@PkEkB5N^J#A@R+2mbVc@vutZrdG;N?H`ElCSEuv*`hu z>2UD&m=W<>W>h+!;3*_fl}Jm_)KQ}oU^B!hxHM+6%M`Sx6B;TFA{;Kv z=JT_q>B)upsS?A%FrHgod>~IL9PDUt%ez3;&eyoKe>fBIJhe?`myxFLn-mzHMzXI@ zq8C7v08CNBFhvQ*6eT26l%S5jo4V*fgkjQtk!H(?(Kit=oEzBy%Z+ZJD|cuEvD`pn z1M%EIas!FnfVP2T?iXmcm41fCB!vu|*keTzBv11_-dP-Nf3r1=WFg*wqS_M^Ienj%Q|YTtex z2FB>_3HW%4zEZpJGVS*w_7930UZIc43NVB^F4f4<@7 zzrr&hA%svrfR93qO+*nA5=HV{&g{<3GyCoPmtz3;VHR-_l>+iuE0DIHz)Kn~C*VrL zu4=fZ;X1>P(SPMd&Zy0&h7(K-Ep0yeDG!}7&1qD z4EaZn^n5RR%#f|s4;Yl)z@@|GmgkF3Jh4SM;I<@7xfM8E9`Mjh@WQy%kGS)aa;KOI zWGME7ICMnQOPp4p2|FJ4xSWpKfg4NF81p%&@Rsk$VCMP5wunZ7tKo(QL&q&tbrf+% zM-6oyw{eGIJ#jH5_lIUD=*P~e=?UptVHkuuwvuaiQKuh4-J6T~yPp3h~v4743;&l%EUdX%wm}Wt7&+S66qPDb1A8Z8p>$@Vs!a@dSL~tBo$mBzClzb Qr#wlN@|0u~H=nHi00W}v5dZ)H diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionFactory.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionFactory.class deleted file mode 100644 index 289712bad699cd91da09a6010d08a8c35fc28f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmbVIK}rKb5Uh@IH*O+$@dqBv#R0)nj_N`{5zGsEW`}i`*`Ba78{^kJ_y8XzPI6Gu zo0qPpsOl>E{p0lwz$K1zOma*KQ?buW36aHE!utubAJpyE*mZ2Y zEC|KQ552KvPmeRMpO@ ze*4e9qDnT=_b-H#ztn6gV*6{yA=r=<-{l{4YfU6v{VP2K2&43=gk!=1#%UYja6dB? M35%p4wu_bq(Mn-WD-}SqCqR$Y9RFD+jL~ykW?1 zDXrp94B6G{Aw#Zae9180Qd)lPhpvncgc}et*)pC84n?FA`yR~29c3LXGL-A5p6tcS z=!3H!g_oLI%cvFzYo%rQ((+8mMW9^a3f?^qxfR-X%_$F!-w!1BrQ2`wokV^UL9er$ z!YhwhSJpQf#{Wwy(y;=PQ8s<}`6H04EJDuf^B!=R? z=|`SysASs8@13kA8T2l7?FGhCnOzxoj9-F-0>f0wrwniI4J#(DC5HNc8JuC_q2)cd zE4|pkGDG8u>J(lOMHZDbei}2Rb10J>r!z;MGUoB@^DLpsSD=RGv5+s^0eP_WjsO4v diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$2.class deleted file mode 100644 index 34134ac66c118068ce6366181e9b4e04546c3283..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmb_a+invv5Is)PY?>yt6jDl|<<^G=B#bKYR6s}}L6y>iXjO?v@2-_N^4ihbTiU;Z zr%E940sInD#q6d^xIIxUdB#4Tb7pMMxAV_m0c_(z9dlR>aI=mQ)&krLa67;TL-m<5 z%D-SJZ?%sYDjge3hQ+=zaz9H#nI4Kz6SCa5k6pSByT-`0qlI(QF}&_aHsM06P=tbyjuY;Li9>tB6B}n*@>qu1fWOM^JE6zJy#n6+ zMRjv~hhf3U54*;BVIoS?-s+FUvEW*m0YC7mGJ~D=PtcT4%pj4@i9vCfKS&Jq1DmCh z?5X^=t=}tooHOWMx+c=rQJOvJhc<2?K#gHzrnjGI{njeuWjalsN8MxS{+BmkSej*f z6OLr$1KelmT~fU#B5%`ElAqQ+g*unip7ccPZ=Xdy_w=9C@dOp>Y3g8V@Dfe>3EIum zij!yL=N_JceJYOYWUB@E9SgK>OajO+(T?FNmdWPi=O`C)^IuSU|L6?mj|7%56F4sf uRwh9g0wC%&TqlV#T1ET{Zji5_Np_Lu8l5z;jw>%$3C%~13R=gVYV8M{i}_Um diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$3.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$3.class deleted file mode 100644 index ee0e1c1a32fe7062c9a7d3e6ed6d2f9a225e19f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmb_a+invv5Is(|*)$~d0x2a>T4)~{kT3%AR6s}}L6uUF+Nx3?y}MT8XxEO`-qQXR zJXNAnKY))y%xVIxLZRBEg$!M-1qT-q4G*; z<=!xqx7$YyUdKd|VWF?I{E#JqOb^xRNc9~%sf?rA8;P8of8 zHm3CYuGTW`#KKx>8Q%9plW-BMKm>x1P7-c~jskPa6BA{zk9fliPe%jU62^~_I_I7_HP6UsI9`FN~Dm~a~{{&6>#Pkzstr!${`GdqzJ1|)q z%AU$^+x)$gr#XZEOIL@nu~cSHx}k~c@KI%G&Ghy&?NlPCh4YMu4Bh{7e}=_brH{c# zhR(+$hTb*Rdm?luJtO&P-&3e_P3_4%H2?NcG;c5eNgdDN(LB@i(r}k((JN3iPdiSY zk)L~f4)&!uu92I(~AF@@E1|m$wxW;jv;|4?hnX$&d zV5n|)4j5`(7ios&fwB5co`gCb$}lEmb>NhY4`gbJ_!O-9vB@}YF|>L|N>9CUc6dCc z^yaR$I_<_X%XG%@dZ1h)WNbniN-;T1L?&$%x+9UeD37&>beNCCtHQpM@pQab!dt(n zZavvyShD)VuFbr(ijL`Q4<_x`y@0C0(81ybZt74bYF?-sNUDO0egW+DOmwOWn<*drnR9i2GCebeU^BRie+YG(` z@)Qg!XP0;zPPFnIcNqHTRPRgWU3yIN^Sb9y_ng|Z)@c9jjD{*yW$p+>DujZA%B zp-CS?(ITw`c}9NW{t4KpayuYfFF?kzMC;}(f&2UFVwje)8wUk@@g39{`C#ZfT zu!1vzpcGh}C7lX@sF!e=B&uka`D?gBzJ?arWttnb)50b$yj&-=7!4|D6F2LPAB0`{ Aa{vGU diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType.class deleted file mode 100644 index 48f8bb3443606c6019638fe5302d765531c5d7be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2484 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 b67B`Ujo^MZnl$W1Hrfc^;tZ&dPyYKK9q5ND diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.class deleted file mode 100644 index 1a4b653af9278dab951de7e693511b813123c5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4829 zcmcIo`&%2w6+I&)7D?-pU^_8!n&KGS7z}GWcHDrQ8WY^mfK3oFRoygRNfWeq*_C%! zfS$qi3XOO~&)!+*nu4a&isfvPnR@6{R^NGx07hY7w zd=_O`s#wV48f*=V8SH_Rg^P+Ru50iz*au&Af(}$Q)G}DYauy%KM^*8$EIy7;X!xXt zmo$7zK%a0N>5bW@?@M2xYtb!LZ8=_(PB3Q%#j^ASo|r7Ui-u`i1+!op3$;bVH=Roxoa@mo48a*mBfy+`tSh*WqUSCl}0`NhxcC#!N#P zSGJ$E94mNIpsnxdWr5_FTap5ula?bdRu>D>n>8trkSE=uX5nSF>ecl!KsRJk25(4a~^vRp|#KJ5KW} zR9cQGUD8Eo+6)5eISRfa!LUtd-pB=><;-*U^y2yit-?Xh6*$>a8)b(OSYxg+9j&3L zWLYXb9#D|SJ|jAo=>uquu1~ikdeU#KUz(Ce&{!;<3q=XPLMjY z8kAjnXO~?yodwH07np9rbcbjI9Y@hmmWwL9=y(;MUj)F zJp9*W>Dj8R%7%w)_`HrU;EQUjFXq4T0fSqGN1z zzG~Se>FGFx!wTj%b$kmqG`yzcJ9u5kckz7rs|_|_pZ45&o*chHf|B|Z z4L{ZKGyGD=uauxOcO+=Dm-L=cvTo}5HGU(|udL39)Z;omR}T3H5BbjzWv11}J!7*o zlP`?*m<0xe9xFH?aNl|yyHr?^#X!T$I)01a(M5Iq9)HmBNBoJ-s^ibfD^9;HfQ*87 zv~EMZ5_q)LB4xKI=nL!)HLzS`;?i0~*`QYxp9PM`Nekmk({&pLiqSU4aa7EYFooG+ zw(Pk}QO?unWiV}eCeMh-XK)1~h@giil;Sb;^sPG4m90%z0J_;=#U# zED{*19X((i+1H4pn;wK=kOHE_&MZH{7{>k-{mYzZ4BOL`xG6dM(kX?hjA^ZJVygm5 z@Y%lDKt~^Ld1(o8xlVW|61aaNJij~z7nnO$AQLETlNjOyYl|@62o1ek_8@Dq`0rL8 z^{||xT`kF6wXk;En;N9+j2`&|D|PA>g&%cuNu(E!C`|oNQeF z-X0~=qvGw+g^n+A+Z?(px5dsVXLG0ZG`{va61{@hd|SA%jg)wMZA%QZ>XK;%QBXba zxz{9RpW5Nzw2+i_o#!HoWl6(d1o=zQ95L66(Uo`UpP( zw6pGG-Nu@CVwMB!8LS2CRR1c(3L6O=W2q(s`!UE;k0xMDbD2m zo*k+$4pMog{?aY%%J;v4cdVjw;7#0D$Nd7-zbk<{b_?9Xp8Vh{_SW%$8hKES?92Ca zsJo7b5*SVncI{979S`T*26Fl2vD{mDXC03uFgIAoy9DOClXdh6+(hSas?qLF{d0w2 zMsXDjgs=cRtRo7CkmcA(TJACIB_$7$jA7C-%GZcIZ~j+t1M_%|D{i2M*F!2#ku0jR zM$uA8s-kEqBsCGX6sc{L^Elo|@{=KL4mRZHIactC H_VoV%5ec~K diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$1.class deleted file mode 100644 index ee410901a806b8c7d7a827af82607f9cbc5bc9b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1556 zcmbVM+iuf95Ix(Zagzob3N5AFODJgq-KGU0NU1=j2&5FGrj+NkvvOQHcCgo>zrmlt z0~hgtc;=%Jvvx|0xhRSw?`1N3=FHg{fB*62D}Yt3<&neH0t_q|xK=G;qT} z#XyxIr#enpUSYV~wEQj?u44*Q@cn+5hr(-{{sHg$?Z}n9EzQX0kM;OUD66v_n;QhN z?s$&cV7Oly5o2kOA-n0fCBszH@#OQUYsz3(m@ZkSo4zI7JrOv1KQLxBZHD4A&y&HX zE5cCH_TFgm%XP}auzasC14XOdz_D!^FtjSoebE=(6`svoDsVizu{2_g0jSn1jFEI^ zf1oog{x#;2;|p_NT8d!uEywnRiUQIoznPHNq~9Jx9XJn1`KeO9R@CeHfs*a=FU0lX zPNxf_e3agPGg2jel)N;Ln(b9238r?hr;`Z%nWyiI-VAfVf>A5M~0oGat?SX zgT5;j@6d(vI9y`bk*^~eszzKO|8om_z8A`dZp%zXj|+ZabI}u4M{;7>rN85*SmRq> z)P1QOm%7ierP5o<HpHPVrY`WThT>QD;&CLpfR2h9M(1X!u0D}}y%8G0vC zB#PAVe%?+?t=$z)2tJXeZJdKlZ(m80B38yU1#nH~=LOfr@C7QFi bOe&nB)jVaMqgg*0vYvT3N4hLwJ~#0bFd?v? diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$2.class deleted file mode 100644 index 415404f8ac0b576bac34f42682a19a0a57459566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4246 zcmbVQ`Ck)P5dXdq*br7kyscH#U?HeMDz&0kjeC)nu1$mP4(*>}gwj z-}hX{8fByaBZvZX$xe_t-$j4#% zI3gdtQPiWa68$(@g<}|qlJ}T=3`*Yd2u?)tI8H{f08dEHsR*8w98Ez=GSd-cm7#7;l)!0H_1A}Y;QNyIjg{p?9!bfE2H3P6&LZ0iVfJPVm%&E z(SSx3aWtvegl82zr{V=%Qt+aRm+-QRo!F&fH}e%^J2#IR;-dH(zXKIF{N z?5ysn_z0I3e5~SAe5T-Y6<^>>6<^_N1>dOn7T*aZX9aA=eH2)wd&Rh|uD(z=rtxcA zW_C?ozL0IJFKl84xrN*<(Ozb$_#Qtf_)*1G{KOJFD-=_=HP$l2%7Ei9`-m(k0tCgJf|5qL?=YYfu1X@E?VKBaN<^`egNGxdB03fI)g77uV_ zmv=`tdUs_1r$hz6n~(s5MyeYjlyh7WZ<>IJZP{%cN%4$RQz{@enrJCC?PiK@U?in=>{Sl+Cf$ws=s^vRU^#jN>^zKZ)ZgZ=6g4Eb7Y&Y6iG;PzGZ>v>u(qn{I@If!H_7rU zC|q)kmIr8g5DRgf)=%)YZ4hg5vINDtqPOdC7m6K0D5|HTm`@Zn)1%OcB1IG#qR@%r zG*M)TVrX_KLh|P32mhiU{MJ9QV36?;H&9!h$qMKy9*$@koPn9LpvTX41nQ)@9Yt$t)e^8V;U`Hects4>}e6Za8H*)6OL zp^H>_!%f_O3#&pHxQcq0Q(IU57uF1xNx8nk@P_MH+jkS|JfUmU2;x}HkC!(dK8N^5 z$R8(vlxJa#w$Hox;!KHZev;TrkLs`n`_SPgNwSDJ$qVfPYL+>rAaqK>!8KHW$PL1y r=;RpYi+wkp25-&fJZj$G0&*WAxtalKhy33`7oOj}jA63y2`c{s*4?8Y diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Bind.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Bind.class deleted file mode 100644 index e9df0ea20a3db865380665b18a2bb6015cb07165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmbtT%Wl&^6g?B?Q5!?kLU}(z8>BQv7$G4ZiL#&wfk?|Ds9lfkQ8JM|uKbAj7bN%v zSO5|WK7fxx+?hndDq<64c|7;dopaAQGyeJO`wsvQaK}a!*BsPv-J#iy25vRbVyNd6 znYHgTJQ@Z`?D0tY+~?kO7JC_2p`X0-;v_60;f2C4#@=&19`ihy9GG;EAo^0te8BLu zvm(as5kqx92?fLYP%3d)#J))1azCQX<}e9(bi`As<3+NnY15`>QiTleE2TubAMq>` zl!{f5^3&kZpOXvT1wzTEpO1#jbU!q3; z32QdBSejMnU4spBh-L$db;jxLeF5u!L*=unIYVQeYJm4}X}mbE!dWyaqI!d-*Eg`a zzDJI-TeydxciBM3N(~swtpZ39}QeXr~lf`vFh@Wn|I!d}W=~m(&LH!vz z5-}PLpZ!tBbIT$_{p8x@o_p?j?s=Yb?!7;Le)$ey0gqFVkX0~^85yH8?kniWtQhnp z1{4bF0x_4wkg)Sf3=6v;;{iirt*}ul7Z~J9;M8h%z@Tn=o*k^aywR{53{Q)eU)Q+-FGn2ZLS?(WMU%?&a%tBf zvh>bsal1gX{HyNMA96PoO4l;k?z2hje${3eC_0|K71m8VsBqJz6*;0Qy=E{n#RGoG zb(ecJ-Dn1mSIcF)E<-E&7I$}e;0V4pspRoGach4QQa6_!&uOkOjQ&H>$ss}0Gf&+F$_av=s!O!Q6NLya($1K4QH|)#h1(j+iH^f zrT-E_`#O&ydOo?1^uO=PMK!tn9KFSUddO0KTqp;~lK9AyeqeAy^hzL*!exwsVVu01 zWW}enz&@ep6tNHFF-*{yh+;>CpTtxfzlfe_RnesB&xoHw68N4A_$#!co}q9R*P=MJ zlu&|k9x?g>d3t8*1c{GPxRdUDyG-&(I&MXnG?KWDbX$l`g@|wUE2KS5j-4QRj8x<( zQsneTjv9}gzQi}e#aeWY_oNnjjlFmaea11E5O7wn7NvZPKD?uP-s3KgNa-2*9r8q- Q8C)W(&<+XrFqj|v1*w5Zo&W#< diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.class deleted file mode 100644 index 264ae81dcd3a177d148f802ed4ecb084c871a5e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6374 zcmcIp`Ck<09e!rn-C1@=QIzN=wn0UMT#Ht7fH53_NCSvqw8W%#*qy-WGJ~_TK$D|QMjcKZ)G3kAz_kFj2Mt^JjyzlHTEHH~7O8LP1&b;%!-}iew-{XCG z?cbMQ0k8-EjG_*wqo{`yK}Ni|5o9CSAHk%GsVE|tR`FmtqIj$L`jCpZ#qf4K9K{+u zB1Yb!;?XG9V@5RZ6yM&Z;<0jmd3O|5I3t?JV|Wjq5Y2mIcpuKHcruDDcq)dc@qQH_ zh~h?kP`rF7f@f5GIEs(pqcMC89~aFhVt5vxjNnsIY{#cnd`87*ReVmx=M@AyOe>{8 z>#;1u=}haHjFC~G9&yakQNvMCIc}%2X`^e>u-s$1n;a8^xAi9N@r0f>NAwXradL7z zkaJ;9-1dgvllr7i zDuuzsV2&79hWDG6=^ju}R=evcIq$SnhJuP-(=z(A<0FQ1L?=PA+-oQG^ikb0#d~fr z=#H7(;TB)cJvkF8V9-0!;D;TWJF_|%($+Y1n#$0zIagfcBH!x_N z&KeoFb=hf|2?}kr3R%jN)`0H1hGPl#g%T2J-5N~{xsGX#a`*D_xe1!&q-%PDil#^r z&Jnia<2r9?)-}_KUXwh~k`tsr!V32IiY|;MrO3@q40vm}JUC_~snY9&d|i%XJ3{GQ z(@A4Om`uUlzC?@kDb2IBSMnJ$b56pO6@&n=6PGbeB=_1tDuGPm)Fv+9I*g zq@K>w6yZb;h*1eu2~q_Qc{(UU&0-w+jm!aNd3F|JM8H>-ED4bL`B%JBzoxmlSwUc$O>{^`-ELFFz^aA7Y!X35!LE}0_gD|u z&bW-mL|njRVu(qUHRdp&Tkvl;LRDjXi?Rs~TRxw^e*c!*}sL4d2HPRs2Z9kMWv< zy?z@M@jl?#qaq*Wlpv`7RK?FU{2aepv56&fzt->@{8qt!i9x2rYTK$lz9X}JN9O*9 zYTd2gk!h%w-&%HLnxX@Oi|WoJgS{s@tMw6PoNCkE%G@}YRXrzC@tlU=;rEO<8vcMk zYWNfW%-EyhF9NVZE1OOW1YcIL@0wJw5TQ)D*R-z4>RUeb&nw1?vg495x24uMK9*FhEaJi)UEPNUyA<59G9rcAftAC2Fg5)QOskGDP`JJ zo3jXUDT9djf#f#lGUkF0vhW}Q?-;-{K@W2v-}~tQ`Y3bY#yrIZrF6!yQnHq1Iau2> zPoiA4EeP-T2ZF#YV~p<+NAhJ`@+_rbeUA*b3|rkSo<$B+FfzXc$ZzUvm=b=Hi{mwm z_Mp~Ql^*3Vtz_C4xQ^OZhcTv4nxdrGIA5;0VdMX)zWg@S z;GtELEl-m0w5?;}6iGBJkZx{xX!VquCrVlNmB#Z@pCac`yx>Kbx!|}s+LYwh*Dh)fNeUc)))qyM z_SB@AG{nt-IEAfDQ(VUa-a9AoCTIy?^iLASf!Mp6Nb?q%(m|FoYmktWxpS!imZQ7TmlttISN@*#Xl6Z`B7LVofL3gqKICG z1h(=nu^tK<_!kg0Kl?ZE_A<wA>qf9JT8ldvV6VU4`%Pt|I3Bu)*UjSf0lwWhTo(^EijnGBYz?3#91m4)Q?FwCa9RD( zaIj%$I1~>K4Tl?Pf|^e@I`|vDoQgBY#BKI6uUp-Hb+Hne5GM>eh?B{F0 zoATbp`|5+Zp4w=kKHBjxl6Z`3&cMOrTyX}E;t8q!gOm%HDQIv;+Cji7?B_V zuJd}HcNJ8=@PK}f2rep=y5|w8tUU*{?gDnbz@ah;wY8F=vjp5zSc|h#7|$mvkb=Q^ zVtW;VXeW1F7r_Gs+H>A@35uZT?_HykQW?hNEK_2nij1A)?x!+HV>|;3b_NslSr9}~ zqP~u(2cPQD+_stj74Uw9ONyWM^pCq}qZinp4@da_getrmF6X}#s_+B$PqY6C`(NO1 I_+_~Kzor(E!~g&Q diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule$1.class deleted file mode 100644 index 811cea7bf2dc2029b3adff47f4a28418677623d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 zcmbtUZBNud5PlYpE0h8!AS!Zt$|?7vET<^KA;b_&ObQwyeBZW9>7~~tZI6%`f0T*h z%LjjeKgu{Qr@UxGBA48DcJ`T>XLg?U$Ioxy0X)L<0Sw@l4js33Org||J38)ST1Of8 zblk_xAS$S8sA;G(_1aBR*c_aeIQir^)oQ^NKBdw0h*AH#E zAA2e=mFvoIBRy+Uo@Foa;uVI~%4HH&cNlVO%8?8srWeS~PTP{k_H%zS3w}dHD5%Lr0vQjNR%7Y&#>5yW%yRcoiOkMmtj7;FR|}&--}{N47fau z`3vX3vt=`BCNEN(p^?cbE1W^!Qk~G2FTJGu$$wt`Y)c#nx~%oU_EkhoH)Oo091RZ) zJjASlK^O*x5{rYzJfUp66P83!lD{XpRC@PbL&G5PJk~I8;0c~;STOJmiyD>;G_g$j z_A4nuDx8Hz4!TSg@NIl7TI*@L~f zLbGbB(B+Z8JKy5RuLOyQXHm{*mSMn^@wNzQWf-qi&19GDN>1>&;I3)2TWzP3QFQgajDu%_%DOz3pDNmQ^-=69Y zO7uGQ-2g+!2K_0WF^!yt}itYPW`WhB{S z{uRssC3J=#z>i|slakn_u`>hl2kmLS+UMEb=T7?T??3(o@F|`qF#{`wS>zK~Pm$*{ z1NXG^^AzIv!oZi>el?8^+)rRh+k$~&3Tb>jjR$yW;E{n%10@4x2D9qA!Ye!6_l3`p z5dE5JwS>noS5scg@|_p=+E(N%kh7zjT}M=U!VRABz&_HE8#P;XEbhn#Z*Z&K>sUT_ zn+?^s__4G+;j6A^3+u@nk5a<7_quK%JK|9Kvf+qL*Hr-zq;iSOQmxHYNOYBq0<>GLP!C znxfHdS(Uymjy0*M4^bgRA?+yMEUV73BLdN6NO9X1zMskG^9;Mo|0ns%Mct3}DQ{{& zZ0DBL#VuY)EvNg&uriW>o=eqzp}bDmYbqrsiT`|9ZdRO?n{`gLVDyCNQ~eC_d@i3` zr|$D^aHO8pbo$G%XX~;9CRVnW*83 zi5=|H#7DthKJd)C#`@mCo{4=NjG=ycE{2%_;d-Mj?116UC~kUOk?3fsv7@V zJ9vxRf%1N2NVY_9w$bk{hx;sQ-hSXow^g`Me#Oy>zHFoG9cm~yJZBhYtKkF*XiG(B z4+9@&5ylaTakY-uM&=C&68V+pqY+BicDhYbQY!ERk00wzf90f8$}Nc_-jjN_-5f4! z;1NDTZ!|lt&({RA+3ZPM)K1Tr|0Xrz z74QMQd1n#B9BzbHI{D~59n&Wh=Mxjj31cqt8$6-lUL4a;M4a-v)83P9^D^ JC64-3@*g5ln)Cnw diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$1.class deleted file mode 100644 index fac0693235a74542f201680dbd737347968bf160..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1991 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 diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpAccess.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpAccess.class deleted file mode 100644 index 7b05be13473ed4fb9fe07a1d41345fac3e51f04c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmbtSO>fgc5Pjo>q%olhp_Ff0AfQqt7IEMJRZvufXl3A#suxacdvQ0i*U@@i@wYf2 zBo6!leiULhjTBJDDTkfedGq#pW<0-s|M&^uIUaS;z*dMRw%fSh#sfn0vn>n4Aezck zDROBtF>zL#>=mI^D0fn(ghp*Op*xdSGNkN#IV1GWp43j~f&u1tCOR|H)m9N+{F~i7 zum9;hH1Z;KrR+FU#&H3aW4Vez2ZZ%lW!fC+LNQu!0d&X=ccQD|Gr~AZ%0kFo$1;{; zdRmA|nlvuIh@wpET!~c0btc|9H}hwlB&w>SGRwG|Il=e4r;TBQ zN70M4Q6K6eR`y87IU|FpOk{p6t@iN(Z2DFR;j%m)`GGOY?&q?q6z8H<%Nj1lx!-V7 z);3XZwXbRG|D$>8ccY5|u5_`1VH*z#hbxZzuSy903KzrfW7QTZJgo~UB&}DmRfv=FDD!o4)U#BjU4xtL!)VHsUt{`*8Qk vH_+~P1YbD{aE)zi&V7mNeBV4{;RbGV#QeD$F?xri0C#a~j&kF;hnv73`Dp&O diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpProcessStep.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpProcessStep.class deleted file mode 100644 index 505e43b4ca4382984306471b837816af3506378b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1555 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 diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$2.class deleted file mode 100644 index 8fde122deccf27c3cbf4c6389efeadb392379968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcmbVK+iuf95IvhXc4JIy0+c)D5>PLQts;bk8dX9O2qZ%vg8II;m(-E78`{~ zJn#X06k_aHt$_zb9(K>n?9ACYv-{)cx9NSC`~U1X7bnN(B$Z77dRQS=xuRFvwRX7EOu6CFFa=fT06gZm!( z@I7q6XLz#8)EWG<$t^W93|C+}70EF8|8j=)vo^}n&}UePw2(*du}?p?1A1)w%57St zoV+esoRATAcE5mqBBKSDcDo8b!a1_NWdh+kc{EG-w3o%t2wQ}my{~9}B%@i(tK!XN zLS0O$xPTs*|D0$p)-?N+Q_|SGd!Nz%lc(8)UGrGDRNc0TD-~YFH9`y5X+KY^M|>6` LNT*HF%l6tYP>Jjq diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$3.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$3.class deleted file mode 100644 index baa1cf63d2a1a8a38d802bca92a31c7af2b0bc77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 zcmbVK+iuf95IvhXc4G`R0m}W>7SxNxRxPT88dX981X5@pg8II;m(-E78`{~ zJn#X06k>c)ap3`xhut$XJ9Boa6;NT&H-H%ml z4jI}Tn%nS8+M%bAx$O$f5^%slr5OG>5m+oa)HIss{&44%R%Z z!}qWZpW*2ulV|XM&#qF*&|iS*OeVwb|CgU@qZ$rypI@8DVGZ3)m+zT5xH%%ita^knL3ogqO&pX~L(yD1JuRBJ6B`Me8FO&EoyCc%@3H zizyYC(F60J6U~*HW`}YL8hdN|GunUhG@Gz%9t&5?+g5PB#2dItXyF#^7isl~&msir Kv?+ScUit-_E$)^8 diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$4.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$4.class deleted file mode 100644 index 29c8380e25c3385f79bcf9a932e6529fe2fd5add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmbVK+iuf95IvhXc4G{61C;x{Kra%mstO4jDxnBOr9dBo`o6Xo*O9Xut=AEs1uuYj z-~;$5#Mm*dfd@n$cF)Z0%-K1!`~An)Zvb|1-$e)4TwKQu7Zz?hxaHusgF6g%Kb5K3 zXK1f)95Gk}6$^&tVJgL&ViF4dmWLTddP5cQ?1<~M^y{Eyj?OBfn)Pp^c~t76CwU>GOyx9**TNjD*uh;74wf9; z^RNcr!!mq^-9={4;GYg}E|a0Z0Mm(1hMoT}XIMFHqn-}^iW$!earh3~^mRL+C#OH% zrbXh(>yi}^GQ!U0XRwcCwBXWiSHY(^L$)_hAUsDNjT1iYW$_cj7GY=W3tAt@Xcj-K zidW|ebup!41wAnTInkW2X|^e+q_H=*KB4_5PqPWT=CN?0x@{GgD!hyhK8w diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$Converter.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$Converter.class deleted file mode 100644 index 559059ade67cf9696b43c479c52ab52be1ea9608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmb7AK~BRk5FD2hx1~VEg%2Q9E?DZ3R$MAoAR%!`K42$Sl*q9o$BuX#2Ohwq5DPg_ zR4$x$XSB0Bv+p0TZva+UaGY?QG4R~kUi-jsy?m-=FNKk|6lw64E!Q`D)U&E}9@Y%g zv?{F((QAgwzeHI^Q_D?ucc{KUq!?zYi$2%8%FxD(hY;E{wypC)7q?%QIL;Y1xod