fix 6
This commit is contained in:
@@ -222,6 +222,50 @@ public class CallGraphBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
// LAST RESORT FALLBACK: If AST deep trace failed to find a valid ALL_CAPS constant
|
||||
// (e.g. it returned a field name like 'type', or nothing), we can scrape the resolvedValue string directly
|
||||
// for string literals or enum-like constants.
|
||||
boolean hasValidConstant = false;
|
||||
for (String ev : polymorphicEvents) {
|
||||
String val = ev.contains(".") ? ev.substring(ev.lastIndexOf('.') + 1) : ev;
|
||||
if (val.equals(val.toUpperCase()) && val.length() > 2) {
|
||||
hasValidConstant = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasValidConstant && resolvedValue.contains("(")) {
|
||||
java.util.List<String> scraped = new java.util.ArrayList<>();
|
||||
|
||||
// Extract "STRING_LITERALS"
|
||||
java.util.regex.Matcher m1 = java.util.regex.Pattern.compile("\"([^\"]+)\"").matcher(resolvedValue);
|
||||
while (m1.find()) {
|
||||
scraped.add(m1.group(1));
|
||||
}
|
||||
|
||||
// Extract ENUM_LIKE_CONSTANTS
|
||||
java.util.regex.Matcher m2 = java.util.regex.Pattern.compile("\\b([A-Z_]{3,})\\b").matcher(resolvedValue);
|
||||
while (m2.find()) {
|
||||
if (!scraped.contains(m2.group(1))) {
|
||||
scraped.add(m2.group(1));
|
||||
}
|
||||
}
|
||||
|
||||
if (!scraped.isEmpty()) {
|
||||
polymorphicEvents.clear();
|
||||
polymorphicEvents.addAll(scraped);
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up any remaining invalid AST fallbacks (like 'type', 'event') if we found valid ones
|
||||
if (polymorphicEvents.size() > 1) {
|
||||
polymorphicEvents.removeIf(e -> {
|
||||
String val = e.contains(".") ? e.substring(e.lastIndexOf('.') + 1) : e;
|
||||
return !val.equals(val.toUpperCase()) || val.length() <= 2;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (!resolvedValue.equals(event) || !polymorphicEvents.isEmpty()) {
|
||||
return TriggerPoint.builder()
|
||||
.event(resolvedValue)
|
||||
|
||||
Reference in New Issue
Block a user