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 VALUE_ARGUMENT_NAME                 = new JetNodeType("VALUE_ARGUMENT_NAME", JetValueArgumentName.class);
065        IElementType TYPE_REFERENCE                     = JetStubElementTypes.TYPE_REFERENCE;
066    
067        IElementType USER_TYPE                = JetStubElementTypes.USER_TYPE;
068        IElementType FUNCTION_TYPE            = JetStubElementTypes.FUNCTION_TYPE;
069        IElementType FUNCTION_TYPE_RECEIVER   = JetStubElementTypes.FUNCTION_TYPE_RECEIVER;
070        JetNodeType SELF_TYPE     = new JetNodeType("SELF_TYPE", JetSelfType.class);
071        IElementType NULLABLE_TYPE            = JetStubElementTypes.NULLABLE_TYPE;
072        IElementType TYPE_PROJECTION          = JetStubElementTypes.TYPE_PROJECTION;
073    
074        // TODO: review
075        IElementType PROPERTY_ACCESSOR       = JetStubElementTypes.PROPERTY_ACCESSOR;
076        IElementType INITIALIZER_LIST        = JetStubElementTypes.INITIALIZER_LIST;
077        IElementType THIS_CALL               = JetStubElementTypes.THIS_CALL;
078        JetNodeType THIS_CONSTRUCTOR_REFERENCE = new JetNodeType("THIS_CONSTRUCTOR_REFERENCE", JetThisReferenceExpression.class);
079        IElementType TYPE_CONSTRAINT_LIST    = JetStubElementTypes.TYPE_CONSTRAINT_LIST;
080        IElementType TYPE_CONSTRAINT         = JetStubElementTypes.TYPE_CONSTRAINT;
081    
082        // TODO: Not sure if we need separate NT for each kind of constants
083        JetNodeType NULL               = new JetNodeType("NULL", JetConstantExpression.class);
084        JetNodeType BOOLEAN_CONSTANT   = new JetNodeType("BOOLEAN_CONSTANT", JetConstantExpression.class);
085        JetNodeType FLOAT_CONSTANT     = new JetNodeType("FLOAT_CONSTANT", JetConstantExpression.class);
086        JetNodeType CHARACTER_CONSTANT = new JetNodeType("CHARACTER_CONSTANT", JetConstantExpression.class);
087        JetNodeType INTEGER_CONSTANT   = new JetNodeType("INTEGER_CONSTANT", JetConstantExpression.class);
088    
089        JetNodeType STRING_TEMPLATE    = new JetNodeType("STRING_TEMPLATE", JetStringTemplateExpression.class);
090        JetNodeType LONG_STRING_TEMPLATE_ENTRY = new JetNodeType("LONG_STRING_TEMPLATE_ENTRY", JetBlockStringTemplateEntry.class);
091        JetNodeType SHORT_STRING_TEMPLATE_ENTRY = new JetNodeType("SHORT_STRING_TEMPLATE_ENTRY", JetSimpleNameStringTemplateEntry.class);
092        JetNodeType LITERAL_STRING_TEMPLATE_ENTRY = new JetNodeType("LITERAL_STRING_TEMPLATE_ENTRY", JetLiteralStringTemplateEntry.class);
093        JetNodeType ESCAPE_STRING_TEMPLATE_ENTRY = new JetNodeType("ESCAPE_STRING_TEMPLATE_ENTRY", JetEscapeStringTemplateEntry.class);
094    
095        JetNodeType PARENTHESIZED             = new JetNodeType("PARENTHESIZED", JetParenthesizedExpression.class);
096        JetNodeType RETURN                    = new JetNodeType("RETURN", JetReturnExpression.class);
097        JetNodeType THROW                     = new JetNodeType("THROW", JetThrowExpression.class);
098        JetNodeType CONTINUE                  = new JetNodeType("CONTINUE", JetContinueExpression.class);
099        JetNodeType BREAK                     = new JetNodeType("BREAK", JetBreakExpression.class);
100        JetNodeType IF                        = new JetNodeType("IF", JetIfExpression.class);
101        JetNodeType CONDITION                 = new JetNodeType("CONDITION", JetContainerNode.class);
102        JetNodeType THEN                      = new JetNodeType("THEN", JetContainerNode.class);
103        JetNodeType ELSE                      = new JetNodeType("ELSE", JetContainerNode.class);
104        JetNodeType TRY                       = new JetNodeType("TRY", JetTryExpression.class);
105        JetNodeType CATCH                     = new JetNodeType("CATCH", JetCatchClause.class);
106        JetNodeType FINALLY                   = new JetNodeType("FINALLY", JetFinallySection.class);
107        JetNodeType FOR                       = new JetNodeType("FOR", JetForExpression.class);
108        JetNodeType WHILE                     = new JetNodeType("WHILE", JetWhileExpression.class);
109        JetNodeType DO_WHILE                  = new JetNodeType("DO_WHILE", JetDoWhileExpression.class);
110        JetNodeType LOOP_RANGE                = new JetNodeType("LOOP_RANGE", JetContainerNode.class);
111        JetNodeType BODY                      = new JetNodeType("BODY", JetContainerNode.class);
112        JetNodeType BLOCK                     = new JetNodeType("BLOCK", JetBlockExpression.class);
113        JetNodeType FUNCTION_LITERAL_EXPRESSION = new JetNodeType("FUNCTION_LITERAL_EXPRESSION", JetFunctionLiteralExpression.class);
114        JetNodeType FUNCTION_LITERAL          = new JetNodeType("FUNCTION_LITERAL", JetFunctionLiteral.class);
115        JetNodeType ANNOTATED_EXPRESSION      = new JetNodeType("ANNOTATED_EXPRESSION", JetAnnotatedExpression.class);
116    
117        IElementType REFERENCE_EXPRESSION     = JetStubElementTypes.REFERENCE_EXPRESSION;
118        JetNodeType OPERATION_REFERENCE       = new JetNodeType("OPERATION_REFERENCE", JetOperationReferenceExpression.class);
119        JetNodeType LABEL                     = new JetNodeType("LABEL", JetLabelReferenceExpression.class);
120    
121        JetNodeType LABEL_QUALIFIER           = new JetNodeType("LABEL_QUALIFIER", JetContainerNode.class);
122    
123        JetNodeType THIS_EXPRESSION           = new JetNodeType("THIS_EXPRESSION", JetThisExpression.class);
124        JetNodeType SUPER_EXPRESSION          = new JetNodeType("SUPER_EXPRESSION", JetSuperExpression.class);
125        JetNodeType BINARY_EXPRESSION         = new JetNodeType("BINARY_EXPRESSION", JetBinaryExpression.class);
126        JetNodeType BINARY_WITH_TYPE          = new JetNodeType("BINARY_WITH_TYPE", JetBinaryExpressionWithTypeRHS.class);
127        JetNodeType IS_EXPRESSION = new JetNodeType("IS_EXPRESSION", JetIsExpression.class); // TODO:
128        JetNodeType PREFIX_EXPRESSION         = new JetNodeType("PREFIX_EXPRESSION", JetPrefixExpression.class);
129        JetNodeType POSTFIX_EXPRESSION        = new JetNodeType("POSTFIX_EXPRESSION", JetPostfixExpression.class);
130        JetNodeType LABELED_EXPRESSION         = new JetNodeType("LABELED_EXPRESSION", JetLabeledExpression.class);
131        JetNodeType CALL_EXPRESSION           = new JetNodeType("CALL_EXPRESSION", JetCallExpression.class);
132        JetNodeType ARRAY_ACCESS_EXPRESSION   = new JetNodeType("ARRAY_ACCESS_EXPRESSION", JetArrayAccessExpression.class);
133        JetNodeType INDICES                   = new JetNodeType("INDICES", JetContainerNode.class);
134        IElementType DOT_QUALIFIED_EXPRESSION = JetStubElementTypes.DOT_QUALIFIED_EXPRESSION;
135        JetNodeType CALLABLE_REFERENCE_EXPRESSION = new JetNodeType("CALLABLE_REFERENCE_EXPRESSION", JetCallableReferenceExpression.class);
136        JetNodeType SAFE_ACCESS_EXPRESSION    = new JetNodeType("SAFE_ACCESS_EXPRESSION", JetSafeQualifiedExpression.class);
137    
138        JetNodeType OBJECT_LITERAL            = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class);
139        JetNodeType ROOT_PACKAGE = new JetNodeType("ROOT_PACKAGE", JetRootPackageExpression.class);
140    
141        JetNodeType WHEN                      = new JetNodeType("WHEN", JetWhenExpression.class);
142        JetNodeType WHEN_ENTRY                = new JetNodeType("WHEN_ENTRY", JetWhenEntry.class);
143    
144        JetNodeType WHEN_CONDITION_IN_RANGE   = new JetNodeType("WHEN_CONDITION_IN_RANGE", JetWhenConditionInRange.class);
145        JetNodeType WHEN_CONDITION_IS_PATTERN = new JetNodeType("WHEN_CONDITION_IS_PATTERN", JetWhenConditionIsPattern.class);
146        JetNodeType WHEN_CONDITION_EXPRESSION = new JetNodeType("WHEN_CONDITION_WITH_EXPRESSION", JetWhenConditionWithExpression.class);
147    
148        IElementType PACKAGE_DIRECTIVE = JetStubElementTypes.PACKAGE_DIRECTIVE;
149    
150        // SCRIPT: script node type
151        JetNodeType SCRIPT = new JetNodeType("SCRIPT", JetScript.class);
152    
153        IFileElementType TYPE_CODE_FRAGMENT = new JetTypeCodeFragmentType();
154        IFileElementType EXPRESSION_CODE_FRAGMENT = new JetExpressionCodeFragmentType();
155        IFileElementType BLOCK_CODE_FRAGMENT = new JetBlockCodeFragmentType();
156    }