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 }