⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modulesmanagercache.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
字号:
package org.python.pydev.editor.codecompletion.revisited;

import org.python.pydev.core.ModulesKey;
import org.python.pydev.core.Tuple;
import org.python.pydev.core.cache.LRUCache;
import org.python.pydev.editor.codecompletion.revisited.modules.AbstractModule;

/**
 * This is a 'global' cache implementation, that can have at most n objects in
 * the memory at any time.
 */
final class ModulesManagerCache  {
    /**
     * Defines the maximun amount of modules that can be in the memory at any time (for all the managers)
     */
    private static final int MAX_NUMBER_OF_MODULES = 400;

    /**
     * The access to the cache is synchronized
     */
	LRUCache<Tuple<ModulesKey, ModulesManager>, AbstractModule> internalCache;

    ModulesManagerCache() {
        internalCache = new LRUCache<Tuple<ModulesKey, ModulesManager>, AbstractModule>(MAX_NUMBER_OF_MODULES);
	}
    
	/**
	 * Overriden so that if we do not find the key, we have the chance to create it.
	 */
	public AbstractModule getObj(ModulesKey key, ModulesManager modulesManager) {
        synchronized (modulesManager.modulesKeys) {
			Tuple<ModulesKey, ModulesManager> keyTuple = new Tuple<ModulesKey, ModulesManager>(key, modulesManager);
            
            AbstractModule obj = internalCache.getObj(keyTuple);
			if(obj == null && modulesManager.modulesKeys.containsKey(key)){
				key = modulesManager.modulesKeys.get(key); //get the 'real' key
				obj = AbstractModule.createEmptyModule(key.name, key.file);
                internalCache.add(keyTuple, obj);
			}
			return obj;
        }
	}

    public void remove(ModulesKey key, ModulesManager modulesManager) {
        synchronized (modulesManager.modulesKeys) {
            Tuple<ModulesKey, ModulesManager> keyTuple = new Tuple<ModulesKey, ModulesManager>(key, modulesManager);
            internalCache.remove(keyTuple);
        }
    }

    public void add(ModulesKey key, AbstractModule n, ModulesManager modulesManager) {
        synchronized (modulesManager.modulesKeys) {
            Tuple<ModulesKey, ModulesManager> keyTuple = new Tuple<ModulesKey, ModulesManager>(key, modulesManager);
            internalCache.add(keyTuple, n);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -