Search in sources :

Example 1 with CompletionCache

use of org.python.pydev.ast.codecompletion.revisited.CompletionCache in project Pydev by fabioz.

the class TddCodeGenerationQuickFixParticipant method checkCreationBasedOnFoundPointers.

public boolean checkCreationBasedOnFoundPointers(PyEdit edit, PySelection callPs, List<ICompletionProposalHandle> ret, TddPossibleMatches possibleMatch, ItemPointer[] pointers, String methodToCreate, PySelection newSelection, IPythonNature nature) throws MisconfigurationException, Exception {
    CompletionCache completionCache = new CompletionCache();
    for (ItemPointer pointer : pointers) {
        Definition definition = pointer.definition;
        try {
            definition = rebaseToClassDefDefinition(nature, completionCache, definition, null);
        } catch (CompletionRecursionException e) {
            // Just keep going.
            Log.log(e);
        }
        if (definition.ast instanceof ClassDef) {
            ClassDef d = (ClassDef) definition.ast;
            String fullName = NodeUtils.getRepresentationString(d) + "." + methodToCreate;
            IToken repInModule = nature.getAstManager().getRepInModule(definition.module, fullName, nature);
            if (repInModule != null) {
                // System.out.println("Skipping creation of: " + fullName); //We found it, so, don't suggest it.
                continue;
            }
            for (Boolean isCall : new Boolean[] { true, false }) {
                // Give the user a chance to create the method we didn't find.
                PyCreateMethodOrField pyCreateMethod = new PyCreateMethodOrField();
                List<String> parametersAfterCall = null;
                parametersAfterCall = configCreateAsAndReturnParametersAfterCall(callPs, isCall, pyCreateMethod, parametersAfterCall, methodToCreate);
                String className = NodeUtils.getRepresentationString(d);
                pyCreateMethod.setCreateInClass(className);
                String displayString = StringUtils.format("Create %s %s at %s (%s)", methodToCreate, pyCreateMethod.getCreationStr(), className, definition.module.getName());
                TddRefactorCompletionInModule completion = new TddRefactorCompletionInModule(methodToCreate, tddQuickFixParticipant != null ? tddQuickFixParticipant.imageMethod : null, displayString, null, displayString, IPyCompletionProposal.PRIORITY_CREATE, edit, definition.module.getFile(), parametersAfterCall, pyCreateMethod, newSelection);
                completion.locationStrategy = AbstractPyCreateAction.LOCATION_STRATEGY_END;
                ret.add(completion);
            }
            return true;
        }
    }
    return false;
}
Also used : ClassDef(org.python.pydev.parser.jython.ast.ClassDef) ICompletionCache(org.python.pydev.core.ICompletionCache) CompletionCache(org.python.pydev.ast.codecompletion.revisited.CompletionCache) CompletionRecursionException(org.python.pydev.core.structure.CompletionRecursionException) IToken(org.python.pydev.core.IToken) AssignDefinition(org.python.pydev.ast.codecompletion.revisited.visitors.AssignDefinition) IDefinition(org.python.pydev.core.IDefinition) Definition(org.python.pydev.ast.codecompletion.revisited.visitors.Definition) ItemPointer(org.python.pydev.ast.item_pointer.ItemPointer)

Example 2 with CompletionCache

use of org.python.pydev.ast.codecompletion.revisited.CompletionCache in project Pydev by fabioz.

the class TddQuickFixParticipant method addProps.

