use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyOperatorReference method resolveMember.
@NotNull
private List<RatedResolveResult> resolveMember(@Nullable PyExpression object, @Nullable String name) {
final ArrayList<RatedResolveResult> results = new ArrayList<>();
if (object != null && name != null) {
final TypeEvalContext typeEvalContext = myContext.getTypeEvalContext();
PyType type = typeEvalContext.getType(object);
typeEvalContext.trace("Side text is %s, type is %s", object.getText(), type);
if (type instanceof PyClassLikeType) {
if (((PyClassLikeType) type).isDefinition()) {
type = ((PyClassLikeType) type).getMetaClassType(typeEvalContext, true);
}
}
if (type != null) {
List<? extends RatedResolveResult> res = type.resolveMember(name, object, AccessDirection.of(myElement), myContext);
if (res != null && res.size() > 0) {
results.addAll(res);
} else if (typeEvalContext.tracing()) {
VirtualFile vFile = null;
if (type instanceof PyClassType) {
final PyClass pyClass = ((PyClassType) type).getPyClass();
vFile = pyClass.getContainingFile().getVirtualFile();
}
type.resolveMember(name, object, AccessDirection.of(myElement), myContext);
typeEvalContext.trace("Could not resolve member %s in type %s from file %s", name, type, vFile);
}
}
}
return results;
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyKeyValueExpressionImpl method getType.
public PyType getType(@NotNull TypeEvalContext context, @NotNull TypeEvalContext.Key key) {
final PyType keyType = context.getType(getKey());
final PyExpression value = getValue();
PyType valueType = null;
if (value != null) {
valueType = context.getType(value);
}
return PyTupleType.create(this, Arrays.asList(keyType, valueType));
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyListCompExpressionImpl method getType.
@Nullable
@Override
public PyType getType(@NotNull TypeEvalContext context, @NotNull TypeEvalContext.Key key) {
final PyExpression resultExpr = getResultExpression();
final PyBuiltinCache cache = PyBuiltinCache.getInstance(this);
final PyClass list = cache.getClass("list");
if (resultExpr != null && list != null) {
final PyType elementType = context.getType(resultExpr);
return new PyCollectionTypeImpl(list, false, Collections.singletonList(elementType));
}
return cache.getListType();
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyTypeTest method testReturnTypeOfTypeForInstance.
// PY-7058
public void testReturnTypeOfTypeForInstance() {
PyExpression expr = parseExpr("class C(object):\n" + " pass\n" + "\n" + "x = C()\n" + "expr = type(x)\n");
assertNotNull(expr);
for (TypeEvalContext context : getTypeEvalContexts(expr)) {
PyType type = context.getType(expr);
assertInstanceOf(type, PyClassType.class);
assertTrue("Got instance type instead of class type", ((PyClassType) type).isDefinition());
}
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyTypeTest method doTest.
private static void doTest(final String expectedType, final PyExpression expr, final TypeEvalContext context) {
PyType actual = context.getType(expr);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals(expectedType, actualType);
}
Aggregations