use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyQtTypeProvider method getReturnType.
@Override
public Ref<PyType> getReturnType(@NotNull PyCallable callable, @NotNull TypeEvalContext context) {
if (PyNames.INIT.equals(callable.getName()) && callable instanceof PyFunction) {
final PyFunction function = (PyFunction) callable;
final PyClass containingClass = function.getContainingClass();
if (containingClass != null && ourQt4Signal.equals(containingClass.getName())) {
final String classQName = containingClass.getQualifiedName();
if (classQName != null) {
final QualifiedName name = QualifiedName.fromDottedString(classQName);
final String qtVersion = name.getComponents().get(0);
final PyClass aClass = PyClassNameIndex.findClass(qtVersion + "." + ourQtBoundSignal, function.getProject());
if (aClass != null) {
final PyType type = new PyClassTypeImpl(aClass, false);
return Ref.create(type);
}
}
}
}
return null;
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyTypeCheckerInspectionProblemRegistrar method getSingleCalleeProblemMessage.
@NotNull
private static String getSingleCalleeProblemMessage(@NotNull PyTypeCheckerInspection.AnalyzeArgumentResult argumentResult, @NotNull TypeEvalContext context) {
final PyType actualType = argumentResult.getActualType();
final PyType expectedType = argumentResult.getExpectedType();
// see PyTypeCheckerInspection.Visitor.analyzeArgument()
assert actualType != null;
// see PyTypeCheckerInspection.Visitor.analyzeArgument()
assert expectedType != null;
final String actualTypeName = PythonDocumentationProvider.getTypeName(actualType, context);
if (expectedType instanceof PyStructuralType) {
final Set<String> expectedAttributes = ((PyStructuralType) expectedType).getAttributeNames();
final Set<String> actualAttributes = getAttributes(actualType, context);
if (actualAttributes != null) {
final Sets.SetView<String> missingAttributes = Sets.difference(expectedAttributes, actualAttributes);
if (missingAttributes.size() == 1) {
return String.format("Type '%s' doesn't have expected attribute '%s'", actualTypeName, missingAttributes.iterator().next());
} else {
return String.format("Type '%s' doesn't have expected attributes %s", actualTypeName, StringUtil.join(missingAttributes, s -> String.format("'%s'", s), ", "));
}
}
}
final String expectedTypeRepresentation = getSingleCalleeExpectedTypeRepresentation(expectedType, argumentResult.getExpectedTypeAfterSubstitution(), context);
return String.format("Expected type %s, got '%s' instead", expectedTypeRepresentation, actualTypeName);
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class AddMethodQuickFix method getClassType.
private static PyClassType getClassType(@NotNull final PsiElement problemElement) {
if ((problemElement instanceof PyQualifiedExpression)) {
final PyExpression qualifier = ((PyQualifiedExpression) problemElement).getQualifier();
if (qualifier == null)
return null;
final PyType type = TypeEvalContext.userInitiated(problemElement.getProject(), problemElement.getContainingFile()).getType(qualifier);
return type instanceof PyClassType ? (PyClassType) type : null;
}
final PyClass pyClass = PsiTreeUtil.getParentOfType(problemElement, PyClass.class);
return pyClass != null ? new PyClassTypeImpl(pyClass, false) : null;
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class PyiUtil method findSimilarElement.
@Nullable
private static PsiElement findSimilarElement(@NotNull PyElement element, @NotNull PyFile file) {
if (element instanceof PyFile) {
return file;
}
final ScopeOwner owner = ScopeUtil.getScopeOwner(element);
final String name = element.getName();
if (owner != null && name != null) {
assert owner != element;
final PsiElement originalOwner = findSimilarElement(owner, file);
if (originalOwner instanceof PyClass) {
final PyClass classOwner = (PyClass) originalOwner;
final PyType type = TypeEvalContext.codeInsightFallback(classOwner.getProject()).getType(classOwner);
if (type instanceof PyClassLikeType) {
final PyClassLikeType classType = (PyClassLikeType) type;
final PyClassLikeType instanceType = classType.toInstance();
final List<? extends RatedResolveResult> resolveResults = instanceType.resolveMember(name, null, AccessDirection.READ, PyResolveContext.noImplicits(), false);
if (resolveResults != null && !resolveResults.isEmpty()) {
return resolveResults.get(0).getElement();
}
}
} else if (originalOwner instanceof PyFile) {
return ((PyFile) originalOwner).getElementNamed(name);
}
}
return null;
}
use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.
the class ResolveImportUtil method resolveMemberFromReferenceTypeProviders.
@NotNull
private static List<RatedResolveResult> resolveMemberFromReferenceTypeProviders(@NotNull PsiElement parent, @NotNull String referencedName) {
final PyResolveContext resolveContext = PyResolveContext.defaultContext();
final PyType refType = PyReferenceExpressionImpl.getReferenceTypeFromProviders(parent, resolveContext.getTypeEvalContext(), null);
if (refType != null) {
final List<? extends RatedResolveResult> result = refType.resolveMember(referencedName, null, AccessDirection.READ, resolveContext);
if (result != null) {
return Lists.newArrayList(result);
}
}
return Collections.emptyList();
}
Aggregations