From ddfd8586bb3124bc59e5fc4cfb05a2a1c02d0088 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Tue, 31 Jul 2012 18:34:09 +0400 Subject: [PATCH] Fixed SOE in searching for recursive package requirements (PY-7074) --- .../PyPackageRequirementsInspection.java | 2 +- .../jetbrains/python/packaging/PyPackage.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java b/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java index 8f6d721dc6bb..0e6cb0d1aa47 100644 --- a/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java @@ -215,7 +215,7 @@ public class PyPackageRequirementsInspection extends PyInspection { final List packages = PyPackageManager.getInstance(sdk).getPackages(); for (PyRequirement req : requirements) { final PyPackage pkg = req.match(packages); - if (pkg != null) { + if (pkg != null && !visited.contains(pkg)) { visited.add(pkg); results.addAll(getTransitiveRequirements(sdk, pkg.getRequirements(), visited)); } diff --git a/python/src/com/jetbrains/python/packaging/PyPackage.java b/python/src/com/jetbrains/python/packaging/PyPackage.java index 2bce5616487b..12a06e1ebbe8 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackage.java +++ b/python/src/com/jetbrains/python/packaging/PyPackage.java @@ -49,4 +49,21 @@ public class PyPackage { public boolean isInstalled() { return myLocation != null; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PyPackage aPackage = (PyPackage)o; + if (myName != null ? !myName.equals(aPackage.myName) : aPackage.myName != null) return false; + if (myVersion != null ? !myVersion.equals(aPackage.myVersion) : aPackage.myVersion != null) return false; + return true; + } + + @Override + public int hashCode() { + int result = myName != null ? myName.hashCode() : 0; + result = 31 * result + (myVersion != null ? myVersion.hashCode() : 0); + return result; + } }