Package org.intellij.lang.jflex.psi.impl

Source Code of org.intellij.lang.jflex.psi.impl.JFlexPsiFileImpl

package org.intellij.lang.jflex.psi.impl;

import com.intellij.extapi.psi.PsiFileBase;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.tree.TokenSet;
import org.intellij.lang.jflex.JFlexElementTypes;
import org.intellij.lang.jflex.JFlexLanguage;
import org.intellij.lang.jflex.fileTypes.JFlexFileType;
import org.intellij.lang.jflex.psi.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
* JFlex PSI file.
*
* @author Alexey Efimov
*/
public class JFlexPsiFileImpl extends PsiFileBase implements JFlexPsiFile {

    public static final TokenSet MACROSET = TokenSet.create(JFlexElementTypes.MACRO_DEFINITION);
    public static final TokenSet STATESTATEMENTSET = TokenSet.create(JFlexElementTypes.STATE_STATEMENT);

    public JFlexPsiFileImpl(FileViewProvider viewProvider) {
        super(viewProvider, JFlexLanguage.LANGUAGE);
    }

    @Nullable
    public JFlexElement getClassname() {
        JFlexExpression classexp = null;
        ASTNode classnode = getNode().findChildByType(JFlexElementTypes.CLASS_STATEMENT);
        if (classnode != null) {
            classexp = ((JFlexClassStatement) classnode.getPsi()).getValue();
        }
        return classexp;
    }

    @Nullable
    public JFlexElement getReturnType() {
        JFlexExpression classexp = null;
        ASTNode returnnode = getNode().findChildByType(JFlexElementTypes.TYPE_STATEMENT);
        if (returnnode != null) {
            classexp = ((JFlexTypeStatement) returnnode.getPsi()).getValue();
        }
        return classexp;
    }

    public JFlexExpression[] getImplementedInterfaces() {
        JFlexExpression[] result = new JFlexExpression[0];
        ASTNode implmentsnode = getNode().findChildByType(JFlexElementTypes.IMPLEMENTS_STATEMENT);
        if (implmentsnode != null) {
            result = ((JFlexImplementsStatement) implmentsnode.getPsi()).getInterfaces();
        }
        return result;
    }

    public JFlexMacroDefinition[] getDeclaredMacroses() {
        ASTNode[] macroses = getNode().getChildren(MACROSET);
        JFlexMacroDefinition[] result = new JFlexMacroDefinition[macroses.length];
        int i = 0;
        for (ASTNode node : macroses) {
            result[i++] = (JFlexMacroDefinition) node.getPsi();
        }
        return result;
    }

    @Nullable
    public JFlexJavaCode getImports() {
        return getNode().getFirstChildNode().getElementType() == JFlexElementTypes.JAVA_CODE ? (JFlexJavaCode) getNode().getFirstChildNode().getPsi() : null;
    }

    public JFlexStateStatement[] getStateStatements() {
        ASTNode[] statestatements = getNode().getChildren(STATESTATEMENTSET);
        JFlexStateStatement[] result = new JFlexStateStatement[statestatements.length];
        int i = 0;
        for (ASTNode node : statestatements) {
            result[i++] = (JFlexStateStatement) node.getPsi();
        }
        return result;
    }

    @NotNull
    public FileType getFileType() {
        return JFlexFileType.FILE_TYPE;
    }

    public String toString() {
        return "JFlex: " + getName();
    }
}
TOP

Related Classes of org.intellij.lang.jflex.psi.impl.JFlexPsiFileImpl

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.