import com.intellij.codeInspection.LocalInspectionToolSession;
import com.intellij.lang.ImportOptimizer;
import com.intellij.openapi.util.Condition;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.codeInsight.imports.AddImportHelper.ImportPriority;
Collections.<String>emptyList());
file.accept(new PyRecursiveElementVisitor() {
@Override
- public void visitPyElement(PyElement node) {
- super.visitPyElement(node);
+ public void visitElement(PsiElement node) {
+ super.visitElement(node);
node.accept(visitor);
}
});
import com.jetbrains.python.PyNames;
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
import com.jetbrains.python.codeInsight.PyCustomMember;
+import com.jetbrains.python.codeInsight.PyFunctionTypeCommentReferenceContributor;
import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
import com.jetbrains.python.codeInsight.imports.AutoImportHintAction;
if (comment instanceof PsiLanguageInjectionHost) {
processInjection((PsiLanguageInjectionHost)comment);
}
+ if (PyFunctionTypeCommentReferenceContributor.TYPE_COMMENT_PATTERN.accepts(comment)) {
+ for (PsiReference reference : comment.getReferences()) {
+ if (reference instanceof PsiPolyVariantReference) {
+ markTargetImportsAsUsed((PsiPolyVariantReference)reference);
+ }
+ }
+ }
}
@Override
if (element instanceof PyReferenceOwner) {
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext);
final PsiPolyVariantReference reference = ((PyReferenceOwner)element).getReference(resolveContext);
- final ResolveResult[] resolveResults = reference.multiResolve(false);
- for (ResolveResult resolveResult : resolveResults) {
- if (resolveResult instanceof ImportedResolveResult) {
- final PyImportedNameDefiner definer = ((ImportedResolveResult)resolveResult).getDefiner();
- if (definer != null) {
- myUsedImports.add(definer);
- }
- }
- }
+ markTargetImportsAsUsed(reference);
}
}
}.visitElement(pair.getFirst());
}
}
+ private void markTargetImportsAsUsed(@NotNull PsiPolyVariantReference reference) {
+ final ResolveResult[] resolveResults = reference.multiResolve(false);
+ for (ResolveResult resolveResult : resolveResults) {
+ if (resolveResult instanceof ImportedResolveResult) {
+ final PyImportedNameDefiner definer = ((ImportedResolveResult)resolveResult).getDefiner();
+ if (definer != null) {
+ myUsedImports.add(definer);
+ }
+ }
+ }
+ }
+
private void processReference(PyElement node, @Nullable PsiReference reference) {
if (!isEnabled(node) || reference == null || reference.isSoft()) {
return;