XmlElementDescriptor (final XmlTag childTag, XmlTag contextTag) { final ConcurrentMap<RngElementDescriptor, CachedValue<XmlElementDescriptor>> descriptorMap = CachedValuesManager.getCachedValue( childTag, () -> CachedValueProvider.Result.create(ContainerUtil.createConcurrentWeakMap(), ModificationTracker.NEVER_CHANGED)); final XmlElementDescriptor value = descriptorMap.computeIfAbsent(this, descr -> { return CachedValuesManager.getManager(childTag.getProject()).createCachedValue(() -> { final XmlElementDescriptor descriptor = descr.findElementDescriptor(childTag); return CachedValueProvider.Result.create(descriptor, descr.getDependencies(), childTag); }); }).getValue(); return value == NULL ? null : value; }