001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lang.parsing;
018
019 import com.intellij.extapi.psi.ASTWrapperPsiElement;
020 import com.intellij.lang.ASTNode;
021 import com.intellij.lang.LanguageParserDefinitions;
022 import com.intellij.lang.ParserDefinition;
023 import com.intellij.lang.PsiParser;
024 import com.intellij.lexer.Lexer;
025 import com.intellij.openapi.project.Project;
026 import com.intellij.psi.FileViewProvider;
027 import com.intellij.psi.PsiElement;
028 import com.intellij.psi.PsiFile;
029 import com.intellij.psi.tree.IElementType;
030 import com.intellij.psi.tree.IFileElementType;
031 import com.intellij.psi.tree.TokenSet;
032 import org.jetbrains.annotations.NotNull;
033 import org.jetbrains.jet.JetNodeType;
034 import org.jetbrains.jet.JetNodeTypes;
035 import org.jetbrains.jet.lang.psi.JetFile;
036 import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementType;
037 import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
038 import org.jetbrains.jet.lexer.JetLexer;
039 import org.jetbrains.jet.lexer.JetTokens;
040 import org.jetbrains.jet.plugin.JetLanguage;
041
042 public class JetParserDefinition implements ParserDefinition {
043 public static final String KTSCRIPT_FILE_SUFFIX = "ktscript";
044
045 public JetParserDefinition() {
046 //todo: ApplicationManager.getApplication() is null during JetParsingTest setting up
047
048 /*if (!ApplicationManager.getApplication().isCommandLine()) {
049 }*/
050 }
051
052 @NotNull
053 public static JetParserDefinition getInstance() {
054 return (JetParserDefinition)LanguageParserDefinitions.INSTANCE.forLanguage(JetLanguage.INSTANCE);
055 }
056
057 @Override
058 @NotNull
059 public Lexer createLexer(Project project) {
060 return new JetLexer();
061 }
062
063 @Override
064 public PsiParser createParser(Project project) {
065 return new JetParser(project);
066 }
067
068 @Override
069 public IFileElementType getFileNodeType() {
070 return JetStubElementTypes.FILE;
071 }
072
073 @Override
074 @NotNull
075 public TokenSet getWhitespaceTokens() {
076 return JetTokens.WHITESPACES;
077 }
078
079 @Override
080 @NotNull
081 public TokenSet getCommentTokens() {
082 return JetTokens.COMMENTS;
083 }
084
085 @Override
086 @NotNull
087 public TokenSet getStringLiteralElements() {
088 return JetTokens.STRINGS;
089 }
090
091 @Override
092 @NotNull
093 public PsiElement createElement(ASTNode astNode) {
094 IElementType elementType = astNode.getElementType();
095
096 if (elementType instanceof JetStubElementType) {
097 return ((JetStubElementType) elementType).createPsiFromAst(astNode);
098 }
099 else if (elementType == JetNodeTypes.TYPE_CODE_FRAGMENT || elementType == JetNodeTypes.EXPRESSION_CODE_FRAGMENT) {
100 return new ASTWrapperPsiElement(astNode);
101 }
102 else {
103 return ((JetNodeType) elementType).createPsi(astNode);
104 }
105 }
106
107 @Override
108 public PsiFile createFile(FileViewProvider fileViewProvider) {
109 return new JetFile(fileViewProvider);
110 }
111
112 @Override
113 public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode astNode, ASTNode astNode1) {
114 return SpaceRequirements.MAY;
115 }
116 }