From df66f7fd1caebc328b95d1d18d6b62cd00258dee Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Wed, 20 Apr 2011 12:33:25 +0400 Subject: [PATCH] Show base classes in structure view (PY-3370) --- .../structureView/PyStructureViewElement.java | 18 ++++++++++++ .../testData/structureView/baseClassNames.py | 17 +++++++++++ .../jetbrains/python/PyStructureViewTest.java | 29 +++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 python/testData/structureView/baseClassNames.py create mode 100644 python/testSrc/com/jetbrains/python/PyStructureViewTest.java diff --git a/python/src/com/jetbrains/python/structureView/PyStructureViewElement.java b/python/src/com/jetbrains/python/structureView/PyStructureViewElement.java index d8ec7b305c2e..f9e4f4fb31fe 100644 --- a/python/src/com/jetbrains/python/structureView/PyStructureViewElement.java +++ b/python/src/com/jetbrains/python/structureView/PyStructureViewElement.java @@ -149,6 +149,24 @@ public class PyStructureViewElement implements StructureViewTreeElement { ParamHelper.appendParameterList(argList, result); return result.toString(); } + else if (myElement instanceof PyClass) { + PyClass c = (PyClass) myElement; + StringBuilder result = new StringBuilder(c.getName()); + PyClass[] superClasses = c.getSuperClasses(); + int n = superClasses.length; + if (n > 0) { + result.append("("); + for (int i = 0; i < n; i++) { + c = superClasses[i]; + result.append(c.getName()); + if (i != n - 1) { + result.append(", "); + } + } + result.append(")"); + } + return result.toString(); + } return myElement.getName(); } diff --git a/python/testData/structureView/baseClassNames.py b/python/testData/structureView/baseClassNames.py new file mode 100644 index 000000000000..42799409c52a --- /dev/null +++ b/python/testData/structureView/baseClassNames.py @@ -0,0 +1,17 @@ +class B1: + def f(self, x): + return x + self.y + +class B2(object): + @staticmethod + def g(x): + return x + +class C(B1, B2): + pass + +class D1(C): + pass + +class D2(C): + pass diff --git a/python/testSrc/com/jetbrains/python/PyStructureViewTest.java b/python/testSrc/com/jetbrains/python/PyStructureViewTest.java new file mode 100644 index 000000000000..f8643ee7109c --- /dev/null +++ b/python/testSrc/com/jetbrains/python/PyStructureViewTest.java @@ -0,0 +1,29 @@ +package com.jetbrains.python; + +import com.intellij.ide.structureView.newStructureView.StructureViewComponent; +import com.intellij.util.Consumer; +import com.jetbrains.python.fixtures.PyLightFixtureTestCase; + +import static com.intellij.testFramework.PlatformTestUtil.assertTreeEqual; + +/** + * @author vlan + */ +public class PyStructureViewTest extends PyLightFixtureTestCase { + public void testBaseClassNames() { + myFixture.configureByFile("structureView/baseClassNames.py"); + myFixture.testStructureView(new Consumer() { + @Override + public void consume(StructureViewComponent component) { + assertTreeEqual(component.getTree(), "-baseClassNames.py\n" + + " -B1\n" + + " f(self, x)\n" + + " -B2(object)\n" + + " g(x)\n" + + " C(B1, B2)\n" + + " D1(C)\n" + + " D2(C)\n"); + } + }); + } +}