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