diff --git a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyDataclassInspection.kt b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyDataclassInspection.kt index 2c3d08dc1b24..8d6a3de620e0 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyDataclassInspection.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyDataclassInspection.kt @@ -19,7 +19,6 @@ import com.jetbrains.python.psi.impl.ParamHelper import com.jetbrains.python.psi.impl.PyCallExpressionHelper import com.jetbrains.python.psi.impl.PyEvaluator import com.jetbrains.python.psi.impl.stubs.PyDataclassFieldStubImpl -import com.jetbrains.python.psi.resolve.PyResolveContext import com.jetbrains.python.psi.stubs.PyDataclassFieldStub import com.jetbrains.python.psi.types.* import one.util.streamex.StreamEx @@ -180,30 +179,27 @@ class PyDataclassInspection : PyInspection() { } override fun visitPyCallExpression(node: PyCallExpression) { - super.visitPyCallExpression(node) + val callees = node.multiResolveCallee(resolveContext) + val calleeQName = callees.mapNotNullTo(mutableSetOf()) { it.callable?.qualifiedName }.singleOrNull() - val resolveContext = PyResolveContext.defaultContext(myTypeEvalContext) - val callableType = node.multiResolveCallee(resolveContext).singleOrNull() - val callee = callableType?.callable - val calleeQName = callee?.qualifiedName - - if (callableType != null && callee != null) { + if (calleeQName != null) { val dataclassType = when { DATACLASSES_HELPERS.contains(calleeQName) -> PyDataclassParameters.PredefinedType.STD ATTRS_HELPERS.contains(calleeQName) -> PyDataclassParameters.PredefinedType.ATTRS else -> return } + val callableType = callees.first() val mapping = PyCallExpressionHelper.mapArguments(node, callableType, myTypeEvalContext) - val dataclassParameter = callee.getParameters(myTypeEvalContext).firstOrNull() + val dataclassParameter = callableType.getParameters(myTypeEvalContext)?.firstOrNull() val dataclassArgument = mapping.mappedParameters.entries.firstOrNull { it.value == dataclassParameter }?.key if (dataclassType.asPredefinedType == PyDataclassParameters.PredefinedType.STD) { - processHelperDataclassArgument(dataclassArgument, calleeQName!!) + processHelperDataclassArgument(dataclassArgument, calleeQName) } else if (dataclassType.asPredefinedType == PyDataclassParameters.PredefinedType.ATTRS) { - processHelperAttrsArgument(dataclassArgument, calleeQName!!) + processHelperAttrsArgument(dataclassArgument, calleeQName) } } } diff --git a/python/testData/completion/dataclassPostInit/dataclasses.py b/python/testData/completion/dataclassPostInit/dataclasses.py deleted file mode 100644 index 68675bfddc1b..000000000000 --- a/python/testData/completion/dataclassPostInit/dataclasses.py +++ /dev/null @@ -1,3 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/completion/dataclassPostInitNoInit/dataclasses.py b/python/testData/completion/dataclassPostInitNoInit/dataclasses.py deleted file mode 100644 index 68675bfddc1b..000000000000 --- a/python/testData/completion/dataclassPostInitNoInit/dataclasses.py +++ /dev/null @@ -1,3 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/completion/dataclassWithInitVarPostInit/dataclasses.py b/python/testData/completion/dataclassWithInitVarPostInit/dataclasses.py deleted file mode 100644 index 6cb578eb52e2..000000000000 --- a/python/testData/completion/dataclassWithInitVarPostInit/dataclasses.py +++ /dev/null @@ -1,11 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyArgumentListInspection/DataclassesReplace/dataclasses.py b/python/testData/inspections/PyArgumentListInspection/DataclassesReplace/dataclasses.py deleted file mode 100644 index 52f02fe0e9f2..000000000000 --- a/python/testData/inspections/PyArgumentListInspection/DataclassesReplace/dataclasses.py +++ /dev/null @@ -1,20 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyArgumentListInspection/InitializingDataclass/dataclasses.py b/python/testData/inspections/PyArgumentListInspection/InitializingDataclass/dataclasses.py deleted file mode 100644 index be98416f0ef8..000000000000 --- a/python/testData/inspections/PyArgumentListInspection/InitializingDataclass/dataclasses.py +++ /dev/null @@ -1,16 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyArgumentListInspection/InitializingImportedDataclass/dataclasses.py b/python/testData/inspections/PyArgumentListInspection/InitializingImportedDataclass/dataclasses.py deleted file mode 100644 index 68675bfddc1b..000000000000 --- a/python/testData/inspections/PyArgumentListInspection/InitializingImportedDataclass/dataclasses.py +++ /dev/null @@ -1,3 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyDataclassInspection/dataclasses.py b/python/testData/inspections/PyDataclassInspection/dataclasses.py deleted file mode 100644 index d3814a1b0d48..000000000000 --- a/python/testData/inspections/PyDataclassInspection/dataclasses.py +++ /dev/null @@ -1,27 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def fields(class_or_instance): - pass - - -def asdict(obj, *, dict_factory=dict): - pass - - -def astuple(obj, *, tuple_factory=tuple): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyMethodOverridingInspection/DunderPostInitInDataclassHierarchy/dataclasses.py b/python/testData/inspections/PyMethodOverridingInspection/DunderPostInitInDataclassHierarchy/dataclasses.py deleted file mode 100644 index 6cb578eb52e2..000000000000 --- a/python/testData/inspections/PyMethodOverridingInspection/DunderPostInitInDataclassHierarchy/dataclasses.py +++ /dev/null @@ -1,11 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyTypeCheckerInspection/DataclassClsCallType/dataclasses.py b/python/testData/inspections/PyTypeCheckerInspection/DataclassClsCallType/dataclasses.py deleted file mode 100644 index 68675bfddc1b..000000000000 --- a/python/testData/inspections/PyTypeCheckerInspection/DataclassClsCallType/dataclasses.py +++ /dev/null @@ -1,3 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyTypeCheckerInspection/DataclassesReplace/dataclasses.py b/python/testData/inspections/PyTypeCheckerInspection/DataclassesReplace/dataclasses.py deleted file mode 100644 index 52f02fe0e9f2..000000000000 --- a/python/testData/inspections/PyTypeCheckerInspection/DataclassesReplace/dataclasses.py +++ /dev/null @@ -1,20 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testData/inspections/PyTypeCheckerInspection/InitializingDataclass/dataclasses.py b/python/testData/inspections/PyTypeCheckerInspection/InitializingDataclass/dataclasses.py deleted file mode 100644 index be98416f0ef8..000000000000 --- a/python/testData/inspections/PyTypeCheckerInspection/InitializingDataclass/dataclasses.py +++ /dev/null @@ -1,16 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass \ No newline at end of file diff --git a/python/testData/paramInfo/DataclassesHierarchyReplace/dataclasses.py b/python/testData/paramInfo/DataclassesHierarchyReplace/dataclasses.py deleted file mode 100644 index cb5a9eb6b143..000000000000 --- a/python/testData/paramInfo/DataclassesHierarchyReplace/dataclasses.py +++ /dev/null @@ -1,7 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testData/paramInfo/DataclassesMixedHierarchyReplace/dataclasses.py b/python/testData/paramInfo/DataclassesMixedHierarchyReplace/dataclasses.py deleted file mode 100644 index cb5a9eb6b143..000000000000 --- a/python/testData/paramInfo/DataclassesMixedHierarchyReplace/dataclasses.py +++ /dev/null @@ -1,7 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testData/paramInfo/DataclassesReplace/dataclasses.py b/python/testData/paramInfo/DataclassesReplace/dataclasses.py deleted file mode 100644 index 52f02fe0e9f2..000000000000 --- a/python/testData/paramInfo/DataclassesReplace/dataclasses.py +++ /dev/null @@ -1,20 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testData/paramInfo/InitializingDataclass/dataclasses.py b/python/testData/paramInfo/InitializingDataclass/dataclasses.py deleted file mode 100644 index be98416f0ef8..000000000000 --- a/python/testData/paramInfo/InitializingDataclass/dataclasses.py +++ /dev/null @@ -1,16 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass \ No newline at end of file diff --git a/python/testData/paramInfo/InitializingDataclassHierarchy/dataclasses.py b/python/testData/paramInfo/InitializingDataclassHierarchy/dataclasses.py deleted file mode 100644 index 2ab7947bfdff..000000000000 --- a/python/testData/paramInfo/InitializingDataclassHierarchy/dataclasses.py +++ /dev/null @@ -1,3 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass diff --git a/python/testData/paramInfo/InitializingDataclassMixedHierarchy/dataclasses.py b/python/testData/paramInfo/InitializingDataclassMixedHierarchy/dataclasses.py deleted file mode 100644 index 2ab7947bfdff..000000000000 --- a/python/testData/paramInfo/InitializingDataclassMixedHierarchy/dataclasses.py +++ /dev/null @@ -1,3 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass diff --git a/python/testData/paramInfo/InitializingDataclassOverridingField/dataclasses.py b/python/testData/paramInfo/InitializingDataclassOverridingField/dataclasses.py deleted file mode 100644 index 44ee41d023c3..000000000000 --- a/python/testData/paramInfo/InitializingDataclassOverridingField/dataclasses.py +++ /dev/null @@ -1,8 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass diff --git a/python/testData/stubs/dataclassField/dataclasses.py b/python/testData/stubs/dataclassField/dataclasses.py deleted file mode 100644 index 6f0f2a783046..000000000000 --- a/python/testData/stubs/dataclassField/dataclasses.py +++ /dev/null @@ -1,8 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None): - pass \ No newline at end of file diff --git a/python/testData/types/DataclassPostInitParameter/dataclasses.py b/python/testData/types/DataclassPostInitParameter/dataclasses.py deleted file mode 100644 index 6cb578eb52e2..000000000000 --- a/python/testData/types/DataclassPostInitParameter/dataclasses.py +++ /dev/null @@ -1,11 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/types/DataclassPostInitParameterNoInit/dataclasses.py b/python/testData/types/DataclassPostInitParameterNoInit/dataclasses.py deleted file mode 100644 index 6cb578eb52e2..000000000000 --- a/python/testData/types/DataclassPostInitParameterNoInit/dataclasses.py +++ /dev/null @@ -1,11 +0,0 @@ -class _InitVarMeta(type): - def __getitem__(self, params): - return self - -class InitVar(metaclass=_InitVarMeta): - pass - - -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass \ No newline at end of file diff --git a/python/testData/types/DataclassesReplace/dataclasses.py b/python/testData/types/DataclassesReplace/dataclasses.py deleted file mode 100644 index cb5a9eb6b143..000000000000 --- a/python/testData/types/DataclassesReplace/dataclasses.py +++ /dev/null @@ -1,7 +0,0 @@ -def dataclass(_cls=None, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False): - pass - - -def replace(obj, **changes): - pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/Py3TypeTest.java b/python/testSrc/com/jetbrains/python/Py3TypeTest.java index ddc243c75b4b..265762373e5f 100644 --- a/python/testSrc/com/jetbrains/python/Py3TypeTest.java +++ b/python/testSrc/com/jetbrains/python/Py3TypeTest.java @@ -849,34 +849,32 @@ public class Py3TypeTest extends PyTestCase { // PY-27398 public void testDataclassPostInitParameter() { - doMultiFileTest("int", - "from dataclasses import dataclass, InitVar\n" + - "@dataclass\n" + - "class Foo:\n" + - " i: int\n" + - " j: int\n" + - " d: InitVar[int]\n" + - " def __post_init__(self, d):\n" + - " expr = d"); + doTest("int", + "from dataclasses import dataclass, InitVar\n" + + "@dataclass\n" + + "class Foo:\n" + + " i: int\n" + + " j: int\n" + + " d: InitVar[int]\n" + + " def __post_init__(self, d):\n" + + " expr = d"); } // PY-27398 public void testDataclassPostInitParameterNoInit() { - doMultiFileTest("Any", - "from dataclasses import dataclass, InitVar\n" + - "@dataclass(init=False)\n" + - "class Foo:\n" + - " i: int\n" + - " j: int\n" + - " d: InitVar[int]\n" + - " def __post_init__(self, d):\n" + - " expr = d"); + doTest("Any", + "from dataclasses import dataclass, InitVar\n" + + "@dataclass(init=False)\n" + + "class Foo:\n" + + " i: int\n" + + " j: int\n" + + " d: InitVar[int]\n" + + " def __post_init__(self, d):\n" + + " expr = d"); } // PY-28506 public void testDataclassPostInitInheritedParameter() { - myFixture.copyDirectoryToProject(TEST_DIRECTORY + "DataclassPostInitParameter", ""); - // both are dataclasses with enabled `init` doTest("int", "from dataclasses import dataclass, InitVar\n" + @@ -895,8 +893,6 @@ public class Py3TypeTest extends PyTestCase { // PY-28506 public void testDataclassPostInitInheritedParameter2() { - myFixture.copyDirectoryToProject(TEST_DIRECTORY + "DataclassPostInitParameter", ""); - // both are dataclasses, base with enabled `init` doTest("Any", "from dataclasses import dataclass, InitVar\n" + @@ -915,8 +911,6 @@ public class Py3TypeTest extends PyTestCase { // PY-28506 public void testDataclassPostInitInheritedParameter3() { - myFixture.copyDirectoryToProject(TEST_DIRECTORY + "DataclassPostInitParameter", ""); - // both are dataclasses, derived with enabled `init` doTest("int", "from dataclasses import dataclass, InitVar\n" + @@ -935,8 +929,6 @@ public class Py3TypeTest extends PyTestCase { // PY-28506 public void testDataclassPostInitInheritedParameter4() { - myFixture.copyDirectoryToProject(TEST_DIRECTORY + "DataclassPostInitParameter", ""); - // both are dataclasses with disabled `init` doTest("Any", "from dataclasses import dataclass, InitVar\n" + @@ -955,8 +947,6 @@ public class Py3TypeTest extends PyTestCase { // PY-28506 public void testMixedDataclassPostInitInheritedParameter() { - myFixture.copyDirectoryToProject(TEST_DIRECTORY + "DataclassPostInitParameter", ""); - doTest("Any", "from dataclasses import dataclass, InitVar\n" + "\n" + diff --git a/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java b/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java index 00f9d8569b83..1c71bb32c981 100644 --- a/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java +++ b/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java @@ -849,7 +849,7 @@ public class PyParameterInfoTest extends LightMarkedTestCase { feignCtrlP(marks.get("").getTextOffset()).check("obj: A, *, a: int = ..., b: str = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); feignCtrlP(marks.get("").getTextOffset()).check("obj: B, *, a: int = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); feignCtrlP(marks.get("").getTextOffset()).check("obj: C, *, a: int = ..., b: str = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); - feignCtrlP(marks.get("").getTextOffset()).check("obj, **changes", new String[]{"**changes"}); + feignCtrlP(marks.get("").getTextOffset()).check("__obj: _T, **changes", new String[]{"**changes"}); } // PY-28506 @@ -859,7 +859,7 @@ public class PyParameterInfoTest extends LightMarkedTestCase { feignCtrlP(marks.get("").getTextOffset()).check("obj: B1, *, a: int = ..., b: str = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); feignCtrlP(marks.get("").getTextOffset()).check("obj: B2, *, a: int = ..., b: str = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); feignCtrlP(marks.get("").getTextOffset()).check("obj: B3, *, a: int = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); - feignCtrlP(marks.get("").getTextOffset()).check("obj, **changes", new String[]{"**changes"}); + feignCtrlP(marks.get("").getTextOffset()).check("__obj: _T, **changes", new String[]{"**changes"}); feignCtrlP(marks.get("").getTextOffset()).check("obj: B5, *, x: int = ..., y: int = ..., z: int = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); } @@ -870,8 +870,8 @@ public class PyParameterInfoTest extends LightMarkedTestCase { feignCtrlP(marks.get("").getTextOffset()).check("obj: B1, *, a: int = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); feignCtrlP(marks.get("").getTextOffset()).check("obj: B2, *, b: str = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); - feignCtrlP(marks.get("").getTextOffset()).check("obj, **changes", new String[]{"**changes"}); - feignCtrlP(marks.get("").getTextOffset()).check("obj, **changes", new String[]{"**changes"}); + feignCtrlP(marks.get("").getTextOffset()).check("__obj: _T, **changes", new String[]{"**changes"}); + feignCtrlP(marks.get("").getTextOffset()).check("__obj: _T, **changes", new String[]{"**changes"}); feignCtrlP(marks.get("").getTextOffset()).check("obj: C5, *, x: int = ..., z: str = ...", ArrayUtilRt.EMPTY_STRING_ARRAY); } diff --git a/python/testSrc/com/jetbrains/python/PyStubsTest.java b/python/testSrc/com/jetbrains/python/PyStubsTest.java index c73768e4df83..3770af33b63c 100644 --- a/python/testSrc/com/jetbrains/python/PyStubsTest.java +++ b/python/testSrc/com/jetbrains/python/PyStubsTest.java @@ -895,7 +895,6 @@ public class PyStubsTest extends PyTestCase { // PY-27398 public void testDataclassField() { final PyFile file1 = getTestFile("dataclassField/a.py"); - final PyFile file2 = getTestFile("dataclassField/dataclasses.py"); final PyFile file3 = getTestFile("dataclassField/b.py"); final DataclassFieldChecker checker = new DataclassFieldChecker(file1.findTopLevelClass("A")); @@ -910,7 +909,6 @@ public class PyStubsTest extends PyTestCase { checker.check("i", false, false, true); assertNotParsed(file1); - assertNotParsed(file2); assertNotParsed(file3); } diff --git a/python/testSrc/com/jetbrains/python/PyTypeTest.java b/python/testSrc/com/jetbrains/python/PyTypeTest.java index 8043b9c3a799..8427150d31eb 100644 --- a/python/testSrc/com/jetbrains/python/PyTypeTest.java +++ b/python/testSrc/com/jetbrains/python/PyTypeTest.java @@ -3850,16 +3850,16 @@ public class PyTypeTest extends PyTestCase { public void testDataclassesReplace() { runWithLanguageLevel( LanguageLevel.getLatest(), - () -> doMultiFileTest("Foo", - "import dataclasses as dc\n" + - "\n" + - "@dc.dataclass\n" + - "class Foo:\n" + - " x: int\n" + - " y: int\n" + - "\n" + - "foo = Foo(1, 2)\n" + - "expr = dc.replace(foo, x=3)") + () -> doTest("Foo", + "import dataclasses as dc\n" + + "\n" + + "@dc.dataclass\n" + + "class Foo:\n" + + " x: int\n" + + " y: int\n" + + "\n" + + "foo = Foo(1, 2)\n" + + "expr = dc.replace(foo, x=3)") ); } diff --git a/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java index e3b803e237e4..482943c0c2ef 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java @@ -314,7 +314,6 @@ public class PyDataclassInspectionTest extends PyInspectionTestCase { @Override protected void doTest() { - myFixture.copyFileToProject(getTestCaseDirectory() + "/dataclasses.py", "dataclasses.py"); myFixture.copyDirectoryToProject("packages/attr", "attr"); super.doTest(); assertProjectFilesNotParsed(myFixture.getFile());