aaa
This commit is contained in:
@@ -85,8 +85,8 @@ public class StrictFqnMatchingEngine implements EventMatchingEngine {
|
||||
if (triggerEvent == null || smEvent == null) return false;
|
||||
if (triggerEvent.equals(smEvent)) return true;
|
||||
|
||||
String tConst = triggerEvent.contains(".") ? triggerEvent.substring(triggerEvent.lastIndexOf('.') + 1) : triggerEvent;
|
||||
String smConst = smEvent.contains(".") ? smEvent.substring(smEvent.lastIndexOf('.') + 1) : smEvent;
|
||||
String tConst = constantName(triggerEvent);
|
||||
String smConst = constantName(smEvent);
|
||||
|
||||
if (!tConst.equals(smConst)) return false;
|
||||
|
||||
@@ -100,20 +100,46 @@ public class StrictFqnMatchingEngine implements EventMatchingEngine {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (eventTypeFqn != null && eventTypeFqn.contains(".") && smEvent.contains(".")) {
|
||||
String fullTriggerFqn = eventTypeFqn + "." + tConst;
|
||||
return fullTriggerFqn.equals(smEvent);
|
||||
if (smEvent.contains(".")) {
|
||||
String smEnumType = smEvent.substring(0, smEvent.lastIndexOf('.'));
|
||||
|
||||
if (eventTypeFqn != null) {
|
||||
return enumTypesMatch(eventTypeFqn, smEnumType);
|
||||
}
|
||||
|
||||
if (triggerEvent.contains(".")) {
|
||||
String triggerEnumType = triggerEvent.substring(0, triggerEvent.lastIndexOf('.'));
|
||||
return enumTypesMatch(triggerEnumType, smEnumType);
|
||||
}
|
||||
|
||||
// Bare constant name (e.g. after Enum.name()) with no type context must not match every enum
|
||||
return false;
|
||||
}
|
||||
|
||||
if (triggerEvent.contains(".") && smEvent.contains(".")) {
|
||||
String tClass = triggerEvent.substring(0, triggerEvent.lastIndexOf('.'));
|
||||
String smClass = smEvent.substring(0, smEvent.lastIndexOf('.'));
|
||||
String tClassSimple = tClass.contains(".") ? tClass.substring(tClass.lastIndexOf('.') + 1) : tClass;
|
||||
String smClassSimple = smClass.contains(".") ? smClass.substring(smClass.lastIndexOf('.') + 1) : smClass;
|
||||
return tClassSimple.equals(smClassSimple);
|
||||
}
|
||||
// Both sides are unqualified identifiers (string/primitive events)
|
||||
return !triggerEvent.contains(".");
|
||||
}
|
||||
|
||||
return true;
|
||||
private String constantName(String event) {
|
||||
return event.contains(".") ? event.substring(event.lastIndexOf('.') + 1) : event;
|
||||
}
|
||||
|
||||
private boolean enumTypesMatch(String type1, String type2) {
|
||||
if (type1 == null || type2 == null) return false;
|
||||
if (type1.equals(type2)) return true;
|
||||
if (type1.endsWith("." + type2) || type2.endsWith("." + type1)) return true;
|
||||
|
||||
String simple1 = simpleName(type1);
|
||||
String simple2 = simpleName(type2);
|
||||
if (!simple1.equals(simple2)) return false;
|
||||
|
||||
// Same simple name only matches when at least one side is package-less (import-style reference).
|
||||
// Prevents com.foo.OrderEvents from matching com.bar.OrderEvents.
|
||||
return !type1.contains(".") || !type2.contains(".");
|
||||
}
|
||||
|
||||
private String simpleName(String name) {
|
||||
return name.contains(".") ? name.substring(name.lastIndexOf('.') + 1) : name;
|
||||
}
|
||||
|
||||
private boolean isStringTypeOrPrimitive(String typeFqn) {
|
||||
|
||||
Reference in New Issue
Block a user