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 }