@Override
public void addProps(MarkerAnnotationAndPosition markerAnnotation, IAnalysisPreferences analysisPreferences, String line, PySelection ps, int offset, IPythonNature nature, PyEdit edit, List<ICompletionProposalHandle> props) throws BadLocationException, CoreException {
    if (nature == null) {
        return;
    }
    ICodeCompletionASTManager astManager = nature.getAstManager();
    if (astManager == null) {
        return;
    }
    if (markerAnnotation.position == null) {
        return;
    }
    IMarker marker = markerAnnotation.markerAnnotation.getMarker();
    Integer id = (Integer) marker.getAttribute(AnalysisRunner.PYDEV_ANALYSIS_TYPE);
    int start = markerAnnotation.position.offset;
    int end = start + markerAnnotation.position.length;
    ps.setSelection(start, end);
    String markerContents;
    try {
        markerContents = ps.getSelectedText();
    } catch (Exception e1) {
        // Selection may be wrong.
        return;
    }
    IDocument doc = ps.getDoc();
    List<String> parametersAfterCall = ps.getParametersAfterCall(end);
    switch(id) {
        case IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE:
            addCreateClassOption(ps, edit, props, markerContents, parametersAfterCall);
            addCreateMethodOption(ps, edit, props, markerContents, parametersAfterCall);
            break;
        case IAnalysisPreferences.TYPE_UNDEFINED_IMPORT_VARIABLE:
            // Say we had something as:
            // import sys
            // sys.Bar
            // in which case 'Bar' is undefined
            // in this situation, the activationTokenAndQual would be "sys." and "Bar"
            // and we want to get the definition for "sys"
            String[] activationTokenAndQual = ps.getActivationTokenAndQualifier(true);
            if (activationTokenAndQual[0].endsWith(".")) {
                ArrayList<IDefinition> selected = findDefinitions(nature, edit, start - 2, doc);
                for (IDefinition iDefinition : selected) {
                    IModule module = iDefinition.getModule();
                    if (module.getFile() != null) {
                        Definition definition = (Definition) iDefinition;
                        File file = module.getFile();
                        if (definition.ast == null) {
                            // if we have no ast in the definition, it means the module itself was found (global scope)
                            // Add option to create class at the given module!
                            addCreateClassOption(ps, edit, props, markerContents, parametersAfterCall, file);
                            addCreateMethodOption(ps, edit, props, markerContents, parametersAfterCall, file);
                        } else if (definition.ast instanceof ClassDef) {
                            ClassDef classDef = (ClassDef) definition.ast;
                            // Ok, we should create a field or method in this case (accessing a classmethod or staticmethod)
                            PyCreateMethodOrField pyCreateMethod = new PyCreateMethodOrField();
                            String className = NodeUtils.getNameFromNameTok(classDef.name);
                            pyCreateMethod.setCreateInClass(className);
                            pyCreateMethod.setCreateAs(PyCreateMethodOrField.CLASSMETHOD);
                            addCreateClassmethodOption(ps, edit, props, markerContents, parametersAfterCall, pyCreateMethod, file, className);
                        }
                    }
                }
            }
            break;
        case IAnalysisPreferences.TYPE_UNRESOLVED_IMPORT:
            // This case is the following: from other_module4 import Foo
            // with 'Foo' being undefined.
            // So, we have to suggest creating a Foo class/method in other_module4
            PyImportsHandling importsHandling = new PyImportsHandling(ps.getDoc(), false);
            int offsetLine = ps.getLineOfOffset(start);
            String selectedText = ps.getSelectedText();
            Tuple<IModule, String> found = null;
            String foundFromImportStr = null;
            boolean isImportFrom = false;
            OUT: for (ImportHandle handle : importsHandling) {
                if (handle.startFoundLine == offsetLine || handle.endFoundLine == offsetLine || (handle.startFoundLine < offsetLine && handle.endFoundLine > offsetLine)) {
                    List<ImportHandleInfo> importInfo = handle.getImportInfo();
                    for (ImportHandleInfo importHandleInfo : importInfo) {
                        String fromImportStr = importHandleInfo.getFromImportStr();
                        List<String> importedStr = importHandleInfo.getImportedStr();
                        for (String imported : importedStr) {
                            if (selectedText.equals(imported)) {
                                if (fromImportStr != null) {
                                    foundFromImportStr = fromImportStr + "." + imported;
                                    isImportFrom = true;
                                } else {
                                    // if fromImportStr == null, it's not a from xxx import yyy (i.e.: simple import)
                                    foundFromImportStr = imported;
                                }
                                try {
                                    String currentModule = nature.resolveModule(edit.getEditorFile());
                                    ICompletionState state = CompletionStateFactory.getEmptyCompletionState(nature, new CompletionCache());
                                    found = nature.getAstManager().findModule(foundFromImportStr, currentModule, state, new SourceModule(currentModule, edit.getEditorFile(), edit.getAST(), null, nature));
                                } catch (Exception e) {
                                    Log.log(e);
                                }
                                break OUT;
                            }
                        }
                    }
                    break OUT;
                }
            }
            boolean addOptionToCreateClassOrMethod = isImportFrom;
            if (found != null && found.o1 != null) {
                // or just create a class or method at the end.
                if (found.o1 instanceof SourceModule) {
                    // if all was found, there's nothing left to create.
                    if (found.o2 != null && found.o2.length() > 0) {
                        SourceModule sourceModule = (SourceModule) found.o1;
                        File file = sourceModule.getFile();
                        if (found.o2.indexOf('.') != -1) {
                            // We have to create some intermediary structure.
                            if (!addOptionToCreateClassOrMethod) {
                                // Cannot create class or method from the info (only the module structure).
                                if (sourceModule.getName().endsWith(".__init__")) {
                                    File f = getFileStructure(file.getParentFile(), found.o2);
                                    addCreateModuleOption(ps, edit, props, markerContents, f);
                                }
                            } else {
                                // Ok, the leaf may be a class or method.
                                if (sourceModule.getName().endsWith(".__init__")) {
                                    String moduleName = FullRepIterable.getWithoutLastPart(sourceModule.getName());
                                    String withoutLastPart = FullRepIterable.getWithoutLastPart(found.o2);
                                    moduleName += "." + withoutLastPart;
                                    String classOrMethodName = FullRepIterable.getLastPart(found.o2);
                                    File f = getFileStructure(file.getParentFile(), withoutLastPart);
                                    addCreateClassInNewModuleOption(ps, edit, props, classOrMethodName, moduleName, parametersAfterCall, f);
                                    addCreateMethodInNewModuleOption(ps, edit, props, classOrMethodName, moduleName, parametersAfterCall, f);
                                }
                            }
                        } else {
                            // Ok, it's all there, we just have to create the leaf.
                            if (!addOptionToCreateClassOrMethod || sourceModule.getName().endsWith(".__init__")) {
                                // Cannot create class or method from the info (only the module structure).
                                if (sourceModule.getName().endsWith(".__init__")) {
                                    File f = new File(file.getParent(), found.o2 + FileTypesPreferences.getDefaultDottedPythonExtension());
                                    addCreateModuleOption(ps, edit, props, markerContents, f);
                                }
                            } else {
                                // Ok, the leaf may be a class or method.
                                addCreateClassOption(ps, edit, props, markerContents, parametersAfterCall, file);
                                addCreateMethodOption(ps, edit, props, markerContents, parametersAfterCall, file);
                            }
                        }
                    }
                }
            } else if (foundFromImportStr != null) {
                // We couldn't find anything there, so, we have to create the modules structure as needed and
                // maybe create a class or module at the end (but only if it's an import from).
                // Ok, it's all there, we just have to create the leaf.
                // Discover the source folder where we should create the structure.
                File editorFile = edit.getEditorFile();
                String onlyProjectPythonPathStr = nature.getPythonPathNature().getOnlyProjectPythonPathStr(false);
                List<String> split = StringUtils.splitAndRemoveEmptyTrimmed(onlyProjectPythonPathStr, '|');
                for (int i = 0; i < split.size(); i++) {
                    String fullPath = FileUtils.getFileAbsolutePath(split.get(i));
                    fullPath = PythonPathHelper.getDefaultPathStr(fullPath);
                    split.set(i, fullPath);
                }
                HashSet<String> projectSourcePath = new HashSet<String>(split);
                if (projectSourcePath.size() == 0) {
                    // No source folder for editor... this shouldn't happen (code analysis wouldn't even run on it).
                    return;
                }
                String fullPath = FileUtils.getFileAbsolutePath(editorFile);
                fullPath = PythonPathHelper.getDefaultPathStr(fullPath);
                String foundSourceFolderFullPath = null;
                if (projectSourcePath.size() == 1) {
                    foundSourceFolderFullPath = projectSourcePath.iterator().next();
                } else {
                    for (String string : projectSourcePath) {
                        if (fullPath.startsWith(string)) {
                            // Use this as the source folder
                            foundSourceFolderFullPath = string;
                            break;
                        }
                    }
                }
                if (foundSourceFolderFullPath != null) {
                    if (!addOptionToCreateClassOrMethod) {
                        // Cannot create class or method from the info (only the module structure).
                        File f = getFileStructure(new File(foundSourceFolderFullPath), foundFromImportStr);
                        addCreateModuleOption(ps, edit, props, foundFromImportStr, f);
                    } else {
                        // Ok, the leaf may be a class or method.
                        String moduleName = FullRepIterable.getWithoutLastPart(foundFromImportStr);
                        File file = getFileStructure(new File(foundSourceFolderFullPath), moduleName);
                        String lastPart = FullRepIterable.getLastPart(foundFromImportStr);
                        addCreateClassInNewModuleOption(ps, edit, props, lastPart, moduleName, parametersAfterCall, file);
                        addCreateMethodInNewModuleOption(ps, edit, props, lastPart, moduleName, parametersAfterCall, file);
                    }
                }
            }
            break;
    }
}
Also used : IModule(org.python.pydev.core.IModule) ImportHandleInfo(org.python.pydev.core.docutils.ImportHandle.ImportHandleInfo) ClassDef(org.python.pydev.parser.jython.ast.ClassDef) ICompletionState(org.python.pydev.core.ICompletionState) ArrayList(java.util.ArrayList) List(java.util.List) ImportHandle(org.python.pydev.core.docutils.ImportHandle) HashSet(java.util.HashSet) SourceModule(org.python.pydev.ast.codecompletion.revisited.modules.SourceModule) IDefinition(org.python.pydev.core.IDefinition) Definition(org.python.pydev.ast.codecompletion.revisited.visitors.Definition) PyRefactoringFindDefinition(org.python.pydev.ast.refactoring.PyRefactoringFindDefinition) CoreException(org.eclipse.core.runtime.CoreException) BadLocationException(org.eclipse.jface.text.BadLocationException) CompletionRecursionException(org.python.pydev.core.structure.CompletionRecursionException) IDefinition(org.python.pydev.core.IDefinition) ICodeCompletionASTManager(org.python.pydev.core.ICodeCompletionASTManager) CompletionCache(org.python.pydev.ast.codecompletion.revisited.CompletionCache) IMarker(org.eclipse.core.resources.IMarker) File(java.io.File) PyImportsHandling(org.python.pydev.core.docutils.PyImportsHandling) IDocument(org.eclipse.jface.text.IDocument)

