package org.jetbrains.plugins.clojure.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.clojure.psi.ClojurePsiElement; import org.jetbrains.plugins.clojure.psi.ClojurePsiElementImpl; import org.jetbrains.plugins.clojure.psi.api.ClKeyword; import org.jetbrains.plugins.clojure.psi.api.ClMap; import org.jetbrains.plugins.clojure.psi.api.ClMetadata; import java.util.Collections; import java.util.List; /** * @author ilyas */ public class ClMetadataImpl extends ClojurePsiElementImpl implements ClMetadata { public ClMetadataImpl(ASTNode node) { super(node); } @Override public String toString() { return "ClMetadata"; } @NotNull public List<ClKeyword> getKeys() { ClMap map = getUnderlyingMap(); if (map == null) return Collections.emptyList(); return ContainerUtil.map(map.getEntries(), new Function<ClMapEntry, ClKeyword>() { public ClKeyword fun(ClMapEntry clMapEntry) { return clMapEntry.getKeywordKey(); } }); } private ClMap getUnderlyingMap() { final ClMap map = findChildByClass(ClMap.class); if (map == null) return null; return map; } public ClojurePsiElement getValue(String key) { final ClMap map = getUnderlyingMap(); if (map == null) return null; return map.getValue(key); } }