|
JavascriptParserDefinition.java
|
1 /*
2 * Copyright 2000-2005 JetBrains s.r.o.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.intellij.lang.javascript;
17
18 import com.intellij.extapi.psi.ASTWrapperPsiElement;
19 import com.intellij.lang.ASTNode;
20 import com.intellij.lang.ParserDefinition;
21 import com.intellij.lang.PsiParser;
22 import com.intellij.lang.javascript.parsing.JSParser;
23 import com.intellij.lang.javascript.psi.JSFile;
24 import com.intellij.lang.javascript.psi.impl.*;
25 import com.intellij.lexer.Lexer;
26 import com.intellij.openapi.diagnostic.Logger;
27 import com.intellij.openapi.project.Project;
28 import com.intellij.openapi.vfs.VirtualFile;
29 import com.intellij.psi.PsiElement;
30 import com.intellij.psi.PsiFile;
31 import com.intellij.psi.tree.IElementType;
32 import com.intellij.psi.tree.IFileElementType;
33 import com.intellij.psi.tree.TokenSet;
34
35 /**
36 * Created by IntelliJ IDEA.
37 * User: max
38 * Date: Jan 27, 2005
39 * Time: 6:07:21 PM
40 * To change this template use File | Settings | File Templates.
41 */
42 public class JavascriptParserDefinition implements ParserDefinition {
43 private static final Logger LOG = Logger.getInstance("#com.intellij.lang.javascript.JavascriptParserDefinition");
44
45 public Lexer createLexer(Project project) {
46 return new JavaScriptParsingLexer();
47 }
48
49 public IFileElementType getFileNodeType() {
50 return JSElementTypes.FILE;
51 }
52
53 public TokenSet getWhitespaceTokens() {
54 return TokenSet.create(JSTokenTypes.WHITE_SPACE);
55 }
56
57 public TokenSet getCommentTokens() {
58 return JSTokenTypes.COMMENTS;
59 }
60
61 public PsiParser createParser(final Project project) {
62 return new JSParser();
63 }
64
65 public PsiFile createFile(final Project project, VirtualFile file) {
66 return new JSFile(project, file);
67 }
68
69 public PsiFile createFile(final Project project, String name, CharSequence text) {
70 return new JSFile(project, name, text);
71 }
72
73 public PsiElement createElement(ASTNode node) {
74 final IElementType type = node.getElementType();
75 if (type == JSElementTypes.FUNCTION_DECLARATION) {
76 return new JSFunctionImpl(node);
77 }
78 else if (type == JSElementTypes.PARAMETER_LIST) {
79 return new JSParameterListImpl(node);
80 }
81 else if (type == JSElementTypes.VARIABLE) {
82 return new JSVariableImpl(node);
83 }
84 else if (type == JSElementTypes.FORMAL_PARAMETER) {
85 return new JSParameterImpl(node);
86 }
87 else if (type == JSElementTypes.ARGUMENT_LIST) {
88 return new JSArgumentListImpl(node);
89 }
90 else if (type == JSElementTypes.BLOCK) {
91 return new JSBlockStatementImpl(node);
92 }
93 else if (type == JSElementTypes.LABELED_STATEMENT) {
94 return new JSLabeledStatementImpl(node);
95 }
96 else if (type == JSElementTypes.EXPRESSION_STATEMENT) {
97 return new JSExpressionStatementImpl(node);
98 }
99 else if (type == JSElementTypes.VAR_STATEMENT) {
100 return new JSVarStatementImpl(node);
101 }
102 else if (type == JSElementTypes.EMPTY_STATEMENT) {
103 return new JSEmptyStatementImpl(node);
104 }
105 else if (type == JSElementTypes.IF_STATEMENT) {
106 return new JSIfStatementImpl(node);
107 }
108 else if (type == JSElementTypes.CONTINUE_STATEMENT) {
109 return new JSContinueStatementImpl(node);
110 }
111 else if (type == JSElementTypes.BREAK_STATEMENT) {
112 return new JSBreakStatementImpl(node);
113 }
114 else if (type == JSElementTypes.WITH_STATEMENT) {
115 return new JSWithStatmentImpl(node);
116 }
117 else if (type == JSElementTypes.RETURN_STATEMENT) {
118 return new JSReturnStatementImpl(node);
119 }
120 else if (type == JSElementTypes.THROW_STATEMENT) {
121 return new JSThrowStatementImpl(node);
122 }
123 else if (type == JSElementTypes.TRY_STATEMENT) {
124 return new JSTryStatementImpl(node);
125 }
126 else if (type == JSElementTypes.CATCH_BLOCK) {
127 return new JSCatchBlockImpl(node);
128 }
129 else if (type == JSElementTypes.SWITCH_STATEMENT) {
130 return new JSSwitchStatementImpl(node);
131 }
132 else if (type == JSElementTypes.CASE_CLAUSE) {
133 return new JSCaseClauseImpl(node);
134 }
135 else if (type == JSElementTypes.WHILE_STATEMENT) {
136 return new JSWhileStatementImpl(node);
137 }
138 else if (type == JSElementTypes.DOWHILE_STATEMENT) {
139 return new JSDoWhileStatementImpl(node);
140 }
141 else if (type == JSElementTypes.FOR_STATEMENT) {
142 return new JSForStatementImpl(node);
143 }
144 else if (type == JSElementTypes.FOR_IN_STATEMENT) {
145 return new JSForInStatementImpl(node);
146 }
147 else if (type == JSElementTypes.THIS_EXPRESSION) {
148 return new JSThisExpressionImpl(node);
149 }
150 else if (type == JSElementTypes.LITERAL_EXPRESSION) {
151 return new JSLiteralExpressionImpl(node);
152 }
153 else if (type == JSElementTypes.REFERENCE_EXPRESSION) {
154 return new JSReferenceExpressionImpl(node);
155 }
156 else if (type == JSElementTypes.PARENTHESIZED_EXPRESSION) {
157 return new JSParenthesizedExpressionImpl(node);
158 }
159 else if (type == JSElementTypes.ARRAY_LITERAL_EXPRESSION) {
160 return new JSArrayLiteralExpressionImpl(node);
161 }
162 else if (type == JSElementTypes.OBJECT_LITERAL_EXPRESSION) {
163 return new JSObjectLiteralExpressionImpl(node);
164 }
165 else if (type == JSElementTypes.PROPERTY) {
166 return new JSPropertyImpl(node);
167 }
168 else if (type == JSElementTypes.BINARY_EXPRESSION) {
169 return new JSBinaryExpressionImpl(node);
170 }
171 else if (type == JSElementTypes.ASSIGNMENT_EXPRESSION) {
172 return new JSAssignmentExpressionImpl(node);
173 }
174 else if (type == JSElementTypes.COMMA_EXPRESSION) {
175 return new JSCommaExpressionImpl(node);
176 }
177 else if (type == JSElementTypes.CONDITIONAL_EXPRESSION) {
178 return new JSConditionalExpressionImpl(node);
179 }
180 else if (type == JSElementTypes.POSTFIX_EXPRESSION) {
181 return new JSPostfixExpressionImpl(node);
182 }
183 else if (type == JSElementTypes.PREFIX_EXPRESSION) {
184 return new JSPrefixExpressionImpl(node);
185 }
186 else if (type == JSElementTypes.FUNCTION_EXPRESSION) {
187 return new JSFunctionExpressionImpl(node);
188 }
189 else if (type == JSElementTypes.NEW_EXPRESSION) {
190 return new JSNewExpressionImpl(node);
191 }
192 else if (type == JSElementTypes.INDEXED_PROPERTY_ACCESS_EXPRESSION) {
193 return new JSIndexedPropertyAccessExpressionImpl(node);
194 }
195 else if (type == JSElementTypes.CALL_EXPRESSION) {
196 return new JSCallExpressionImpl(node);
197 }
198 else if (type == JSElementTypes.EMBEDDED_CONTENT) {
199 return new JSEmbeddedContentImpl(node);
200 }
201
202 return new ASTWrapperPsiElement(node);
203 }
204 }
205