Search in sources :

Example 26 with IToken

use of org.python.pydev.core.IToken in project Pydev by fabioz.

the class AbstractASTManager method filterForWildImport.

/**
 * Filters the tokens according to the wild import rules:
 * - the tokens starting with '_' are removed
 * - if __all__ is available, only the tokens contained in __all__ are returned)
 */
private TokensList filterForWildImport(IModule module, boolean handleAsWildImport, TokensList completionsForModule) {
    if (module != null && handleAsWildImport) {
        ArrayList<IToken> ret = new ArrayList<IToken>();
        for (IterTokenEntry entry : completionsForModule) {
            IToken token = entry.getToken();
            // on wild imports we don't get names that start with '_'
            if (!token.getRepresentation().startsWith("_")) {
                ret.add(token);
            }
        }
        if (module instanceof SourceModule) {
            // Support for __all__: filter things if __all__ is available.
            SourceModule sourceModule = (SourceModule) module;
            GlobalModelVisitor globalModelVisitorCache = sourceModule.getGlobalModelVisitorCache();
            if (globalModelVisitorCache != null) {
                globalModelVisitorCache.filterAll(ret);
            }
        }
        IToken[] array = ret.toArray(new IToken[ret.size()]);
        TokensList retTokensList = new TokensList(array);
        retTokensList.setLookingFor(completionsForModule.getLookingFor());
        return retTokensList;
    } else {
        return completionsForModule;
    }
}
Also used : SourceModule(org.python.pydev.ast.codecompletion.revisited.modules.SourceModule) IToken(org.python.pydev.core.IToken) GlobalModelVisitor(org.python.pydev.ast.codecompletion.revisited.visitors.GlobalModelVisitor) ArrayList(java.util.ArrayList) IterTokenEntry(org.python.pydev.core.IterTokenEntry) TokensList(org.python.pydev.core.TokensList)

Example 27 with IToken

use of org.python.pydev.core.IToken in project Pydev by fabioz.

the class AbstractModule method internalGenerateCachedTokens.

/**
 * Generates the cached tokens in the needed structure for a 'fast' search given a token representation
 * (creates a map with the name of the token --> token).
 */
private Map<String, IToken> internalGenerateCachedTokens(IPythonNature nature, ICompletionCache completionCache, String activationToken, boolean searchSameLevelMods) throws CompletionRecursionException {
    Map<String, IToken> cachedTokens = new HashMap<String, IToken>();
    // if still not found, we have to get all the tokens, including regular and wild imports
    ICompletionState state = CompletionStateFactory.getEmptyCompletionState(nature, completionCache);
    ICodeCompletionASTManager astManager = nature.getAstManager();
    state.setActivationToken(activationToken);
    // we don't want to gather builtins in this case.
    state.setBuiltinsGotten(true);
    TokensList globalTokens = astManager.getCompletionsForModule(this, state, searchSameLevelMods);
    for (IterTokenEntry entry : globalTokens) {
        IToken token = entry.getToken();
        String rep = token.getRepresentation();
        IToken t = cachedTokens.get(rep);
        if (t != null) {
            // only override tokens if it's a getattr that's not defined in the builtin module
            if (rep.equals("__getattribute__") || rep.equals("__getattr__")) {
                if (!isTokenFromBuiltins(token)) {
                    cachedTokens.put(rep, token);
                }
            }
        } else {
            cachedTokens.put(rep, token);
        }
    }
    return cachedTokens;
}
Also used : ICodeCompletionASTManager(org.python.pydev.core.ICodeCompletionASTManager) IToken(org.python.pydev.core.IToken) HashMap(java.util.HashMap) ICompletionState(org.python.pydev.core.ICompletionState) IterTokenEntry(org.python.pydev.core.IterTokenEntry) TokensList(org.python.pydev.core.TokensList)

Example 28 with IToken

use of org.python.pydev.core.IToken in project Pydev by fabioz.

the class ClassDefTokensExtractor method getTokens.

/**
 * @param manager
 * @return TokensList
 */
public TokensList getTokens(ICodeCompletionASTManager manager) {
    List<IToken> globalModelVisitorTokens = GlobalModelVisitor.getTokens(classDef, GlobalModelVisitor.INNER_DEFS, this.module.getName(), initialState, false, this.module.getNature());
    TokensList classTokens = new TokensList(globalModelVisitorTokens);
    try {
        for (int j = 0; j < classDef.bases.length; j++) {
            TokensList completions = getCompletionsForBase(manager, classDef.bases[j]);
            classTokens.addAll(completions);
        }
        TokensList assignmentClassTokens = getAssignmentTokens();
        classTokens.addAll(assignmentClassTokens);
    } catch (CompletionRecursionException e) {
    // let's return what we have so far...
    }
    classTokens.setLookingFor(initialState.getLookingFor());
    return classTokens;
}
Also used : IToken(org.python.pydev.core.IToken) CompletionRecursionException(org.python.pydev.core.structure.CompletionRecursionException) TokensList(org.python.pydev.core.TokensList)

Example 29 with IToken

use of org.python.pydev.core.IToken in project Pydev by fabioz.

the class ClassDefTokensExtractor method extractTokensFromBody.

