Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
import consulo.language.psi.resolve.ResolveState;
import consulo.language.psi.util.PsiTreeUtil;
import consulo.language.util.IncorrectOperationException;
import consulo.util.dataholder.Key;
import consulo.virtualFileSystem.VirtualFile;
import consulo.xml.psi.XmlRecursiveElementVisitor;
import consulo.xml.psi.xml.*;
Expand Down Expand Up @@ -193,7 +192,7 @@ protected boolean processMembers(
PsiElement lastParent,
PsiElement place
) {
for (JSFile file : CACHED_SCRIPTS.get(CACHED_SCRIPTS_KEY, getParent(), null).getValue()) {
for (JSFile file : CACHED_SCRIPTS.get(getParent(), null).getValue()) {
if (!file.processDeclarations(processor, ResolveState.initial(), null, place)) {
return false;
}
Expand Down Expand Up @@ -241,7 +240,7 @@ public boolean doImportFromScripts(PsiScopeProcessor processor, PsiElement place
boolean adequatePlace = false;

XmlTag parent = getParent();
JSFile[] files = CACHED_SCRIPTS.get(CACHED_SCRIPTS_KEY, parent, null).getValue();
JSFile[] files = CACHED_SCRIPTS.get(parent, null).getValue();
for (JSFile file : files) {
if (JSImportHandlingUtil.isAdequatePlaceForImport(file, place)) {
if (useImports && JSImportHandlingUtil.importClass(processor, file)) {
Expand All @@ -263,8 +262,7 @@ public boolean doImportFromScripts(PsiScopeProcessor processor, PsiElement place
@RequiredReadAction
public boolean processComponentNames(ResolveProcessor processor) {
String s = processor.getName();
Map<String, String> value =
CACHED_COMPONENT_IMPORTS_CACHE.get(CACHED_SHORT_COMPONENTS_REF_KEY, (XmlFile)getContainingFile(), null).getValue();
Map<String, String> value = CACHED_COMPONENT_IMPORTS_CACHE.get((XmlFile)getContainingFile(), null).getValue();

if (s != null) {
String qName = value.get(s);
Expand All @@ -286,12 +284,10 @@ public boolean processComponentNames(ResolveProcessor processor) {
return true;
}

private static final Key<CachedValue<JSFile[]>> CACHED_SCRIPTS_KEY = Key.create("cached.scripts");
private static final Key<CachedValue<Map<String, String>>> CACHED_SHORT_COMPONENTS_REF_KEY = Key.create("cached.component.refs");

private static final String SCRIPT_TAG_NAME = "Script";

private static final UserDataCache<CachedValue<JSFile[]>, XmlTag, Object> CACHED_SCRIPTS = new UserDataCache<>() {
private static final UserDataCache<CachedValue<JSFile[]>, XmlTag, Object> CACHED_SCRIPTS =
new UserDataCache<CachedValue<JSFile[]>, XmlTag, Object>("cached.scripts") {
@Override
protected CachedValue<JSFile[]> compute(XmlTag tag, Object p) {
return CachedValuesManager.getManager(tag.getProject()).createCachedValue(
Expand Down Expand Up @@ -320,7 +316,7 @@ protected CachedValue<JSFile[]> compute(XmlTag tag, Object p) {
};

private static final UserDataCache<CachedValue<Map<String, String>>, XmlFile, Object> CACHED_COMPONENT_IMPORTS_CACHE =
new UserDataCache<>() {
new UserDataCache<CachedValue<Map<String, String>>, XmlFile, Object>("cached.component.refs") {
@Override
protected CachedValue<Map<String, String>> compute(final XmlFile file, Object p) {
return CachedValuesManager.getManager(file.getProject()).createCachedValue(
Expand Down Expand Up @@ -371,8 +367,6 @@ public boolean isValid() {
return getNode().getPsi().isValid();
}

private static Key<ParameterizedCachedValue<XmlBackedJSClassImpl, XmlTag>> ourArtificialPsiKey = Key.create("xml.backed.class");

@Nullable
public static JSClass getXmlBackedClass(XmlFile xmlFile) {
XmlTag rootTag = getRootTag(xmlFile);
Expand All @@ -386,7 +380,7 @@ private static XmlTag getRootTag(XmlFile xmlFile) {
}

public static XmlBackedJSClassImpl getXmlBackedClass(XmlTag tag) {
return myCachedClassCache.get(ourArtificialPsiKey, tag, null).getValue(tag);
return CACHED_CLASS_CACHE.get(tag, null).getValue(tag);
}

public static Collection<JSClass> getClasses(XmlFile file) {
Expand Down Expand Up @@ -415,8 +409,8 @@ public static XmlBackedJSClassImpl getContainingComponent(XmlElement element) {
return getXmlBackedClass((XmlTag)element);
}

private static final UserDataCache<ParameterizedCachedValue<XmlBackedJSClassImpl, XmlTag>, XmlTag, Object> myCachedClassCache =
new UserDataCache<>() {
private static final UserDataCache<ParameterizedCachedValue<XmlBackedJSClassImpl, XmlTag>, XmlTag, Object> CACHED_CLASS_CACHE =
new UserDataCache<ParameterizedCachedValue<XmlBackedJSClassImpl, XmlTag>, XmlTag, Object>("xml.backed.class") {
@Override
protected ParameterizedCachedValue<XmlBackedJSClassImpl, XmlTag> compute(XmlTag tag, Object p) {
return CachedValuesManager.getManager(tag.getProject()).createParameterizedCachedValue(
Expand Down Expand Up @@ -518,7 +512,7 @@ public PsiElement addBefore(PsiElement element, PsiElement anchor) throws Incorr
@Nullable
@RequiredReadAction
public JSFile findFirstScriptTag() {
JSFile[] value = CACHED_SCRIPTS.get(CACHED_SCRIPTS_KEY, getParent(), null).getValue();
JSFile[] value = CACHED_SCRIPTS.get(getParent(), null).getValue();
if (value.length > 0) {
return value[0];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,10 @@
* @author Maxim.Mossienko
*/
public abstract class JSClassBase extends JSStubElementImpl<JSClassStub> implements JSClass {
private static final Key<ParameterizedCachedValue<List<JSClass>, Object>> IMPLEMENTS_LIST_CACHE_KEY = Key.create("implements.list.cache");
private static final Key<ParameterizedCachedValue<List<JSClass>, Object>> EXTENDS_LIST_CACHE_KEY = Key.create("implements.list.cache");
private static final UserDataCache<ParameterizedCachedValue<List<JSClass>, Object>, JSClassBase, Object> IMPLEMENTS_LIST_CACHE =
new ClassesUserDataCache();
new ClassesUserDataCache("implements.list.cache");
private static final UserDataCache<ParameterizedCachedValue<List<JSClass>, Object>, JSClassBase, Object> EXTENDS_LIST_CACHE =
new ExtendsClassesUserDataCache();
new ExtendsClassesUserDataCache("extends.list.cache");

private volatile Map<String, Object> myName2FunctionMap;
private volatile Map<String, JSVariable> myName2FieldsMap;
Expand Down Expand Up @@ -281,10 +279,10 @@ private List<JSClass> getClassesFromReferenceList(@Nullable JSReferenceList exte
PsiElement element = extendsList != null ? extendsList : this;

if (type == JSElementTypes.EXTENDS_LIST) {
return EXTENDS_LIST_CACHE.get(EXTENDS_LIST_CACHE_KEY, this, extendsList).getValue(element);
return EXTENDS_LIST_CACHE.get(this, extendsList).getValue(element);
}
else {
return IMPLEMENTS_LIST_CACHE.get(IMPLEMENTS_LIST_CACHE_KEY, this, extendsList).getValue(element);
return IMPLEMENTS_LIST_CACHE.get(this, extendsList).getValue(element);
}
}

Expand Down Expand Up @@ -366,6 +364,10 @@ public JSClass[] getImplementedInterfaces() {
}

private static class ExtendsClassesUserDataCache extends ClassesUserDataCache {
private ExtendsClassesUserDataCache(String keyName) {
super(keyName);
}

@Override
@RequiredReadAction
protected List<JSClass> doCompute(Object extendsList) {
Expand All @@ -385,6 +387,10 @@ protected List<JSClass> doCompute(Object extendsList) {
}

private static class ClassesUserDataCache extends UserDataCache<ParameterizedCachedValue<List<JSClass>, Object>, JSClassBase, Object> {
private ClassesUserDataCache(String keyName) {
super(keyName);
}

@Override
protected ParameterizedCachedValue<List<JSClass>, Object> compute(JSClassBase jsClassBase, Object p) {
return CachedValuesManager.getManager(jsClassBase.getProject()).createParameterizedCachedValue(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,9 @@
* @since 2008-07-29
*/
public class JSImportHandlingUtil {
public static final Key<CachedValue<Map<String, Object>>> IMPORT_LIST_CACHE_KEY = Key.create("js.import.list.cache");
public static final UserDataCache<CachedValue<Map<String, Object>>, PsiElement, Object> IMPORT_LIST_CACHE = new ImportListDataCache();
public static final Key<CachedValue<Map<String, JSImportedElementResolveResult>>> IMPORT_RESOLVE_CACHE_KEY =
Key.create("js.import.resolve");
public static final UserDataCache<CachedValue<Map<String, JSImportedElementResolveResult>>, PsiElement, Object>
IMPORT_RESOLVE_CACHE =
new UserDataCache<>() {
public static final UserDataCache<CachedValue<Map<String, Object>>, PsiElement, Object> IMPORT_LIST_CACHE = new ImportListDataCache("js.import.list.cache");
public static final UserDataCache<CachedValue<Map<String, JSImportedElementResolveResult>>, PsiElement, Object> IMPORT_RESOLVE_CACHE =
new UserDataCache<CachedValue<Map<String, JSImportedElementResolveResult>>, PsiElement, Object>("js.import.resolve") {
@Override
protected CachedValue<Map<String, JSImportedElementResolveResult>> compute(PsiElement psiElement, Object p) {
return CachedValuesManager.getManager(psiElement.getProject()).createCachedValue(
Expand Down Expand Up @@ -237,7 +233,7 @@ JSImportedElementResolveResult resolveTypeNameUsingImports(String referencedName
}
}

Map<String, JSImportedElementResolveResult> map = IMPORT_RESOLVE_CACHE.get(IMPORT_RESOLVE_CACHE_KEY, parent, null).getValue();
Map<String, JSImportedElementResolveResult> map = IMPORT_RESOLVE_CACHE.get(parent, null).getValue();
JSImportedElementResolveResult result = map.get(referencedName);

if (result == null) {
Expand All @@ -252,7 +248,7 @@ private static JSImportedElementResolveResult resolveTypeNameUsingImportsInner(
String referencedName,
PsiNamedElement parent
) {
Map<String, Object> value = IMPORT_LIST_CACHE.get(IMPORT_LIST_CACHE_KEY, parent, null).getValue();
Map<String, Object> value = IMPORT_LIST_CACHE.get(parent, null).getValue();
JSImportedElementResolveResult expression = FlexImportSupport.tryFindInMap(referencedName, parent, value);
if (expression != null) {
return expression;
Expand Down Expand Up @@ -358,7 +354,7 @@ public static boolean importClass(PsiScopeProcessor processor, PsiNamedElement p

if (s != null) {
if (resolveProcessor.specificallyAskingToResolveQualifiedNames()) {
Map<String, Object> value = IMPORT_LIST_CACHE.get(IMPORT_LIST_CACHE_KEY, parent, null).getValue();
Map<String, Object> value = IMPORT_LIST_CACHE.get(parent, null).getValue();
JSImportedElementResolveResult resolveResult =
FlexImportSupport.tryFindInMap(s, parent, value, resolveProcessor.getQualifiedNameToImport());
if (dispatchResult(resolveResult, processor)) {
Expand Down Expand Up @@ -441,6 +437,10 @@ else if (!(place instanceof JSFile)) {
}

private static class ImportListDataCache extends UserDataCache<CachedValue<Map<String, Object>>, PsiElement, Object> {
private ImportListDataCache(String keyName) {
super(keyName);
}

@Override
protected final CachedValue<Map<String, Object>> compute(PsiElement owner, Object o) {
return CachedValuesManager.getManager(owner.getProject()).createCachedValue(
Expand Down Expand Up @@ -474,8 +474,7 @@ else if (owner instanceof JSFile || owner instanceof JSStubElementImpl) {
}

for (PsiElement c : children) {
if (c instanceof JSImportStatement) {
JSImportStatement s = ((JSImportStatement)c);
if (c instanceof JSImportStatement s) {

if (s.getImportText() != null) {
FlexImportSupport.appendToMap(result, s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,8 @@
* @author max, maxim.mossienko
*/
public class JSResolveUtil {
private static final Key<CachedValue<IntObjectMap<Object>>> CACHED_STATEMENTS = Key.create("JS.RelevantStatements");
private static final UserDataCache<CachedValue<IntObjectMap<Object>>, JSElement, Object> CACHED_DEFS_CACHE =
new RelevantDefsUserDataCache();
new RelevantDefsUserDataCache("JS.RelevantStatements");
public static final String PROTOTYPE_FIELD_NAME = "prototype";

private static final String ARRAY_TYPE_NAME = "Array";
Expand Down Expand Up @@ -679,10 +678,8 @@ static boolean walkOverStructure(PsiElement context, Processor<PsiNamedElement>
return true;
}

private static final Key<ParameterizedCachedValue<Set<String>, JSElement>> ourCachedOpenedNsesKey = Key.create("opened.nses");

private static final UserDataCache<ParameterizedCachedValue<Set<String>, JSElement>, JSElement, Object> ourCachedOpenedNsesCache =
new UserDataCache<>() {
private static final UserDataCache<ParameterizedCachedValue<Set<String>, JSElement>, JSElement, Object> CACHED_OPENED_NSES_CACHE =
new UserDataCache<ParameterizedCachedValue<Set<String>, JSElement>, JSElement, Object>("opened.nses") {
@Override
protected ParameterizedCachedValue<Set<String>, JSElement> compute(JSElement jsElement, Object p) {
return CachedValuesManager.getManager(jsElement.getProject()).createParameterizedCachedValue(
Expand Down Expand Up @@ -737,7 +734,7 @@ public static Set<String> calculateOpenNses(PsiElement place) {
place,
psiNamedElement -> {
if (psiNamedElement instanceof JSElement element) {
result.set(ourCachedOpenedNsesCache.get(ourCachedOpenedNsesKey, element, null).getValue(element));
result.set(CACHED_OPENED_NSES_CACHE.get(element, null).getValue(element));
}
return false;
}
Expand Down Expand Up @@ -944,7 +941,7 @@ else if (elt instanceof JSFile jsFile) {

while (tag != null) {
if (XmlBackedJSClassImpl.isInlineComponentTag(tag)) {
for (JSVariable var : ourCachedPredefinedVars.get(ourCachedPredefinedVarsKey, (XmlFile)containingFile, null)
for (JSVariable var : CACHED_PREDEFINED_VARS.get((XmlFile)containingFile, null)
.getValue()) {
if (!processor.execute(var, ResolveState.initial())) {
return;
Expand Down Expand Up @@ -974,8 +971,8 @@ else if (elt instanceof JSFile jsFile) {
treeWalkUp(processor, parentElement, elt, place, terminatingParent, currentScope);
}

private static UserDataCache<CachedValue<List<JSVariable>>, XmlFile, Object> ourCachedPredefinedVars =
new UserDataCache<>() {
private static final UserDataCache<CachedValue<List<JSVariable>>, XmlFile, Object> CACHED_PREDEFINED_VARS =
new UserDataCache<CachedValue<List<JSVariable>>, XmlFile, Object>("ourCachedPredefinedVarsKey") {
@Override
@RequiredReadAction
protected CachedValue<List<JSVariable>> compute(final XmlFile xmlFile, Object p) {
Expand All @@ -992,8 +989,6 @@ protected CachedValue<List<JSVariable>> compute(final XmlFile xmlFile, Object p)
}
};

private static Key<CachedValue<List<JSVariable>>> ourCachedPredefinedVarsKey = Key.create("ourCachedPredefinedVarsKey");

public static boolean processXmlFile(PsiScopeProcessor processor, XmlFile xmlFile, PsiElement place) {
JSClass clazz = XmlBackedJSClassImpl.getXmlBackedClass(xmlFile);
return clazz.processDeclarations(processor, ResolveState.initial(), clazz, place);
Expand Down Expand Up @@ -1809,7 +1804,7 @@ public static boolean processDeclarationsInScope(
}

boolean result = true;
IntObjectMap<Object> defsMap = CACHED_DEFS_CACHE.get(CACHED_STATEMENTS, scope, null).getValue();
IntObjectMap<Object> defsMap = CACHED_DEFS_CACHE.get(scope, null).getValue();

if (requiredName == null) {
for (Object value : defsMap.values()) {
Expand Down Expand Up @@ -1907,6 +1902,9 @@ public JavaScriptImportStatementBase getImportUsed() {
public static Key<PsiElement> contextKey = Key.create("context.key"); // JSElement or XmlElement

public static class RelevantDefsUserDataCache extends UserDataCache<CachedValue<IntObjectMap<Object>>, JSElement, Object> {
public RelevantDefsUserDataCache(String keyName) {
super(keyName);
}

@Override
protected CachedValue<IntObjectMap<Object>> compute(final JSElement jsElement, final Object o) {
Expand Down
Loading