Example 3 with CompletionCache

use of org.python.pydev.ast.codecompletion.revisited.CompletionCache in project Pydev by fabioz.

the class ModuleAdapter method resolveClass.

/**
 * Get a class adapter for a given class contained in this module.
 *
 * @param name the name of the class we want to resolve.
 *
 * @return an adapter to the class.
 */
public IClassDefAdapter resolveClass(String name) {
    CompletionCache completionCache = new CompletionCache();
    HashSet<String> toResolve = new HashSet<String>();
    toResolve.add(name);
    Set<IClassDefAdapter> resolved;
    try {
        resolved = resolveImportedClass(toResolve, completionCache);
    } catch (MisconfigurationException e) {
        throw new RuntimeException(e);
    }
    if (toResolve.size() == 1) {
        return resolved.iterator().next();
    }
    return null;
}
Also used : CompletionCache(org.python.pydev.ast.codecompletion.revisited.CompletionCache) MisconfigurationException(org.python.pydev.core.MisconfigurationException) HashSet(java.util.HashSet)

Example 4 with CompletionCache

use of org.python.pydev.ast.codecompletion.revisited.CompletionCache in project Pydev by fabioz.

the class PyStringCodeCompletion method getCodeCompletionProposals.

/**
 * Needed interface for adding the completions on a request
 * @throws MisconfigurationException
 * @throws PythonNatureWithoutProjectException
 * @throws IOException
 */
