Package com.intellij.extapi.psi

Source Code of com.intellij.extapi.psi.PsiFileBase

package com.intellij.extapi.psi;

import com.intellij.lang.Language;
import com.intellij.lang.ParserDefinition;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.source.PsiFileImpl;
import com.intellij.psi.impl.source.tree.FileElement;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.tree.IFileElementType;
import org.jetbrains.annotations.NotNull;

/**
* Created by IntelliJ IDEA.
* User: max
* Date: Jan 25, 2005
* Time: 9:40:47 PM
* To change this template use File | Settings | File Templates.
*/
public abstract class PsiFileBase extends PsiFileImpl {
  private static final Logger LOG = Logger.getInstance("#com.intellij.extapi.psi.PsiFileBase");
  @NotNull private Language myLanguage;
  @NotNull private ParserDefinition myParserDefinition;

  protected PsiFileBase(FileViewProvider viewProvider, @NotNull Language language) {
    super(viewProvider);
    initLanguage(language);
  }

  /**
   * Constructor for Irida API compatibility
   */
  @Deprecated protected PsiFileBase(Project project, VirtualFile virtualFile, @NotNull Language language) {
    super((PsiManagerImpl) PsiManager.getInstance(project));
    initLanguage(language);
  }

  /**
   * Constructor for Irida API compatibility
   */
  @Deprecated protected PsiFileBase(Project project, String name, CharSequence text, @NotNull Language language) {
    super((PsiManagerImpl) PsiManager.getInstance(project));
    initLanguage(language);
  }

  private void initLanguage(final Language language) {
    myLanguage = language;
    final ParserDefinition parserDefinition = language.getParserDefinition();
    if (parserDefinition == null) {
      throw new RuntimeException("PsiFileBase: language.getParserDefinition() returned null.");
    }
    myParserDefinition = parserDefinition;
    final IFileElementType nodeType = parserDefinition.getFileNodeType();
    init(nodeType, nodeType);
  }

  @NotNull
  public final Language getLanguage() {
    return myLanguage;
  }

  public final Lexer createLexer() {
    return myParserDefinition.createLexer(getProject());
  }

  protected final FileElement createFileElement(final CharSequence docText) {
    //final ParserDefinition parserDefinition = myLanguage.getParserDefinition();
    //if (parserDefinition != null && parserDefinition.createParser(getProject()) != PsiUtil.NULL_PARSER) {
    //  return _createFileElement(docText, myLanguage, getProject(), parserDefinition);
    //}
    return super.createFileElement(docText);
  }

  //private static FileElement _createFileElement(final CharSequence docText,
  //                                              final Language language,
  //                                              Project project,
  //                                              final ParserDefinition parserDefinition) {
  //  final PsiParser parser = parserDefinition.createParser(project);
  //  final IElementType root = parserDefinition.getFileNodeType();
  //  final PsiBuilderImpl builder = new PsiBuilderImpl(language, project, null, docText);
  //  final FileElement fileRoot = (FileElement)parser.parse(root, builder);
  //  LOG.assertTrue(fileRoot.getElementType() == root,
  //                 "Parsing file text returns rootElement with type different from declared in parser definition");
  //  return fileRoot;
  //}

  public void accept(@NotNull PsiElementVisitor visitor) {
    visitor.visitFile(this);
  }

  @NotNull
  public ParserDefinition getParserDefinition() {
    return myParserDefinition;
  }
}
TOP

Related Classes of com.intellij.extapi.psi.PsiFileBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.