From 408b9e01164b50da1da5eaffbd60ec4ac8cf0663 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 9 Aug 2012 13:21:34 +0200 Subject: [PATCH] extract interface from PyClassType --- .../python/psi/types/PyCallableType.java | 0 .../python/psi/types/PyClassType.java | 22 ++++++++++++++ .../python/codeInsight/PyDynamicMember.java | 4 +-- .../codeInsight/stdlib/PyNamedTupleType.java | 7 ++--- .../documentation/DocStringTypeReference.java | 7 ++--- .../PyUnresolvedReferencesInspection.java | 10 +++---- .../src/com/jetbrains/python/psi/PyUtil.java | 7 ++--- .../python/psi/impl/PyBuiltinCache.java | 13 ++++---- .../python/psi/impl/PyCallExpressionImpl.java | 10 +++---- .../python/psi/impl/PyClassImpl.java | 4 +-- .../python/psi/impl/PyFunctionImpl.java | 2 +- .../python/psi/impl/PyNamedParameterImpl.java | 4 +-- .../psi/impl/PyTargetExpressionImpl.java | 2 +- .../impl/references/PyQualifiedReference.java | 2 +- .../psi/types/PyClassMembersProvider.java | 1 + ...{PyClassType.java => PyClassTypeImpl.java} | 30 +++++++++---------- .../psi/types/PyCollectionTypeImpl.java | 2 +- .../psi/types/PyLiteralCollectionType.java | 2 +- .../python/psi/types/PyTupleType.java | 2 +- .../python/psi/types/PyTypeParser.java | 8 ++--- .../python/psi/types/PyTypeProviderBase.java | 2 +- .../python/psi/types/PyWeakClassType.java | 2 +- 22 files changed, 77 insertions(+), 66 deletions(-) rename python/{ => psi-api}/src/com/jetbrains/python/psi/types/PyCallableType.java (100%) create mode 100644 python/psi-api/src/com/jetbrains/python/psi/types/PyClassType.java rename python/src/com/jetbrains/python/psi/types/{PyClassType.java => PyClassTypeImpl.java} (94%) diff --git a/python/src/com/jetbrains/python/psi/types/PyCallableType.java b/python/psi-api/src/com/jetbrains/python/psi/types/PyCallableType.java similarity index 100% rename from python/src/com/jetbrains/python/psi/types/PyCallableType.java rename to python/psi-api/src/com/jetbrains/python/psi/types/PyCallableType.java diff --git a/python/psi-api/src/com/jetbrains/python/psi/types/PyClassType.java b/python/psi-api/src/com/jetbrains/python/psi/types/PyClassType.java new file mode 100644 index 000000000000..2e8cfa5d2c48 --- /dev/null +++ b/python/psi-api/src/com/jetbrains/python/psi/types/PyClassType.java @@ -0,0 +1,22 @@ +package com.jetbrains.python.psi.types; + +import com.intellij.openapi.util.UserDataHolder; +import com.jetbrains.python.psi.PyClass; +import org.jetbrains.annotations.Nullable; + +/** + * @author yole + */ +public interface PyClassType extends PyCallableType, UserDataHolder { + @Nullable + PyClass getPyClass(); + + boolean isDefinition(); + + PyClassType toInstance(); + + @Nullable + String getClassQName(); + + boolean isValid(); +} diff --git a/python/src/com/jetbrains/python/codeInsight/PyDynamicMember.java b/python/src/com/jetbrains/python/codeInsight/PyDynamicMember.java index 92913d6cb56e..cf912a288212 100644 --- a/python/src/com/jetbrains/python/codeInsight/PyDynamicMember.java +++ b/python/src/com/jetbrains/python/codeInsight/PyDynamicMember.java @@ -8,7 +8,7 @@ import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.impl.PyElementImpl; import com.jetbrains.python.psi.stubs.PyClassNameIndex; -import com.jetbrains.python.psi.types.PyClassType; +import com.jetbrains.python.psi.types.PyClassTypeImpl; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; @@ -182,7 +182,7 @@ public class PyDynamicMember { if (myTypeCallback != null) { return myTypeCallback.fun(myContext); } - return new PyClassType(myClass, !myResolveToInstance); + return new PyClassTypeImpl(myClass, !myResolveToInstance); } } } diff --git a/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java b/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java index d5fc9090aa14..b333b348de52 100644 --- a/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java +++ b/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java @@ -12,10 +12,7 @@ import com.jetbrains.python.psi.impl.PyElementImpl; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.RatedResolveResult; -import com.jetbrains.python.psi.types.PyCallableType; -import com.jetbrains.python.psi.types.PyClassType; -import com.jetbrains.python.psi.types.PyType; -import com.jetbrains.python.psi.types.TypeEvalContext; +import com.jetbrains.python.psi.types.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +23,7 @@ import java.util.List; /** * @author yole */ -public class PyNamedTupleType extends PyClassType implements PyCallableType { +public class PyNamedTupleType extends PyClassTypeImpl implements PyCallableType { private final String myName; private final boolean myDefinition; private final PsiElement myDeclaration; diff --git a/python/src/com/jetbrains/python/documentation/DocStringTypeReference.java b/python/src/com/jetbrains/python/documentation/DocStringTypeReference.java index 706607b86a28..00446ffd04c4 100644 --- a/python/src/com/jetbrains/python/documentation/DocStringTypeReference.java +++ b/python/src/com/jetbrains/python/documentation/DocStringTypeReference.java @@ -9,10 +9,7 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyImportedModule; import com.jetbrains.python.psi.impl.PyQualifiedName; import com.jetbrains.python.psi.resolve.ResolveImportUtil; -import com.jetbrains.python.psi.types.PyClassType; -import com.jetbrains.python.psi.types.PyImportedModuleType; -import com.jetbrains.python.psi.types.PyType; -import com.jetbrains.python.psi.types.TypeEvalContext; +import com.jetbrains.python.psi.types.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,7 +41,7 @@ public class DocStringTypeReference extends PsiReferenceBase { if (qname != null) { qname = qname.append(cls.getName()); ElementManipulator manipulator = ElementManipulators.getManipulator(e); - myType = new PyClassType(cls, false); + myType = new PyClassTypeImpl(cls, false); return manipulator.handleContentChange(e, myFullRange, qname.toString()); } } diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index 545050d81aee..aecf49f6c506 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -389,7 +389,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { return; } if (refex.getQualifier() != null) { - final PyClassType object_type = PyBuiltinCache.getInstance(node).getObjectType(); + final PyClassTypeImpl object_type = (PyClassTypeImpl)PyBuiltinCache.getInstance(node).getObjectType(); if ((object_type != null) && object_type.getPossibleInstanceMembers().contains(refname)) return; } else { @@ -446,7 +446,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { return; } addCreateMemberFromUsageFixes(qtype, reference, ref_text, actions); - if (qtype instanceof PyClassType) { + if (qtype instanceof PyClassTypeImpl) { if (reference instanceof PyOperatorReference) { description = PyBundle.message("INSP.unresolved.operator.ref", qtype.getName(), refname, @@ -530,7 +530,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { return true; } } - if (qtype instanceof PyClassType) { + if (qtype instanceof PyClassTypeImpl) { PyClass cls = ((PyClassType)qtype).getPyClass(); if (cls != null) { if (overridesGetAttr(cls)) { @@ -562,7 +562,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { private static void addCreateMemberFromUsageFixes(PyType qtype, PsiReference reference, String refText, List actions) { PsiElement element = reference.getElement(); - if (qtype instanceof PyClassType) { + if (qtype instanceof PyClassTypeImpl) { PyClass cls = ((PyClassType)qtype).getPyClass(); if (cls != null) { if (!PyBuiltinCache.getInstance(element).hasInBuiltins(cls)) { @@ -597,7 +597,7 @@ public class PyUnresolvedReferencesInspection extends PyInspection { PyExpression callexpr = ((PyAssignmentStatement)statement).getAssignedValue(); if (callexpr instanceof PyCallExpression) { PyType type = myTypeEvalContext.getType(callexpr); - if (type != null && type instanceof PyClassType) { + if (type != null && type instanceof PyClassTypeImpl) { String name = ((PyCallExpression)callexpr).getCallee().getText(); if (name != null && name.equals("property")) { actions.add(new UnresolvedReferenceAddSelfQuickFix(refex)); diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index 1012485bbd51..2ecf8a58bfde 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -41,10 +41,7 @@ import com.jetbrains.python.documentation.EpydocUtil; import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.QualifiedResolveResult; -import com.jetbrains.python.psi.types.PyClassType; -import com.jetbrains.python.psi.types.PyTupleType; -import com.jetbrains.python.psi.types.PyType; -import com.jetbrains.python.psi.types.TypeEvalContext; +import com.jetbrains.python.psi.types.*; import com.jetbrains.python.refactoring.classes.extractSuperclass.PyExtractSuperclassHelper; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -398,7 +395,7 @@ public class PyUtil { if ("__class__".equals(attr_name)) { PyType qual_type = context.getType(qualifier); if (qual_type instanceof PyClassType) { - return new PyClassType(((PyClassType)qual_type).getPyClass(), true); // always as class, never instance + return new PyClassTypeImpl(((PyClassType)qual_type).getPyClass(), true); // always as class, never instance } } else if ("__dict__".equals(attr_name)) { diff --git a/python/src/com/jetbrains/python/psi/impl/PyBuiltinCache.java b/python/src/com/jetbrains/python/psi/impl/PyBuiltinCache.java index d37d7b095311..24f1f8b3147c 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyBuiltinCache.java +++ b/python/src/com/jetbrains/python/psi/impl/PyBuiltinCache.java @@ -23,10 +23,7 @@ import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PySequenceExpression; import com.jetbrains.python.psi.resolve.PythonSdkPathCache; -import com.jetbrains.python.psi.types.PyClassType; -import com.jetbrains.python.psi.types.PyLiteralCollectionType; -import com.jetbrains.python.psi.types.PyType; -import com.jetbrains.python.psi.types.PyUnionType; +import com.jetbrains.python.psi.types.*; import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -186,13 +183,13 @@ public class PyBuiltinCache { /** * Stores the most often used types, returned by getNNNType(). */ - private final Map myTypeCache = new HashMap(); + private final Map myTypeCache = new HashMap(); private final Map> myStdlibTypeCache = new HashMap>(); private long myModStamp = -1; @Nullable - public PyClassType getObjectType(@NonNls String name) { - PyClassType val; + public PyClassTypeImpl getObjectType(@NonNls String name) { + PyClassTypeImpl val; synchronized (myTypeCache) { if (myBuiltinsFile != null) { if (myBuiltinsFile.getModificationStamp() != myModStamp) { @@ -205,7 +202,7 @@ public class PyBuiltinCache { if (val == null) { PyClass cls = getClass(name); if (cls != null) { // null may happen during testing - val = new PyClassType(cls, false); + val = new PyClassTypeImpl(cls, false); val.assertValid(name); synchronized (myTypeCache) { myTypeCache.put(name, val); diff --git a/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java index 0f22c649c5fe..9e27e7ab9de0 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java @@ -158,7 +158,7 @@ public class PyCallExpressionImpl extends PyElementImpl implements PyCallExpress final PyType elementType = ((PyCollectionType)t).getElementType(context); return new PyCollectionTypeImpl(cls, false, elementType); } - return new PyClassType(cls, false); + return new PyClassTypeImpl(cls, false); } } if (t != null && !(t instanceof PyNoneType)) { @@ -172,7 +172,7 @@ public class PyCallExpressionImpl extends PyElementImpl implements PyCallExpress } } if (cls != null) { - return new PyClassType(cls, false); + return new PyClassTypeImpl(cls, false); } final PyType providedType = PyReferenceExpressionImpl.getReferenceTypeFromProviders(target, context, this); if (providedType != null) { @@ -260,7 +260,7 @@ public class PyCallExpressionImpl extends PyElementImpl implements PyCallExpress if (secondClass != null && secondClass.isSubclass(firstClass)) { final Iterator iterator = firstClass.iterateAncestorClasses().iterator(); if (iterator.hasNext()) { - return new PyClassType(iterator.next(), false); // super(Foo, self) has type of Foo, modulo __get__() + return new PyClassTypeImpl(iterator.next(), false); // super(Foo, self) has type of Foo, modulo __get__() } } } @@ -276,11 +276,11 @@ public class PyCallExpressionImpl extends PyElementImpl implements PyCallExpress final PyClass[] supers = pyClass.getSuperClasses(); if (supers.length > 0) { if (supers.length == 1) { - return new PyClassType(supers[0], false); + return new PyClassTypeImpl(supers[0], false); } List superTypes = new ArrayList(); for (PyClass aSuper : supers) { - superTypes.add(new PyClassType(aSuper, false)); + superTypes.add(new PyClassTypeImpl(aSuper, false)); } return PyUnionType.union(superTypes); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java index 684efcb4d99e..d00a2160daab 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java @@ -25,7 +25,7 @@ import com.jetbrains.python.psi.stubs.PropertyStubStorage; import com.jetbrains.python.psi.stubs.PyClassStub; import com.jetbrains.python.psi.stubs.PyFunctionStub; import com.jetbrains.python.psi.stubs.PyTargetExpressionStub; -import com.jetbrains.python.psi.types.PyClassType; +import com.jetbrains.python.psi.types.PyClassTypeImpl; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import com.jetbrains.python.toolbox.Maybe; @@ -54,7 +54,7 @@ public class PyClassImpl extends PyPresentableElementImpl implement @Override public PyType getType(@NotNull TypeEvalContext context) { - return new PyClassType(this, true); + return new PyClassTypeImpl(this, true); } private class NewStyleCachedValueProvider implements CachedValueProvider { diff --git a/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java index 139459a65492..f5e884d76735 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java @@ -208,7 +208,7 @@ public class PyFunctionImpl extends PyPresentableElementImpl imp if (anno != null) { PyClass pyClass = anno.resolveToClass(); if (pyClass != null) { - return new PyClassType(pyClass, false); + return new PyClassTypeImpl(pyClass, false); } } } diff --git a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java index fe0d8dacd8f3..9338c1bd6cfc 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java @@ -173,7 +173,7 @@ public class PyNamedParameterImpl extends PyPresentableElementImpl classes = PyClassNameIndexInsensitive.find(className, getElement().getProject()); classes = filterByImports(classes, myElement.getContainingFile()); if (classes.size() == 1) { - final PyClassType classType = new PyClassType(classes.iterator().next(), false); + final PyClassType classType = new PyClassTypeImpl(classes.iterator().next(), false); return getTypeCompletionVariants(myElement, classType); } } diff --git a/python/src/com/jetbrains/python/psi/types/PyClassMembersProvider.java b/python/src/com/jetbrains/python/psi/types/PyClassMembersProvider.java index cbfe2e40769f..dd6b8c0eda59 100644 --- a/python/src/com/jetbrains/python/psi/types/PyClassMembersProvider.java +++ b/python/src/com/jetbrains/python/psi/types/PyClassMembersProvider.java @@ -14,6 +14,7 @@ public interface PyClassMembersProvider { ExtensionPointName EP_NAME = ExtensionPointName.create("Pythonid.pyClassMembersProvider"); Collection getMembers(PyClassType clazz); + @Nullable PsiElement resolveMember(PyClassType clazz, String name); } diff --git a/python/src/com/jetbrains/python/psi/types/PyClassType.java b/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java similarity index 94% rename from python/src/com/jetbrains/python/psi/types/PyClassType.java rename to python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java index 487ad3fd8989..5b73a31aa78e 100644 --- a/python/src/com/jetbrains/python/psi/types/PyClassType.java +++ b/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java @@ -32,7 +32,7 @@ import java.util.*; /** * @author yole */ -public class PyClassType extends UserDataHolderBase implements PyCallableType { +public class PyClassTypeImpl extends UserDataHolderBase implements PyClassType { @Nullable protected final PyClass myClass; protected final boolean myIsDefinition; @@ -53,17 +53,17 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { * @param source PyClass which defines this type. For builtin or external classes, skeleton files contain the definitions. * @param is_definition whether this type describes an instance or a definition of the class. */ - public PyClassType(@Nullable PyClass source, boolean is_definition) { + public PyClassTypeImpl(@Nullable PyClass source, boolean is_definition) { myClass = source != null ? CompletionUtil.getOriginalElement(source) : null; myIsDefinition = is_definition; } - public PyClassType(@NotNull Project project, String classQualifiedName, boolean isDefinition) { + public PyClassTypeImpl(@NotNull Project project, String classQualifiedName, boolean isDefinition) { myClass = PyClassNameIndex.findClass(classQualifiedName, project); myIsDefinition = isDefinition; } - public PyClassType withUserData(Key key, T value) { + public PyClassTypeImpl withUserData(Key key, T value) { putUserData(key, value); return this; } @@ -71,7 +71,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { /** * @return a PyClass which defined this type. */ - @Nullable + @Override@Nullable public PyClass getPyClass() { return myClass; } @@ -79,15 +79,15 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { /** * @return whether this type refers to an instance or a definition of the class. */ - public boolean isDefinition() { + @Override public boolean isDefinition() { return myIsDefinition; } - public PyClassType toInstance() { - return myIsDefinition ? new PyClassType(myClass, false) : this; + @Override public PyClassType toInstance() { + return myIsDefinition ? new PyClassTypeImpl(myClass, false) : this; } - @Nullable + @Override@Nullable public String getClassQName() { return myClass == null ? null : myClass.getQualifiedName(); } @@ -148,7 +148,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { if (derived_class != null) { final Iterator base_it = derived_class.iterateAncestorClasses().iterator(); if (base_it.hasNext()) { - return new PyClassType(base_it.next(), true).resolveMember(name, location, direction, resolveContext); + return new PyClassTypeImpl(base_it.next(), true).resolveMember(name, location, direction, resolveContext); } else { return null; // no base classes = super() cannot proxy anything meaningful from a base class @@ -202,7 +202,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { for (PyClassRef superClass : myClass.iterateAncestors()) { final PyClass pyClass = superClass.getPyClass(); if (pyClass != null) { - PsiElement superMember = resolveByMembersProviders(new PyClassType(pyClass, isDefinition()), name); + PsiElement superMember = resolveByMembersProviders(new PyClassTypeImpl(pyClass, isDefinition()), name); if (superMember != null) { return ResolveResultList.to(superMember); @@ -225,7 +225,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { if (metaclass instanceof PyReferenceExpression) { final QualifiedResolveResult result = ((PyReferenceExpression)metaclass).followAssignmentsChain(PyResolveContext.noImplicits()); if (result.getElement() instanceof PyClass) { - return new PyClassType((PyClass)result.getElement(), false); + return new PyClassTypeImpl((PyClass)result.getElement(), false); } } } @@ -236,7 +236,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { @Override public PyType getCallType(@NotNull TypeEvalContext context, @Nullable PyQualifiedExpression callSite) { if (isDefinition()) { - return new PyClassType(getPyClass(), false); + return new PyClassTypeImpl(getPyClass(), false); } return null; } @@ -392,7 +392,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { return; } for (PyClass ancestor : myClass.getSuperClasses()) { - Object[] ancestry = (new PyClassType(ancestor, myIsDefinition)).getCompletionVariants(name, expressionHook, context); + Object[] ancestry = (new PyClassTypeImpl(ancestor, myIsDefinition)).getCompletionVariants(name, expressionHook, context); for (Object ob : ancestry) { String inheritedName = ob.toString(); if (!namesAlready.contains(inheritedName) && !isClassPrivate(inheritedName)) { @@ -448,7 +448,7 @@ public class PyClassType extends UserDataHolderBase implements PyCallableType { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - PyClassType classType = (PyClassType)o; + PyClassTypeImpl classType = (PyClassTypeImpl)o; if (myIsDefinition != classType.myIsDefinition) return false; if (myClass != null ? !myClass.equals(classType.myClass) : classType.myClass != null) return false; diff --git a/python/src/com/jetbrains/python/psi/types/PyCollectionTypeImpl.java b/python/src/com/jetbrains/python/psi/types/PyCollectionTypeImpl.java index 4dcae985535b..efcfab627c95 100644 --- a/python/src/com/jetbrains/python/psi/types/PyCollectionTypeImpl.java +++ b/python/src/com/jetbrains/python/psi/types/PyCollectionTypeImpl.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.Nullable; /** * @author yole */ -public class PyCollectionTypeImpl extends PyClassType implements PyCollectionType { +public class PyCollectionTypeImpl extends PyClassTypeImpl implements PyCollectionType { private final PyType myElementType; public PyCollectionTypeImpl(@Nullable PyClass source, boolean isDefinition, PyType elementType) { diff --git a/python/src/com/jetbrains/python/psi/types/PyLiteralCollectionType.java b/python/src/com/jetbrains/python/psi/types/PyLiteralCollectionType.java index b103aa023c37..fd99a282212b 100644 --- a/python/src/com/jetbrains/python/psi/types/PyLiteralCollectionType.java +++ b/python/src/com/jetbrains/python/psi/types/PyLiteralCollectionType.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.Nullable; /** * @author yole */ -public class PyLiteralCollectionType extends PyClassType implements PyCollectionType { +public class PyLiteralCollectionType extends PyClassTypeImpl implements PyCollectionType { private final PySequenceExpression mySequence; public PyLiteralCollectionType(@Nullable PyClass source, boolean isDefinition, PySequenceExpression sequence) { diff --git a/python/src/com/jetbrains/python/psi/types/PyTupleType.java b/python/src/com/jetbrains/python/psi/types/PyTupleType.java index f070167e317d..2a643ca026ae 100644 --- a/python/src/com/jetbrains/python/psi/types/PyTupleType.java +++ b/python/src/com/jetbrains/python/psi/types/PyTupleType.java @@ -13,7 +13,7 @@ import java.util.Arrays; /** * @author yole */ -public class PyTupleType extends PyClassType implements PySubscriptableType { +public class PyTupleType extends PyClassTypeImpl implements PySubscriptableType { private final PyType[] myElementTypes; public PyTupleType(PsiElement anchor, PyType[] elementTypes) { diff --git a/python/src/com/jetbrains/python/psi/types/PyTypeParser.java b/python/src/com/jetbrains/python/psi/types/PyTypeParser.java index b221541df290..663d573c2b6a 100644 --- a/python/src/com/jetbrains/python/psi/types/PyTypeParser.java +++ b/python/src/com/jetbrains/python/psi/types/PyTypeParser.java @@ -169,7 +169,7 @@ public class PyTypeParser { if (anchorFile instanceof PyFile) { final PyClass aClass = ((PyFile)anchorFile).findTopLevelClass(type); if (aClass != null) { - final PyType t = new PyClassType(aClass, false); + final PyType t = new PyClassTypeImpl(aClass, false); types.put(whole, t); return t; } @@ -195,7 +195,7 @@ public class PyTypeParser { if (StringUtil.isJavaIdentifier(type)) { final Collection classes = PyClassNameIndex.find(type, anchor.getProject(), true); if (classes.size() == 1) { - final PyType t = new PyClassType(classes.iterator().next(), false); + final PyType t = new PyClassTypeImpl(classes.iterator().next(), false); types.put(whole, t); return t; } @@ -243,7 +243,7 @@ public class PyTypeParser { final Collection classes = PyClassNameIndex.find(shortName, anchor.getProject(), true); for (PyClass aClass : classes) { if (qName.equals(aClass.getQualifiedName())) { - final PyType t = new PyClassType(aClass, false); + final PyType t = new PyClassTypeImpl(aClass, false); types.put(classRange.shiftRight(offset), t); fullRanges.put(t, whole); return t; @@ -253,7 +253,7 @@ public class PyTypeParser { for (PyClass aClass : classes) { final String name = aClass.getQualifiedName(); if (name != null && name.startsWith("_")) { - final PyType t = new PyClassType(aClass, false); + final PyType t = new PyClassTypeImpl(aClass, false); types.put(classRange.shiftRight(offset), t); fullRanges.put(t, whole); return t; diff --git a/python/src/com/jetbrains/python/psi/types/PyTypeProviderBase.java b/python/src/com/jetbrains/python/psi/types/PyTypeProviderBase.java index 208bb6128941..78b6c8944d20 100644 --- a/python/src/com/jetbrains/python/psi/types/PyTypeProviderBase.java +++ b/python/src/com/jetbrains/python/psi/types/PyTypeProviderBase.java @@ -49,7 +49,7 @@ public class PyTypeProviderBase implements PyTypeProvider { @Override public PyType getType(@Nullable PyQualifiedExpression callSite, @Nullable PyType qualifierType, TypeEvalContext context) { if (qualifierType instanceof PyClassType) { - return new PyClassType(((PyClassType)qualifierType).getPyClass(), false); + return new PyClassTypeImpl(((PyClassType)qualifierType).getPyClass(), false); } return null; } diff --git a/python/src/com/jetbrains/python/psi/types/PyWeakClassType.java b/python/src/com/jetbrains/python/psi/types/PyWeakClassType.java index e9a463425730..16a22ec3a7bf 100644 --- a/python/src/com/jetbrains/python/psi/types/PyWeakClassType.java +++ b/python/src/com/jetbrains/python/psi/types/PyWeakClassType.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.Nullable; /** * @author traff */ -public class PyWeakClassType extends PyClassType implements PyWeakType { +public class PyWeakClassType extends PyClassTypeImpl implements PyWeakType { public PyWeakClassType(@Nullable PyClass source, boolean is_definition) { super(source, is_definition); }