@@ -89,20 +89,13 @@ public void telemetry(Capabilities capabilities, BuildProducer<AdditionalBeanBui
8989 }
9090
9191 @ BuildStep
92- @ Record (ExecutionTime .STATIC_INIT )
9392 public void handleTools (CombinedIndexBuildItem indexBuildItem ,
94- ToolsRecorder recorder ,
9593 BuildProducer <AdditionalBeanBuildItem > additionalBeanProducer ,
96- RecorderContext recorderContext ,
9794 BuildProducer <BytecodeTransformerBuildItem > transformerProducer ,
9895 BuildProducer <GeneratedClassBuildItem > generatedClassProducer ,
9996 BuildProducer <ReflectiveClassBuildItem > reflectiveClassProducer ,
10097 BuildProducer <ValidationPhaseBuildItem .ValidationErrorBuildItem > validation ,
101- BuildProducer <ToolsMetadataBuildItem > toolsMetadataProducer ) {
102- recorderContext .registerSubstitution (ToolSpecification .class , ToolSpecificationObjectSubstitution .Serialized .class ,
103- ToolSpecificationObjectSubstitution .class );
104- recorderContext .registerSubstitution (ToolParameters .class , ToolParametersObjectSubstitution .Serialized .class ,
105- ToolParametersObjectSubstitution .class );
98+ BuildProducer <ToolsMetadataBeforeRemovalBuildItem > toolsMetadataProducer ) {
10699
107100 IndexView index = indexBuildItem .getIndex ();
108101
@@ -250,8 +243,38 @@ public void handleTools(CombinedIndexBuildItem indexBuildItem,
250243 .build ());
251244 }
252245
253- toolsMetadataProducer .produce (new ToolsMetadataBuildItem (metadata ));
254- recorder .setMetadata (metadata );
246+ toolsMetadataProducer .produce (new ToolsMetadataBeforeRemovalBuildItem (metadata ));
247+ }
248+
249+ /**
250+ * Transforms ToolsMetadataBeforeRemovalBuildItem into ToolsMetadataBuildItem by filtering
251+ * out tools belonging to beans that have been removed by ArC.
252+ */
253+ @ BuildStep
254+ @ Record (ExecutionTime .STATIC_INIT )
255+ public ToolsMetadataBuildItem filterOutRemovedTools (ToolsMetadataBeforeRemovalBuildItem beforeRemoval ,
256+ ValidationPhaseBuildItem validationPhase ,
257+ RecorderContext recorderContext ,
258+ ToolsRecorder recorder ) {
259+ if (beforeRemoval != null ) {
260+ recorderContext .registerSubstitution (ToolSpecification .class , ToolSpecificationObjectSubstitution .Serialized .class ,
261+ ToolSpecificationObjectSubstitution .class );
262+ recorderContext .registerSubstitution (ToolParameters .class , ToolParametersObjectSubstitution .Serialized .class ,
263+ ToolParametersObjectSubstitution .class );
264+ Map <String , List <ToolMethodCreateInfo >> metadataWithoutRemovedBeans = beforeRemoval .getMetadata ().entrySet ()
265+ .stream ()
266+ .filter (entry -> validationPhase .getContext ().removedBeans ().stream ()
267+ .noneMatch (
268+ retainedBean -> DotName .createSimple (entry .getKey ()).equals (retainedBean .getBeanClass ())))
269+ .collect (Collectors .toMap (Map .Entry ::getKey , Map .Entry ::getValue ));
270+ ToolsMetadataBuildItem toolsMetadata = new ToolsMetadataBuildItem (metadataWithoutRemovedBeans );
271+ recorder .setMetadata (toolsMetadata .getMetadata ());
272+ log .debug ("Tool classes before filtering out removed beans: " + beforeRemoval .getMetadata ().keySet ());
273+ log .debug ("Tool classes after filtering out removed beans: " + toolsMetadata .getMetadata ().keySet ());
274+ return toolsMetadata ;
275+ } else {
276+ return null ;
277+ }
255278 }
256279
257280 private boolean ignoreToolMethod (MethodInfo toolMethod , IndexView indexView ) {
0 commit comments