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