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;
018    
019    import com.intellij.psi.tree.IElementType;
020    import com.intellij.psi.tree.IFileElementType;
021    import org.jetbrains.jet.lang.psi.*;
022    import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
023    import org.jetbrains.jet.plugin.JetLanguage;
024    
025    public interface JetNodeTypes {
026        IFileElementType JET_FILE = new IFileElementType(JetLanguage.INSTANCE);
027    
028        IElementType CLASS     = JetStubElementTypes.CLASS;
029        IElementType FUN       = JetStubElementTypes.FUNCTION;
030        IElementType PROPERTY  = JetStubElementTypes.PROPERTY;
031        IElementType MULTI_VARIABLE_DECLARATION  = new JetNodeType("MULTI_VARIABLE_DECLARATION", JetMultiDeclaration.class);
032        IElementType MULTI_VARIABLE_DECLARATION_ENTRY = new JetNodeType("MULTI_VARIABLE_DECLARATION_ENTRY", JetMultiDeclarationEntry.class);
033    
034        JetNodeType TYPEDEF    = new JetNodeType("TYPEDEF", JetTypedef.class);
035        IElementType OBJECT_DECLARATION = JetStubElementTypes.OBJECT_DECLARATION;
036        JetNodeType OBJECT_DECLARATION_NAME = new JetNodeType("OBJECT_DECLARATION_NAME", JetObjectDeclarationName.class);
037    
038        IElementType CLASS_OBJECT          = JetStubElementTypes.CLASS_OBJECT;
039        IElementType ENUM_ENTRY            = JetStubElementTypes.ENUM_ENTRY;
040        IElementType ANONYMOUS_INITIALIZER = JetStubElementTypes.ANONYMOUS_INITIALIZER;
041    
042        IElementType TYPE_PARAMETER_LIST                 = JetStubElementTypes.TYPE_PARAMETER_LIST;
043        IElementType TYPE_PARAMETER                      = JetStubElementTypes.TYPE_PARAMETER;
044        IElementType DELEGATION_SPECIFIER_LIST           = JetStubElementTypes.DELEGATION_SPECIFIER_LIST;
045        IElementType DELEGATOR_BY                        = JetStubElementTypes.DELEGATOR_BY;
046        IElementType DELEGATOR_SUPER_CALL                = JetStubElementTypes.DELEGATOR_SUPER_CALL;
047        IElementType DELEGATOR_SUPER_CLASS               = JetStubElementTypes.DELEGATOR_SUPER_CLASS;
048        JetNodeType PROPERTY_DELEGATE                    = new JetNodeType("PROPERTY_DELEGATE", JetPropertyDelegate.class);
049        IElementType CONSTRUCTOR_CALLEE                  = JetStubElementTypes.CONSTRUCTOR_CALLEE;
050        IElementType VALUE_PARAMETER_LIST               = JetStubElementTypes.VALUE_PARAMETER_LIST;
051        IElementType VALUE_PARAMETER                    = JetStubElementTypes.VALUE_PARAMETER;
052    
053        IElementType CLASS_BODY                         = JetStubElementTypes.CLASS_BODY;
054        IElementType IMPORT_LIST                        = JetStubElementTypes.IMPORT_LIST;
055        IElementType IMPORT_DIRECTIVE                   = JetStubElementTypes.IMPORT_DIRECTIVE;
056        IElementType MODIFIER_LIST                      = JetStubElementTypes.MODIFIER_LIST;
057        IElementType PRIMARY_CONSTRUCTOR_MODIFIER_LIST  = JetStubElementTypes.PRIMARY_CONSTRUCTOR_MODIFIER_LIST;
058        IElementType ANNOTATION                         = JetStubElementTypes.ANNOTATION;
059        IElementType ANNOTATION_ENTRY                   = JetStubElementTypes.ANNOTATION_ENTRY;
060    
061        IElementType TYPE_ARGUMENT_LIST                 = JetStubElementTypes.TYPE_ARGUMENT_LIST;
062        JetNodeType VALUE_ARGUMENT_LIST                 = new JetNodeType("VALUE_ARGUMENT_LIST", JetValueArgumentList.class);
063        JetNodeType VALUE_ARGUMENT                      = new JetNodeType("VALUE_ARGUMENT", JetValueArgument.class);
064        JetNodeType FUNCTION_LITERAL_ARGUMENT           = new JetNodeType("FUNCTION_LITERAL_ARGUMENT", JetFunctionLiteralArgument.class);
065        JetNodeType VALUE_ARGUMENT_NAME                 = new JetNodeType("VALUE_ARGUMENT_NAME", JetValueArgumentName.class);
066        IElementType TYPE_REFERENCE                     = JetStubElementTypes.TYPE_REFERENCE;
067    
068        IElementType USER_TYPE                = JetStubElementTypes.USER_TYPE;
069        IElementType FUNCTION_TYPE            = JetStubElementTypes.FUNCTION_TYPE;
070        IElementType FUNCTION_TYPE_RECEIVER   = JetStubElementTypes.FUNCTION_TYPE_RECEIVER;
071        JetNodeType SELF_TYPE     = new JetNodeType("SELF_TYPE", JetSelfType.class);
072        IElementType NULLABLE_TYPE            = JetStubElementTypes.NULLABLE_TYPE;
073        IElementType TYPE_PROJECTION          = JetStubElementTypes.TYPE_PROJECTION;
074    
075        // TODO: review
076        IElementType PROPERTY_ACCESSOR       = JetStubElementTypes.PROPERTY_ACCESSOR;
077        IElementType INITIALIZER_LIST        = JetStubElementTypes.INITIALIZER_LIST;
078        IElementType THIS_CALL               = JetStubElementTypes.THIS_CALL;
079        JetNodeType THIS_CONSTRUCTOR_REFERENCE = new JetNodeType("THIS_CONSTRUCTOR_REFERENCE", JetThisReferenceExpression.class);
080        IElementType TYPE_CONSTRAINT_LIST    = JetStubElementTypes.TYPE_CONSTRAINT_LIST;
081        IElementType TYPE_CONSTRAINT         = JetStubElementTypes.TYPE_CONSTRAINT;
082    
083        // TODO: Not sure if we need separate NT for each kind of constants
084        JetNodeType NULL               = new JetNodeType("NULL", JetConstantExpression.class);
085        JetNodeType BOOLEAN_CONSTANT   = new JetNodeType("BOOLEAN_CONSTANT", JetConstantExpression.class);
086        JetNodeType FLOAT_CONSTANT     = new JetNodeType("FLOAT_CONSTANT", JetConstantExpression.class);
087        JetNodeType CHARACTER_CONSTANT = new JetNodeType("CHARACTER_CONSTANT", JetConstantExpression.class);
088        JetNodeType INTEGER_CONSTANT   = new JetNodeType("INTEGER_CONSTANT", JetConstantExpression.class);
089    
090        JetNodeType STRING_TEMPLATE    = new JetNodeType("STRING_TEMPLATE", JetStringTemplateExpression.class);
091        JetNodeType LONG_STRING_TEMPLATE_ENTRY = new JetNodeType("LONG_STRING_TEMPLATE_ENTRY", JetBlockStringTemplateEntry.class);
092        JetNodeType SHORT_STRING_TEMPLATE_ENTRY = new JetNodeType("SHORT_STRING_TEMPLATE_ENTRY", JetSimpleNameStringTemplateEntry.class);
093        JetNodeType LITERAL_STRING_TEMPLATE_ENTRY = new JetNodeType("LITERAL_STRING_TEMPLATE_ENTRY", JetLiteralStringTemplateEntry.class);
094        JetNodeType ESCAPE_STRING_TEMPLATE_ENTRY = new JetNodeType("ESCAPE_STRING_TEMPLATE_ENTRY", JetEscapeStringTemplateEntry.class);
095    
096        JetNodeType PARENTHESIZED             = new JetNodeType("PARENTHESIZED", JetParenthesizedExpression.class);
097        JetNodeType RETURN                    = new JetNodeType("RETURN", JetReturnExpression.class);
098        JetNodeType THROW                     = new JetNodeType("THROW", JetThrowExpression.class);
099        JetNodeType CONTINUE                  = new JetNodeType("CONTINUE", JetContinueExpression.class);
100        JetNodeType BREAK                     = new JetNodeType("BREAK", JetBreakExpression.class);
101        JetNodeType IF                        = new JetNodeType("IF", JetIfExpression.class);
102        JetNodeType CONDITION                 = new JetNodeType("CONDITION", JetContainerNode.class);
103        JetNodeType THEN                      = new JetNodeType("THEN", JetContainerNode.class);
104        JetNodeType ELSE                      = new JetNodeType("ELSE", JetContainerNode.class);
105        JetNodeType TRY                       = new JetNodeType("TRY", JetTryExpression.class);
106        JetNodeType CATCH                     = new JetNodeType("CATCH", JetCatchClause.class);
107        JetNodeType FINALLY                   = new JetNodeType("FINALLY", JetFinallySection.class);
108        JetNodeType FOR                       = new JetNodeType("FOR", JetForExpression.class);
109        JetNodeType WHILE                     = new JetNodeType("WHILE", JetWhileExpression.class);
110        JetNodeType DO_WHILE                  = new JetNodeType("DO_WHILE", JetDoWhileExpression.class);
111        JetNodeType LOOP_RANGE                = new JetNodeType("LOOP_RANGE", JetContainerNode.class);
112        JetNodeType BODY                      = new JetNodeType("BODY", JetContainerNode.class);
113        JetNodeType BLOCK                     = new JetNodeType("BLOCK", JetBlockExpression.class);
114        JetNodeType FUNCTION_LITERAL_EXPRESSION = new JetNodeType("FUNCTION_LITERAL_EXPRESSION", JetFunctionLiteralExpression.class);
115        JetNodeType FUNCTION_LITERAL          = new JetNodeType("FUNCTION_LITERAL", JetFunctionLiteral.class);
116        JetNodeType ANNOTATED_EXPRESSION      = new JetNodeType("ANNOTATED_EXPRESSION", JetAnnotatedExpression.class);
117    
118        IElementType REFERENCE_EXPRESSION     = JetStubElementTypes.REFERENCE_EXPRESSION;
119        JetNodeType OPERATION_REFERENCE       = new JetNodeType("OPERATION_REFERENCE", JetOperationReferenceExpression.class);
120        JetNodeType LABEL                     = new JetNodeType("LABEL", JetLabelReferenceExpression.class);
121    
122        JetNodeType LABEL_QUALIFIER           = new JetNodeType("LABEL_QUALIFIER", JetContainerNode.class);
123    
124        JetNodeType THIS_EXPRESSION           = new JetNodeType("THIS_EXPRESSION", JetThisExpression.class);
125        JetNodeType SUPER_EXPRESSION          = new JetNodeType("SUPER_EXPRESSION", JetSuperExpression.class);
126        JetNodeType BINARY_EXPRESSION         = new JetNodeType("BINARY_EXPRESSION", JetBinaryExpression.class);
127        JetNodeType BINARY_WITH_TYPE          = new JetNodeType("BINARY_WITH_TYPE", JetBinaryExpressionWithTypeRHS.class);
128        JetNodeType IS_EXPRESSION = new JetNodeType("IS_EXPRESSION", JetIsExpression.class); // TODO:
129        JetNodeType PREFIX_EXPRESSION         = new JetNodeType("PREFIX_EXPRESSION", JetPrefixExpression.class);
130        JetNodeType POSTFIX_EXPRESSION        = new JetNodeType("POSTFIX_EXPRESSION", JetPostfixExpression.class);
131        JetNodeType LABELED_EXPRESSION         = new JetNodeType("LABELED_EXPRESSION", JetLabeledExpression.class);
132        JetNodeType CALL_EXPRESSION           = new JetNodeType("CALL_EXPRESSION", JetCallExpression.class);
133        JetNodeType ARRAY_ACCESS_EXPRESSION   = new JetNodeType("ARRAY_ACCESS_EXPRESSION", JetArrayAccessExpression.class);
134        JetNodeType INDICES                   = new JetNodeType("INDICES", JetContainerNode.class);
135        IElementType DOT_QUALIFIED_EXPRESSION = JetStubElementTypes.DOT_QUALIFIED_EXPRESSION;
136        JetNodeType CALLABLE_REFERENCE_EXPRESSION = new JetNodeType("CALLABLE_REFERENCE_EXPRESSION", JetCallableReferenceExpression.class);
137        JetNodeType SAFE_ACCESS_EXPRESSION    = new JetNodeType("SAFE_ACCESS_EXPRESSION", JetSafeQualifiedExpression.class);
138    
139        JetNodeType OBJECT_LITERAL            = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class);
140        JetNodeType ROOT_PACKAGE = new JetNodeType("ROOT_PACKAGE", JetRootPackageExpression.class);
141    
142        JetNodeType WHEN                      = new JetNodeType("WHEN", JetWhenExpression.class);
143        JetNodeType WHEN_ENTRY                = new JetNodeType("WHEN_ENTRY", JetWhenEntry.class);
144    
145        JetNodeType WHEN_CONDITION_IN_RANGE   = new JetNodeType("WHEN_CONDITION_IN_RANGE", JetWhenConditionInRange.class);
146        JetNodeType WHEN_CONDITION_IS_PATTERN = new JetNodeType("WHEN_CONDITION_IS_PATTERN", JetWhenConditionIsPattern.class);
147        JetNodeType WHEN_CONDITION_EXPRESSION = new JetNodeType("WHEN_CONDITION_WITH_EXPRESSION", JetWhenConditionWithExpression.class);
148    
149        IElementType PACKAGE_DIRECTIVE = JetStubElementTypes.PACKAGE_DIRECTIVE;
150    
151        // SCRIPT: script node type
152        JetNodeType SCRIPT = new JetNodeType("SCRIPT", JetScript.class);
153    
154        IFileElementType TYPE_CODE_FRAGMENT = new JetTypeCodeFragmentType();
155        IFileElementType EXPRESSION_CODE_FRAGMENT = new JetExpressionCodeFragmentType();
156        IFileElementType BLOCK_CODE_FRAGMENT = new JetBlockCodeFragmentType();
157    }