public static boolean hasTest(PsiModifierListOwner element) { return CachedValuesManager.getCachedValue( element, () -> CachedValueProvider.Result.create( hasTest(element, true), PsiModificationTracker.MODIFICATION_COUNT)); }
public CachedValueProvider.Result<VirtualFile[]> compute(PsiFile psiFile) { VirtualFile[] value = computeFiles(psiFile, myRuntimeOnly); // todo: we need "url modification tracker" for VirtualFile Object[] deps = new Object[value.length + 2]; deps[deps.length - 2] = psiFile; deps[deps.length - 1] = VirtualFileManager.getInstance(); return CachedValueProvider.Result.create(value, deps); }
@NotNull @Override public List<PyAssignmentStatement> findAttributes() { /** * TODO: This method if insanely heavy since it unstubs foreign files. Need to save stubs and * use them somehow. */ return CachedValuesManager.getManager(getProject()) .getCachedValue( this, ATTRIBUTES_KEY, () -> { final List<PyAssignmentStatement> result = findAttributesStatic(this); return CachedValueProvider.Result.create( result, PsiModificationTracker.MODIFICATION_COUNT); }, false); }
@Override public CachedValueProvider.Result<PsiExpression> compute( Pair<Project, PsiExpression> pair) { PsiExpression param = pair.second; Project project = pair.first; PsiExpression topLevel = getTopLevel(project, param); ParameterizedCachedValue<PsiExpression, Pair<Project, PsiExpression>> cachedValue = param.getUserData(TOP_LEVEL_EXPRESSION); assert cachedValue != null; int i = 0; for (PsiElement element = param; element != topLevel; element = element.getParent(), i++) { if (i % 10 == 0) { // optimization: store up link to the top level expression in each 10nth // element element.putUserData(TOP_LEVEL_EXPRESSION, cachedValue); } } return CachedValueProvider.Result.create( topLevel, PsiManager.getInstance(project).getModificationTracker()); }