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