package org.elixir_lang.beam; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import org.elixir_lang.beam.psi.BeamFileImpl; import org.elixir_lang.psi.ElixirFile; import org.elixir_lang.structure_view.Factory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author max */ public class StructureViewBuilderProvider implements com.intellij.ide.structureView.StructureViewBuilderProvider { /** * Returns the structure view builder for the specified file. * * @param fileType file type of the file to provide structure for * @param virtualFile The file for which the structure view builder is requested. * @param project The project to which the file belongs. * @return The structure view builder, or null if no structure view is available for the file. */ @Nullable @Override public StructureViewBuilder getStructureViewBuilder(@NotNull FileType fileType, @NotNull VirtualFile virtualFile, @NotNull Project project) { PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile); StructureViewBuilder structureViewBuilder = null; if (psiFile instanceof BeamFileImpl) { BeamFileImpl beamFileImpl = (BeamFileImpl) psiFile; PsiElement mirror = beamFileImpl.getMirror(); if (mirror instanceof ElixirFile) { structureViewBuilder = Factory.structureViewBuilder((ElixirFile) mirror); } } return structureViewBuilder; } }