package org.python.pydev.builder; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.python.pydev.core.IPythonNature; import org.python.pydev.shared_core.string.StringUtils; import org.python.pydev.shared_core.structure.Tuple3; @SuppressWarnings({ "unchecked", "rawtypes" }) public class VisitorMemo extends HashMap<String, Object> { public VisitorMemo() { super(); } public VisitorMemo(VisitorMemo memo) { super(memo); this.setSharedProjectState(memo.getSharedProjectState()); } private static final long serialVersionUID = 9146498000310919785L; private List<String> onlyProjectPythonPathStrExternal; private List<String> onlyProjectPythonPathStrNonExternal; private IPythonNature fCacheNature; public List<String> getOnlyProjectPythonPathStr(IPythonNature nature, boolean addExternal) throws CoreException { if (fCacheNature != null) { if (nature != fCacheNature) { onlyProjectPythonPathStrExternal = null; onlyProjectPythonPathStrNonExternal = null; fCacheNature = nature; } } else { fCacheNature = nature; } List<String> lst; if (addExternal) { lst = onlyProjectPythonPathStrExternal; } else { lst = onlyProjectPythonPathStrNonExternal; } if (lst == null) { String onlyProjectPythonPathStr = nature.getPythonPathNature().getOnlyProjectPythonPathStr(addExternal); HashSet<String> projectSourcePath = new HashSet<String>(StringUtils.splitAndRemoveEmptyTrimmed( onlyProjectPythonPathStr, '|')); lst = new ArrayList<String>(projectSourcePath); if (addExternal) { onlyProjectPythonPathStrExternal = lst; } else { onlyProjectPythonPathStrNonExternal = lst; } } return lst; } public Object getSharedProjectState() { return new Tuple3(fCacheNature, onlyProjectPythonPathStrExternal, onlyProjectPythonPathStrNonExternal); } public void setSharedProjectState(Object memoSharedProjectState) { if (memoSharedProjectState != null) { Tuple3 t = (Tuple3) memoSharedProjectState; fCacheNature = (IPythonNature) t.o1; onlyProjectPythonPathStrExternal = (List<String>) t.o2; onlyProjectPythonPathStrNonExternal = (List<String>) t.o3; } } }