@Override
public TokensOrProposalsList getCodeCompletionProposals(CompletionRequest request) throws CoreException, BadLocationException, MisconfigurationException, IOException, PythonNatureWithoutProjectException {
    List<ICompletionProposalHandle> completionProposals = new ArrayList<>();
    // don't show templates in strings
    request.showTemplates = false;
    fillWithEpydocFields(request, completionProposals);
    TokensOrProposalsList ret = new TokensOrProposalsList();
    if (completionProposals.size() == 0) {
        // if the size is not 0, it means that this is a place for the '@' stuff, and not for the 'default' context for a string.
        IDocument doc = request.doc;
        FastPartitioner fastPartitioner = ((FastPartitioner) PyPartitionScanner.checkPartitionScanner(doc));
        ITypedRegion partition = fastPartitioner.getPartition(request.documentOffset);
        String partitionType = partition.getType();
        if (IPythonPartitions.F_STRING_PARTITIONS.contains(partitionType)) {
            // Now we are going to check whether where we are in the given completion offset
            int requestOffset = request.documentOffset;
            int partitionOffset = partition.getOffset();
            int partitionLine = doc.getLineOfOffset(partitionOffset);
            int partitionCol = partitionOffset - doc.getLineOffset(partitionLine);
            String str = doc.get(partitionOffset, partition.getLength());
            FStringsAST ast = null;
            try {
                ast = FStringsGrammarFactory.createGrammar(str).f_string();
            } catch (Throwable e) {
            // Just ignore any errors for this.
            }
            if (ast != null && ast.hasChildren()) {
                for (SimpleNode node : ast.getBalancedExpressionsToBeEvaluatedInRegularGrammar()) {
                    int nodeOffset;
                    int nodeEndOffset;
                    if (node.beginLine > 1) {
                        nodeOffset = TextSelectionUtils.getAbsoluteCursorOffset(doc, partitionLine + node.beginLine - 1, node.beginColumn - 1);
                    } else {
                        nodeOffset = TextSelectionUtils.getAbsoluteCursorOffset(doc, partitionLine + node.beginLine - 1, partitionCol + node.beginColumn - 1);
                    }
                    if (node.endLine > 1) {
                        nodeEndOffset = TextSelectionUtils.getAbsoluteCursorOffset(doc, partitionLine + node.endLine - 1, node.endColumn);
                    } else {
                        nodeEndOffset = TextSelectionUtils.getAbsoluteCursorOffset(doc, partitionLine + node.endLine - 1, partitionCol + node.endColumn);
                    }
                    if (requestOffset >= nodeOffset && requestOffset <= nodeEndOffset) {
                        // request is inside a format, so we have to get a normal code completion to it
                        return new PyCodeCompletion().getCodeCompletionProposals(request);
                    }
                }
            }
        }
        PyCodeCompletionsForTypedDict pyCodeCompletionsForTypedDict = new PyCodeCompletionsForTypedDict(request);
        if (pyCodeCompletionsForTypedDict.isTypedDictCompletionRequest()) {
            // If it's a typed dict completion request, don't go into other requests.
            TokensOrProposalsList completionsForTypedDict;
            try {
                completionsForTypedDict = pyCodeCompletionsForTypedDict.getStringCompletions();
                if (completionsForTypedDict != null) {
                    return completionsForTypedDict;
                }
            } catch (CompletionRecursionException e) {
                Log.log(e);
            }
            return new TokensOrProposalsList();
        }
        TokensOrProposalsList stringGlobalsFromParticipants = getStringGlobalsFromParticipants(request, CompletionStateFactory.getEmptyCompletionState(request.activationToken, request.nature, new CompletionCache()));
        ret.addAll(stringGlobalsFromParticipants);
    // the code-below does not work well because the module may not have an actual import for the activation token,
    // so, it is useless too many times
    // if(request.activationToken.length() != 0){
    // PyCodeCompletion completion = new PyCodeCompletion();
    // ret.addAll(completion.getCodeCompletionProposals(viewer, request));
    // }
    }
    fillWithParams(request, completionProposals);
    ret.addAll(new TokensOrProposalsList(completionProposals));
    return ret;
}
Also used : FStringsAST(org.python.pydev.parser.fastparser.grammar_fstrings_common.FStringsAST) ArrayList(java.util.ArrayList) TokensOrProposalsList(org.python.pydev.core.TokensOrProposalsList) SimpleNode(org.python.pydev.parser.fastparser.grammar_fstrings_common.SimpleNode) CompletionCache(org.python.pydev.ast.codecompletion.revisited.CompletionCache) CompletionRecursionException(org.python.pydev.core.structure.CompletionRecursionException) FastPartitioner(org.python.pydev.shared_core.partitioner.FastPartitioner) ITypedRegion(org.eclipse.jface.text.ITypedRegion) ICompletionProposalHandle(org.python.pydev.shared_core.code_completion.ICompletionProposalHandle) IDocument(org.eclipse.jface.text.IDocument)

