package com.jetbrains.lang.dart.ide.template.macro; import com.google.common.annotations.VisibleForTesting; import com.intellij.codeInsight.template.Expression; import com.intellij.codeInsight.template.ExpressionContext; import com.intellij.codeInsight.template.Result; import com.intellij.codeInsight.template.TextResult; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.lang.dart.psi.DartClass; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class DartClassNameMacro extends DartMacroBase { @Override public String getName() { return "dartClassName"; } @Override public Result calculateResult(@NotNull Expression[] params, final ExpressionContext context) { final String containingClassName = getContainingClassName(context.getPsiElementAtStartOffset()); return containingClassName == null ? null : new TextResult(containingClassName); } @VisibleForTesting @Nullable public String getContainingClassName(@Nullable final PsiElement element) { if (element == null) return null; final DartClass dartClass = PsiTreeUtil.getParentOfType(element, DartClass.class); return dartClass == null ? null : dartClass.getName(); } }