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;
|
String simpleClassNeighbor = classNeighbor != null && classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
||||||
|
|
||||||
if (simpleClassNeighbor != null && simpleClassTarget != null) {
|
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"
|
// e.g. "this" vs "com.example.Machine"
|
||||||
if (simpleClassNeighbor.equals("this") || simpleClassNeighbor.equals("super")) return true;
|
if (simpleClassNeighbor.equals("this") || simpleClassNeighbor.equals("super")) return true;
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -632,9 +632,7 @@ public class VariableTracer {
|
|||||||
String classTarget = target.substring(0, target.lastIndexOf('.'));
|
String classTarget = target.substring(0, target.lastIndexOf('.'));
|
||||||
if (classNeighbor.equals(classTarget)) return true;
|
if (classNeighbor.equals(classTarget)) return true;
|
||||||
|
|
||||||
String simpleClassNeighbor = classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
if (context.areSameTypeOrUnambiguousSimpleMatch(classNeighbor, classTarget)) return true;
|
||||||
String simpleClassTarget = classTarget.contains(".") ? classTarget.substring(classTarget.lastIndexOf('.') + 1) : classTarget;
|
|
||||||
if (simpleClassNeighbor.equals(simpleClassTarget)) return true;
|
|
||||||
|
|
||||||
List<String> impls = context.getImplementations(classTarget);
|
List<String> impls = context.getImplementations(classTarget);
|
||||||
if (impls != null) {
|
if (impls != null) {
|
||||||
@@ -662,7 +660,14 @@ public class VariableTracer {
|
|||||||
String simpleClassNeighbor = classNeighbor != null && classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
String simpleClassNeighbor = classNeighbor != null && classNeighbor.contains(".") ? classNeighbor.substring(classNeighbor.lastIndexOf('.') + 1) : classNeighbor;
|
||||||
|
|
||||||
if (simpleClassNeighbor != null && simpleClassTarget != null) {
|
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;
|
if (simpleClassNeighbor.equals("this") || simpleClassNeighbor.equals("super")) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user