private Optional<YAMLKeyValue> getAsYamlKeyValue(final PsiElement psiElement) { return Optional.ofNullable(psiElement) .map(PsiElement::getParent) .filter(el -> el instanceof YAMLKeyValue) .map(YAMLKeyValue.class::cast) .filter(value -> value.getKey() == psiElement); }
private void registerYmlRoutePatternProblem(@NotNull ProblemsHolder holder, @NotNull YAMLKeyValue element) { String s = PsiElementUtils.trimQuote(element.getKeyText()); if(("factory_class".equals(s) || "factory_method".equals(s) || "factory_service".equals(s)) && YamlElementPatternHelper.getInsideServiceKeyPattern().accepts(element)) { // services: // foo: // factory_*: registerProblem(holder, element.getKey()); } }
private void registerYmlRoutePatternProblem(@NotNull ProblemsHolder holder, @NotNull YAMLKeyValue element) { String s = PsiElementUtils.trimQuote(element.getKeyText()); if("pattern".equals(s) && YamlHelper.isRoutingFile(element.getContainingFile())) { // pattern: foo holder.registerProblem(element.getKey(), "Pattern is deprecated; use path instead", ProblemHighlightType.LIKE_DEPRECATED); } else if(("_method".equals(s) || "_scheme".equals(s)) && YamlHelper.isRoutingFile(element.getContainingFile())) { // requirements: { _method: 'foo', '_scheme': 'foo' } YAMLKeyValue parentOfType = PsiTreeUtil.getParentOfType(element, YAMLKeyValue.class); if(parentOfType != null && "requirements".equals(parentOfType.getKeyText())) { holder.registerProblem(element.getKey(), String.format("The '%s' requirement is deprecated", s), ProblemHighlightType.LIKE_DEPRECATED); } } }
@Nullable public static String getYamlKeyName(@NotNull YAMLKeyValue yamlKeyValue) { PsiElement modelName = yamlKeyValue.getKey(); if(modelName == null) { return null; } String keyName = StringUtils.trim(modelName.getText()); if(keyName.endsWith(":")) { keyName = StringUtils.trim((keyName.substring(0, keyName.length() - 1))); } return keyName; }
/** * Migrate to processKeysAfterRoot @TODO * * @param keyContext Should be Document or YAMLCompoundValueImpl which holds the key value children */ public static void attachDuplicateKeyInspection(PsiElement keyContext, @NotNull ProblemsHolder holder) { Map<String, PsiElement> psiElementMap = new HashMap<>(); Set<PsiElement> yamlKeyValues = new HashSet<>(); Collection<YAMLKeyValue> collection = PsiTreeUtil.getChildrenOfTypeAsList(keyContext, YAMLKeyValue.class); for(YAMLKeyValue yamlKeyValue: collection) { String keyText = PsiElementUtils.trimQuote(yamlKeyValue.getKeyText()); if(StringUtils.isNotBlank(keyText)) { if(psiElementMap.containsKey(keyText)) { yamlKeyValues.add(psiElementMap.get(keyText)); yamlKeyValues.add(yamlKeyValue); } else { psiElementMap.put(keyText, yamlKeyValue); } } } if(yamlKeyValues.size() > 0) { for(PsiElement psiElement: yamlKeyValues) { if(psiElement instanceof YAMLKeyValue) { final PsiElement keyElement = ((YAMLKeyValue) psiElement).getKey(); assert keyElement != null; holder.registerProblem(keyElement, "Duplicate key", ProblemHighlightType.GENERIC_ERROR_OR_WARNING); } } } }
@Override public PsiElement extractObjectForValidation(final PsiElement psiElement) { final Optional<PsiElement> thirdParent = Optional.ofNullable(psiElement.getParent()) .map(PsiElement::getParent) .map(PsiElement::getParent); if (thirdParent.isPresent() && thirdParent.get() instanceof YAMLSequenceItem) { return ((YAMLSequenceItem) thirdParent.get()).getValue(); } else if (thirdParent.isPresent() && thirdParent.get() instanceof YAMLKeyValue) { return ((YAMLKeyValue) thirdParent.get()).getKey(); } else { return psiElement.getParent(); } }
PsiElement key = ((YAMLKeyValue) element).getKey(); if(key != null) { PsiElement nextSiblingOfType = PsiElementUtils.getNextSiblingOfType(key, PlatformPatterns.psiElement(YAMLTokenTypes.TAG));
setTooltipText("Navigate to file"); PsiElement key = ((YAMLKeyValue) yamlKeyValueTarget).getKey(); if(key != null) { lineMarkerInfos.add(builder.createLineMarkerInfo(key));