Align call-graph class matching with ambiguous simple-name guard
Use package-aware simple-name compatibility in VariableTracer and preserve case-insensitive field-to-type matching only when the simple name is unambiguous. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -380,7 +380,14 @@ public class CallGraphPathFinder {
|
||||
String simpleClassNeighbor = classNeighbor != null && classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
||||
|
||||
if (simpleClassNeighbor != null && simpleClassTarget != null) {
|
||||
if (simpleClassNeighbor.equalsIgnoreCase(simpleClassTarget)) return true;
|
||||
String leftClass = classNeighbor != null ? classNeighbor : simpleClassNeighbor;
|
||||
String rightClass = classTarget != null ? classTarget : simpleClassTarget;
|
||||
if (context.areSameTypeOrUnambiguousSimpleMatch(leftClass, rightClass)) return true;
|
||||
if (!context.isAmbiguousSimpleName(simpleClassNeighbor)
|
||||
&& !context.isAmbiguousSimpleName(simpleClassTarget)
|
||||
&& simpleClassNeighbor.equalsIgnoreCase(simpleClassTarget)) {
|
||||
return true;
|
||||
}
|
||||
// e.g. "this" vs "com.example.Machine"
|
||||
if (simpleClassNeighbor.equals("this") || simpleClassNeighbor.equals("super")) return true;
|
||||
return false;
|
||||
|
||||
@@ -632,9 +632,7 @@ public class VariableTracer {
|
||||
String classTarget = target.substring(0, target.lastIndexOf('.'));
|
||||
if (classNeighbor.equals(classTarget)) return true;
|
||||
|
||||
String simpleClassNeighbor = classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
||||
String simpleClassTarget = classTarget.contains(".") ? classTarget.substring(classTarget.lastIndexOf('.') + 1) : classTarget;
|
||||
if (simpleClassNeighbor.equals(simpleClassTarget)) return true;
|
||||
if (context.areSameTypeOrUnambiguousSimpleMatch(classNeighbor, classTarget)) return true;
|
||||
|
||||
List<String> impls = context.getImplementations(classTarget);
|
||||
if (impls != null) {
|
||||
@@ -662,7 +660,14 @@ public class VariableTracer {
|
||||
String simpleClassNeighbor = classNeighbor != null && classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
||||
|
||||
if (simpleClassNeighbor != null && simpleClassTarget != null) {
|
||||
if (simpleClassNeighbor.equalsIgnoreCase(simpleClassTarget)) return true;
|
||||
String leftClass = classNeighbor != null ? classNeighbor : simpleClassNeighbor;
|
||||
String rightClass = classTarget != null ? classTarget : simpleClassTarget;
|
||||
if (context.areSameTypeOrUnambiguousSimpleMatch(leftClass, rightClass)) return true;
|
||||
if (!context.isAmbiguousSimpleName(simpleClassNeighbor)
|
||||
&& !context.isAmbiguousSimpleName(simpleClassTarget)
|
||||
&& simpleClassNeighbor.equalsIgnoreCase(simpleClassTarget)) {
|
||||
return true;
|
||||
}
|
||||
if (simpleClassNeighbor.equals("this") || simpleClassNeighbor.equals("super")) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user