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();
}
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;
}
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;
}
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);
}
}
}
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;
}
Aggregations