Skip to content

Commit 416d52e

Browse files
committed
AI Review fixes
1 parent a39c34b commit 416d52e

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ResourcesFeature.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ private record CompiledConditionalPattern(AccessCondition condition, ResourcePat
185185
private Set<ConditionalPattern> resourcePatternWorkSet = Collections.newSetFromMap(new ConcurrentHashMap<>());
186186
private Set<ConditionalGlob> globWorkSet = Collections.newSetFromMap(new ConcurrentHashMap<>());
187187
private final Set<ConditionalPattern> excludedResourcePatterns = Collections.newSetFromMap(new ConcurrentHashMap<>());
188+
private List<ConditionalGlob> includePatternMetadataGlobs = List.of();
188189

189190
private ImageClassLoader imageClassLoader;
190191

@@ -445,6 +446,13 @@ public void beforeAnalysis(BeforeAnalysisAccess a) {
445446
.toList();
446447
GlobTrieNode<ConditionWithOrigin> trie = CompressedGlobTrie.CompressedGlobTrieBuilder.build(patternsWithInfo);
447448
Resources.currentLayer().setResourcesTrieRoot(trie);
449+
includePatternMetadataGlobs = MissingRegistrationUtils.throwMissingRegistrationErrors() ? List.copyOf(globWorkSet) : List.of();
450+
for (ConditionalGlob glob : includePatternMetadataGlobs) {
451+
TypeReachabilityCondition reachabilityCondition = (TypeReachabilityCondition) glob.condition();
452+
if (reachabilityCondition.isRuntimeChecked() && !reachabilityCondition.isAlwaysTrue()) {
453+
access.registerAsUsed(reachabilityCondition.getType());
454+
}
455+
}
448456

449457
/*
450458
* GR-58701: The SVM core is currently not included in the base layer of a Layered Image.
@@ -470,13 +478,14 @@ public void beforeAnalysis(BeforeAnalysisAccess a) {
470478

471479
ResourceCollectorImpl collector = new ResourceCollectorImpl(includePatterns, excludePatterns);
472480
/*
473-
* register all included patterns in Resources singleton (if we are throwing
474-
* MissingRegistrationErrors), so they can be queried at runtime to detect missing entries
481+
* Register regex include patterns in the Resources singleton so runtime missing-metadata
482+
* diagnostics can query them with the legacy simple matcher. Glob diagnostics use the
483+
* dedicated metadata trie above instead of requestedPatterns.
475484
*/
476485
if (MissingRegistrationUtils.throwMissingRegistrationErrors()) {
477486
includePatterns.forEach(resourcePattern -> collector.registerIncludePattern(resourcePattern.condition, resourcePattern.compiledPattern.moduleName(),
478487
resourcePattern.compiledPattern.pattern.pattern()));
479-
globWorkSet.forEach(glob -> collector.registerIncludePattern(glob.condition(), glob.module(), glob.glob()));
488+
globWorkSet.forEach(glob -> collector.trackCondition(glob.condition()));
480489
}
481490

482491
/* if we have any entry in resource config file we should collect resources */
@@ -621,6 +630,11 @@ public void registerNegativeQuery(Module module, String resourceName) {
621630
public void registerIncludePattern(AccessCondition condition, String module, String pattern) {
622631
registerConditionalConfiguration(condition, cnd -> Resources.currentLayer().registerIncludePattern(cnd, module, pattern));
623632
}
633+
634+
public void trackCondition(AccessCondition condition) {
635+
registerConditionalConfiguration(condition, _ -> {
636+
});
637+
}
624638
}
625639

626640
private static List<ConditionalPattern> getPatternsFromOption(AccumulatingLocatableMultiOptionValue.Strings option) {
@@ -632,7 +646,7 @@ private static List<ConditionalPattern> getPatternsFromOption(AccumulatingLocata
632646

633647
private GlobTrieNode<RuntimeDynamicAccessMetadata> buildIncludePatternMetadataTrie() {
634648
Map<String, RuntimeDynamicAccessMetadata> metadataByPattern = new LinkedHashMap<>();
635-
for (ConditionalGlob glob : globWorkSet) {
649+
for (ConditionalGlob glob : includePatternMetadataGlobs) {
636650
String triePath = GlobUtils.transformToTriePath(glob.glob(), glob.module());
637651
RuntimeDynamicAccessMetadata metadata = metadataByPattern.computeIfAbsent(triePath, _ -> RuntimeDynamicAccessMetadata.alwaysAllow(false));
638652
metadata.addCondition(glob.condition());
@@ -704,6 +718,7 @@ public void afterAnalysis(AfterAnalysisAccess access) {
704718
GlobTrieNode<RuntimeDynamicAccessMetadata> metadataRoot = buildIncludePatternMetadataTrie();
705719
CompressedGlobTrie.finalize(metadataRoot);
706720
Resources.currentLayer().setIncludePatternMetadataTrieRoot(metadataRoot);
721+
includePatternMetadataGlobs = List.of();
707722
}
708723
}
709724

0 commit comments

Comments
 (0)