private TokensList extractTokensFromBody(stmtType[] body) {
    TokensList ret = new TokensList();
    List<IToken> tokensList = new ArrayList<IToken>();
    for (stmtType node : body) {
        if (node instanceof Assign) {
            Assign assign = (Assign) node;
            Optional<IToken> optionalToken = extractTokenFromAssign(assign);
            if (optionalToken.isPresent()) {
                IToken token = optionalToken.get();
                tokensList.add(token);
            }
        }
    }
    ret.addAll(new TokensList(tokensList));
    return ret;
}
Also used : IToken(org.python.pydev.core.IToken) org.python.pydev.parser.jython.ast.stmtType(org.python.pydev.parser.jython.ast.stmtType) ArrayList(java.util.ArrayList) Assign(org.python.pydev.parser.jython.ast.Assign) TokensList(org.python.pydev.core.TokensList)

Example 30 with IToken

use of org.python.pydev.core.IToken in project Pydev by fabioz.

the class CompiledModule method getCached.

/**
 * Gets cached information for the given name. Could be a dotted or non-dotted name.
 */
private static Tuple<File, IToken[]> getCached(String name, IModulesManager manager) {
    ISystemModulesManager systemModulesManager = manager.getSystemModulesManager();
    File f = getCacheFile(name, systemModulesManager);
    if (f != null && f.exists()) {
        try {
            IToken[] toks = null;
            File file = null;
            try (FileInputStream fin = new FileInputStream(f)) {
                try (InputStream in = new BufferedInputStream(new GZIPInputStream(fin))) {
                    try (ObjectInputStream stream = new ObjectInputStream(in)) {
                        ObjectsInternPool.ObjectsPoolMap map = new ObjectsInternPool.ObjectsPoolMap();
                        @SuppressWarnings("unused") Object // we already have the name set (so, it's only there for completeness).
                        _name = stream.readObject();
                        file = (File) stream.readObject();
                        int size = stream.readInt();
                        toks = new IToken[size];
                        IPythonNature nature = systemModulesManager.getNature();
                        for (int i = 0; i < size; i++) {
                            // Note intern (we probably have many empty strings -- or the same for parentPackage)
                            String rep = ObjectsInternPool.internLocal(map, (String) stream.readObject());
                            int type = stream.readInt();
                            String args = ObjectsInternPool.internLocal(map, (String) stream.readObject());
                            String parentPackage = ObjectsInternPool.internLocal(map, (String) stream.readObject());
                            toks[i] = new CompiledToken(rep, "", args, parentPackage, type, nature);
                        }
                        for (int i = 0; i < size; i++) {
                            toks[i].setDocStr(ObjectsInternPool.internLocal(map, (String) stream.readObject()));
                        }
                    }
                }
            }
            return new Tuple<File, IToken[]>(file, toks);
        } catch (Exception e) {
            // Unable to read: just log it
            Log.log("Unable to read contents from: " + f, e);
        }
    }
    return null;
}
Also used : GZIPInputStream(java.util.zip.GZIPInputStream) BufferedInputStream(java.io.BufferedInputStream) ObjectInputStream(java.io.ObjectInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) IPythonNature(org.python.pydev.core.IPythonNature) FileInputStream(java.io.FileInputStream) CoreException(org.eclipse.core.runtime.CoreException) PythonNatureWithoutProjectException(org.python.pydev.core.PythonNatureWithoutProjectException) IOException(java.io.IOException) MisconfigurationException(org.python.pydev.core.MisconfigurationException) GZIPInputStream(java.util.zip.GZIPInputStream) ISystemModulesManager(org.python.pydev.core.ISystemModulesManager) IToken(org.python.pydev.core.IToken) BufferedInputStream(java.io.BufferedInputStream) ObjectsInternPool(org.python.pydev.core.ObjectsInternPool) File(java.io.File) Tuple(org.python.pydev.shared_core.structure.Tuple) ObjectInputStream(java.io.ObjectInputStream)

Aggregations

IToken (org.python.pydev.core.IToken)120 TokensList (org.python.pydev.core.TokensList)48 IterTokenEntry (org.python.pydev.core.IterTokenEntry)35 Document (org.eclipse.jface.text.Document)34 ArrayList (java.util.ArrayList)29 SourceToken (org.python.pydev.ast.codecompletion.revisited.modules.SourceToken)25 IModule (org.python.pydev.core.IModule)20 SimpleNode (org.python.pydev.parser.jython.SimpleNode)20 ICompletionState (org.python.pydev.core.ICompletionState)16 CompletionRecursionException (org.python.pydev.core.structure.CompletionRecursionException)15 HashSet (java.util.HashSet)11 MisconfigurationException (org.python.pydev.core.MisconfigurationException)11 ASTEntry (org.python.pydev.parser.visitors.scope.ASTEntry)11 List (java.util.List)10 Found (com.python.pydev.analysis.visitors.Found)9 ClassDef (org.python.pydev.parser.jython.ast.ClassDef)9 File (java.io.File)8 HashMap (java.util.HashMap)8 NameTok (org.python.pydev.parser.jython.ast.NameTok)8 org.python.pydev.parser.jython.ast.exprType (org.python.pydev.parser.jython.ast.exprType)8