YAMLKeyValue (@NotNull List<String> keyComponents, int preferableOffset) { if (keyComponents.isEmpty()) { return null; } String head = keyComponents.iterator().next(); List<String> tail = ContainerUtil.subList(keyComponents, 1); YAMLKeyValue keyValue = getKeyValueByKey(head); if (keyValue == null) { int indent = YAMLUtil.getIndentToThisElement(this); String text = YAMLElementGenerator.createChainedKey(keyComponents, indent); final YAMLElementGenerator generator = YAMLElementGenerator.getInstance(getProject()); Collection<YAMLKeyValue> values = PsiTreeUtil.collectElementsOfType(generator.createDummyYamlWithText(text), YAMLKeyValue.class); if (values.isEmpty()) { Logger.getInstance(YAMLBlockMappingImpl.class).error( "No one key-value created: input sequence = " + keyComponents + " generated text = '" + text + "'" ); return null; } YAMLKeyValue newKeyValue = values.iterator().next(); insertKeyValueAtOffset(newKeyValue, preferableOffset); keyValue = getKeyValueByKey(head); assert keyValue != null; } if (keyComponents.size() == 1) { return keyValue; } else if (keyValue.getValue() instanceof YAMLBlockMappingImpl) { // TODO: support JSON-like mappings (create minor issue) return ((YAMLBlockMappingImpl)keyValue.getValue()).getOrCreateKeySequence(tail, preferableOffset); } else { return null; } }