Search in sources :

Example 31 with PyType

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();
}
Also used : PyType(com.jetbrains.python.psi.types.PyType) NotNull(org.jetbrains.annotations.NotNull)

Example 32 with PyType

use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.

the class PyIterableVariableMacro method getIterableElements.

@NotNull
protected List<PsiNamedElement> getIterableElements(@NotNull PsiElement element) {
    final TypeEvalContext typeEvalContext = TypeEvalContext.userInitiated(element.getProject(), element.getContainingFile());
    final List<PsiNamedElement> components = new ArrayList<>();
    for (PsiNamedElement namedElement : getVisibleNamedElements(element)) {
        if (namedElement instanceof PyTypedElement) {
            final PyType type = typeEvalContext.getType((PyTypedElement) namedElement);
            if (type != null && PyABCUtil.isSubtype(type, PyNames.ITERABLE, typeEvalContext)) {
                components.add(namedElement);
            }
        }
    }
    return components;
}
Also used : PsiNamedElement(com.intellij.psi.PsiNamedElement) PyType(com.jetbrains.python.psi.types.PyType) ArrayList(java.util.ArrayList) PyTypedElement(com.jetbrains.python.psi.PyTypedElement) TypeEvalContext(com.jetbrains.python.psi.types.TypeEvalContext) NotNull(org.jetbrains.annotations.NotNull)

Example 33 with PyType

use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.

the class PyDictConstructorToLiteralFormIntention method isAvailable.

public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
    if (!(file instanceof PyFile)) {
        return false;
    }
    PyCallExpression expression = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyCallExpression.class);
    if (expression != null && expression.isCalleeText("dict")) {
        final TypeEvalContext context = TypeEvalContext.codeAnalysis(file.getProject(), file);
        PyType type = context.getType(expression);
        if (type != null && type.isBuiltin()) {
            PyExpression[] argumentList = expression.getArguments();
            for (PyExpression argument : argumentList) {
                if (!(argument instanceof PyKeywordArgument))
                    return false;
            }
            return true;
        }
    }
    return false;
}
Also used : PyType(com.jetbrains.python.psi.types.PyType) TypeEvalContext(com.jetbrains.python.psi.types.TypeEvalContext)

Example 34 with PyType

use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.

the class PyDebugProcess method getSourcePositionForName.

@Nullable
@Override
public XSourcePosition getSourcePositionForName(String name, String parentType) {
    if (name == null)
        return null;
    XSourcePosition currentPosition = getCurrentFrameSourcePosition();
    final PsiFile file = getPsiFile(currentPosition);
    if (file == null)
        return null;
    if (Strings.isNullOrEmpty(parentType)) {
        final Ref<PsiElement> elementRef = resolveInCurrentFrame(name, currentPosition, file);
        return elementRef.isNull() ? null : XDebuggerUtil.getInstance().createPositionByElement(elementRef.get());
    } else {
        final PyType parentDef = resolveTypeFromString(parentType, file);
        if (parentDef == null) {
            return null;
        }
        List<? extends RatedResolveResult> results = parentDef.resolveMember(name, null, AccessDirection.READ, PyResolveContext.noImplicits());
        if (results != null && !results.isEmpty()) {
            return XDebuggerUtil.getInstance().createPositionByElement(results.get(0).getElement());
        } else {
            // at least try to return parent
            return typeToPosition(parentDef);
        }
    }
}
Also used : PyType(com.jetbrains.python.psi.types.PyType) PsiFile(com.intellij.psi.PsiFile) PsiElement(com.intellij.psi.PsiElement) Nullable(org.jetbrains.annotations.Nullable)

Example 35 with PyType

use of com.jetbrains.python.psi.types.PyType in project intellij-community by JetBrains.

the class PyDebugProcess method resolveTypeFromString.

private PyType resolveTypeFromString(String typeName, PsiFile file) {
    typeName = typeName.replace("__builtin__.", "");
    PyType pyType = null;
    if (!typeName.contains(".")) {
        pyType = PyTypeParser.getTypeByName(file, typeName);
    }
    if (pyType == null) {
        PyElementGenerator generator = PyElementGenerator.getInstance(getProject());
        PyPsiFacade psiFacade = PyPsiFacade.getInstance(getProject());
        PsiFile dummyFile = generator.createDummyFile(((PyFile) file).getLanguageLevel(), "");
        Module moduleForFile = ModuleUtilCore.findModuleForPsiElement(file);
        dummyFile.putUserData(ModuleUtilCore.KEY_MODULE, moduleForFile);
        pyType = psiFacade.parseTypeAnnotation(typeName, dummyFile);
    }
    return pyType;
}
Also used : PyType(com.jetbrains.python.psi.types.PyType) PsiFile(com.intellij.psi.PsiFile) Module(com.intellij.openapi.module.Module)

Aggregations

PyType (com.jetbrains.python.psi.types.PyType)42 TypeEvalContext (com.jetbrains.python.psi.types.TypeEvalContext)13 PsiElement (com.intellij.psi.PsiElement)11 Nullable (org.jetbrains.annotations.Nullable)9 PyClassType (com.jetbrains.python.psi.types.PyClassType)6 NotNull (org.jetbrains.annotations.NotNull)6 PsiFile (com.intellij.psi.PsiFile)5 ArrayList (java.util.ArrayList)5 PyClassLikeType (com.jetbrains.python.psi.types.PyClassLikeType)4 PyClassTypeImpl (com.jetbrains.python.psi.types.PyClassTypeImpl)4 NumpyDocString (com.jetbrains.python.documentation.docstrings.NumpyDocString)3 PyExpression (com.jetbrains.python.psi.PyExpression)3 FileASTNode (com.intellij.lang.FileASTNode)2 TextRange (com.intellij.openapi.util.TextRange)2 PsiReference (com.intellij.psi.PsiReference)2 IncorrectOperationException (com.intellij.util.IncorrectOperationException)2 ScopeOwner (com.jetbrains.python.codeInsight.controlflow.ScopeOwner)2 PyClass (com.jetbrains.python.psi.PyClass)2 PyFunctionBuilder (com.jetbrains.python.psi.impl.PyFunctionBuilder)2 PyStructuralType (com.jetbrains.python.psi.types.PyStructuralType)2