package com.intellij.javascript.flex.mxml;
import com.intellij.lang.javascript.psi.JSField;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.UserDataCache;
import com.intellij.psi.PsiFile;
import com.intellij.psi.ResolveState;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.util.CachedValue;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.xml.XmlFile;
import com.intellij.util.SmartList;
import java.util.List;
public class MxmlResolveUtil {
public static boolean processImplicitFields(PsiScopeProcessor processor, PsiFile containingFile,
ImplicitFieldProvider cachedPredefinedVars,
Key<CachedValue<List<JSField>>> cachedPredefinedVarsKey) {
for(JSField var: cachedPredefinedVars.get(cachedPredefinedVarsKey, (XmlFile)containingFile, null).getValue()) {
if(!processor.execute(var, ResolveState.initial())) return false;
}
return true;
}
public abstract static class ImplicitFieldProvider extends UserDataCache<CachedValue<List<JSField>>, XmlFile, Object> {
@Override
protected CachedValue<List<JSField>> compute(final XmlFile xmlFile, Object p) {
return CachedValuesManager.getManager(xmlFile.getProject()).createCachedValue(() -> {
SmartList<JSField> vars = new SmartList<>();
doComputeVars(vars, xmlFile);
return new CachedValueProvider.Result<List<JSField>>(vars, xmlFile);
}, false);
}
protected abstract void doComputeVars(List<JSField> vars, XmlFile xmlFile);
}
}