package org.elixir_lang.structure_view.element.structure; import com.intellij.ide.util.treeView.smartTree.TreeElement; import com.intellij.navigation.ItemPresentation; import com.intellij.psi.PsiElement; import org.elixir_lang.navigation.item_presentation.Parent; import org.elixir_lang.psi.ElixirNoParenthesesOneArgument; import org.elixir_lang.psi.QuotableKeywordList; import org.elixir_lang.psi.QuotableKeywordPair; import org.elixir_lang.psi.call.Call; import org.elixir_lang.structure_view.element.Element; import org.jetbrains.annotations.NotNull; /** * A {@code defstruct} field from a keyword pair */ public class FieldWithDefaultValue extends Element<QuotableKeywordPair> { /* * Fields */ @NotNull private final Structure structure; /* * Static Methods */ public static boolean is(QuotableKeywordPair quotableKeywordPair) { boolean fieldWithDefaultValue = false; PsiElement parent = quotableKeywordPair.getParent(); if (parent instanceof QuotableKeywordList) { PsiElement grandParent = parent.getParent(); if (grandParent instanceof ElixirNoParenthesesOneArgument) { PsiElement greatGrandParent = grandParent.getParent(); if (greatGrandParent instanceof Call) { Call greatGrandParentCall = (Call) greatGrandParent; fieldWithDefaultValue = Structure.is(greatGrandParentCall); } } } return fieldWithDefaultValue; } /* * Constructors */ public FieldWithDefaultValue(@NotNull Structure structure, @NotNull QuotableKeywordPair fieldDefaultValuePair) { super(fieldDefaultValuePair); this.structure = structure; } /* * Instance Methods */ /** * No children * * @return empty array */ @NotNull @Override public TreeElement[] getChildren() { return new TreeElement[0]; } /** * Returns the presentation of the tree element. * * @return the element presentation. */ @NotNull @Override public ItemPresentation getPresentation() { Parent parentPresentation = (Parent) structure.getPresentation(); String location = parentPresentation.getLocatedPresentableText(); PsiElement name = navigationItem.getKeywordKey(); PsiElement defaultValue = navigationItem.getKeywordValue(); return new org.elixir_lang.navigation.item_presentation.structure.Field( location, name.getText(), defaultValue.getText() ); } }