Example 5 with CompletionCache

use of org.python.pydev.ast.codecompletion.revisited.CompletionCache in project Pydev by fabioz.

the class PyEdit method openWithPathAndInnerStructure.

/**
 * This function will open an editor given the passed parameters
 *
 * @param projectName
 * @param path
 * @param innerStructure
 * @throws MisconfigurationException
 */
public static void openWithPathAndInnerStructure(String projectName, IPath path, List<String> innerStructure) throws MisconfigurationException {
    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IProject project = workspace.getRoot().getProject(projectName);
    if (project != null) {
        IFile file = project.getFile(path);
        if (file != null) {
            IEditorPart editor = PyOpenEditor.doOpenEditor(file);
            if (editor instanceof PyEdit) {
                PyEdit pyEdit = (PyEdit) editor;
                IPythonNature nature = pyEdit.getPythonNature();
                AbstractModule mod = AbstractModule.createModuleFromDoc(nature.resolveModule(file), file.getLocation().toFile(), pyEdit.getDocument(), nature, false);
                StringBuffer tok = new StringBuffer(80);
                for (String s : innerStructure) {
                    if (tok.length() > 0) {
                        tok.append('.');
                    }
                    tok.append(s);
                }
                try {
                    IDefinition[] definitions = mod.findDefinition(CompletionStateFactory.getEmptyCompletionState(tok.toString(), nature, new CompletionCache()), -1, -1, nature);
                    List<ItemPointer> pointers = new ArrayList<ItemPointer>();
                    PyRefactoringFindDefinition.getAsPointers(pointers, definitions);
                    if (pointers.size() > 0) {
                        new PyOpenAction().run(pointers.get(0));
                    }
                } catch (Exception e) {
                    Log.log(e);
                }
            }
        }
    }
}
Also used : IFile(org.eclipse.core.resources.IFile) PyOpenAction(org.python.pydev.editor.actions.PyOpenAction) IPythonNature(org.python.pydev.core.IPythonNature) ArrayList(java.util.ArrayList) IEditorPart(org.eclipse.ui.IEditorPart) IProject(org.eclipse.core.resources.IProject) IDefinition(org.python.pydev.core.IDefinition) CoreException(org.eclipse.core.runtime.CoreException) PartInitException(org.eclipse.ui.PartInitException) SyntaxErrorException(org.python.pydev.core.docutils.SyntaxErrorException) BadLocationException(org.eclipse.jface.text.BadLocationException) DeviceResourceException(org.eclipse.jface.resource.DeviceResourceException) NotConfiguredInterpreterException(org.python.pydev.core.NotConfiguredInterpreterException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ParseException(org.python.pydev.parser.jython.ParseException) MisconfigurationException(org.python.pydev.core.MisconfigurationException) AbstractModule(org.python.pydev.ast.codecompletion.revisited.modules.AbstractModule) CompletionCache(org.python.pydev.ast.codecompletion.revisited.CompletionCache) IWorkspace(org.eclipse.core.resources.IWorkspace) IPyEdit(org.python.pydev.core.IPyEdit) ItemPointer(org.python.pydev.ast.item_pointer.ItemPointer)

Aggregations

CompletionCache (org.python.pydev.ast.codecompletion.revisited.CompletionCache)29 Definition (org.python.pydev.ast.codecompletion.revisited.visitors.Definition)20 Document (org.eclipse.jface.text.Document)18 IModule (org.python.pydev.core.IModule)18 AssignDefinition (org.python.pydev.ast.codecompletion.revisited.visitors.AssignDefinition)14 ICompletionState (org.python.pydev.core.ICompletionState)11 ArrayList (java.util.ArrayList)6 SourceModule (org.python.pydev.ast.codecompletion.revisited.modules.SourceModule)6 IDefinition (org.python.pydev.core.IDefinition)5 CompletionRecursionException (org.python.pydev.core.structure.CompletionRecursionException)5 HashSet (java.util.HashSet)4 IDocument (org.eclipse.jface.text.IDocument)4 AbstractModule (org.python.pydev.ast.codecompletion.revisited.modules.AbstractModule)4 File (java.io.File)3 ItemPointer (org.python.pydev.ast.item_pointer.ItemPointer)3 ICompletionCache (org.python.pydev.core.ICompletionCache)3 MisconfigurationException (org.python.pydev.core.MisconfigurationException)3 JavaDefinition (org.python.pydev.editor.codecompletion.revisited.javaintegration.JavaDefinition)3 JavaZipModule (org.python.pydev.editor.codecompletion.revisited.javaintegration.JavaZipModule)3 Module (org.python.pydev.parser.jython.ast.Module)3