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 017package org.jetbrains.jet; 018 019import com.intellij.psi.tree.IElementType; 020import com.intellij.psi.tree.IFileElementType; 021import org.jetbrains.jet.lang.psi.*; 022import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes; 023import org.jetbrains.jet.plugin.JetLanguage; 024 025public 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 JetNodeType CLASS_OBJECT = new JetNodeType("CLASS_OBJECT", JetClassObject.class); 039 IElementType ENUM_ENTRY = JetStubElementTypes.ENUM_ENTRY; 040 JetNodeType ANONYMOUS_INITIALIZER = new JetNodeType("ANONYMOUS_INITIALIZER", JetClassInitializer.class); 041 042 IElementType TYPE_PARAMETER_LIST = JetStubElementTypes.TYPE_PARAMETER_LIST; 043 IElementType TYPE_PARAMETER = JetStubElementTypes.TYPE_PARAMETER; 044 JetNodeType DELEGATION_SPECIFIER_LIST = new JetNodeType("DELEGATION_SPECIFIER_LIST", JetDelegationSpecifierList.class); 045 JetNodeType DELEGATOR_BY = new JetNodeType("DELEGATOR_BY", JetDelegatorByExpressionSpecifier.class); 046 JetNodeType DELEGATOR_SUPER_CALL = new JetNodeType("DELEGATOR_SUPER_CALL", JetDelegatorToSuperCall.class); 047 JetNodeType DELEGATOR_SUPER_CLASS = new JetNodeType("DELEGATOR_SUPER_CLASS", JetDelegatorToSuperClass.class); 048 JetNodeType PROPERTY_DELEGATE = new JetNodeType("PROPERTY_DELEGATE", JetPropertyDelegate.class); 049 JetNodeType CONSTRUCTOR_CALLEE = new JetNodeType("CONSTRUCTOR_CALLEE", JetConstructorCalleeExpression.class); 050 IElementType VALUE_PARAMETER_LIST = JetStubElementTypes.VALUE_PARAMETER_LIST; 051 IElementType VALUE_PARAMETER = JetStubElementTypes.VALUE_PARAMETER; 052 053 JetNodeType CLASS_BODY = new JetNodeType("CLASS_BODY", JetClassBody.class); 054 JetNodeType IMPORT_DIRECTIVE = new JetNodeType("IMPORT_DIRECTIVE", JetImportDirective.class); 055 JetNodeType MODIFIER_LIST = new JetNodeType("MODIFIER_LIST", JetModifierList.class); 056 JetNodeType PRIMARY_CONSTRUCTOR_MODIFIER_LIST = new JetNodeType("PRIMARY_CONSTRUCTOR_MODIFIER_LIST", JetModifierList.class); 057 JetNodeType ANNOTATION = new JetNodeType("ANNOTATION", JetAnnotation.class); 058 IElementType ANNOTATION_ENTRY = JetStubElementTypes.ANNOTATION_ENTRY; 059 060 JetNodeType TYPE_ARGUMENT_LIST = new JetNodeType("TYPE_ARGUMENT_LIST", JetTypeArgumentList.class); 061 JetNodeType VALUE_ARGUMENT_LIST = new JetNodeType("VALUE_ARGUMENT_LIST", JetValueArgumentList.class); 062 JetNodeType VALUE_ARGUMENT = new JetNodeType("VALUE_ARGUMENT", JetValueArgument.class); 063 JetNodeType VALUE_ARGUMENT_NAME = new JetNodeType("VALUE_ARGUMENT_NAME", JetValueArgumentName.class); 064 JetNodeType TYPE_REFERENCE = new JetNodeType("TYPE_REFERENCE", JetTypeReference.class); 065 066 JetNodeType USER_TYPE = new JetNodeType("USER_TYPE", JetUserType.class); 067 068 JetNodeType FUNCTION_TYPE = new JetNodeType("FUNCTION_TYPE", JetFunctionType.class); 069 JetNodeType FUNCTION_TYPE_RECEIVER = new JetNodeType("FUNCTION_TYPE_RECEIVER", JetFunctionTypeReceiver.class); 070 JetNodeType SELF_TYPE = new JetNodeType("SELF_TYPE", JetSelfType.class); 071 JetNodeType NULLABLE_TYPE = new JetNodeType("NULLABLE_TYPE", JetNullableType.class); 072 JetNodeType TYPE_PROJECTION = new JetNodeType("TYPE_PROJECTION", JetTypeProjection.class); 073 074 // TODO: review 075 JetNodeType PROPERTY_ACCESSOR = new JetNodeType("PROPERTY_ACCESSOR", JetPropertyAccessor.class); 076 JetNodeType INITIALIZER_LIST = new JetNodeType("INITIALIZER_LIST", JetInitializerList.class); 077 JetNodeType THIS_CALL = new JetNodeType("THIS_CALL", JetDelegatorToThisCall.class); 078 JetNodeType THIS_CONSTRUCTOR_REFERENCE = new JetNodeType("THIS_CONSTRUCTOR_REFERENCE", JetThisReferenceExpression.class); 079 JetNodeType TYPE_CONSTRAINT_LIST = new JetNodeType("TYPE_CONSTRAINT_LIST", JetTypeConstraintList.class); 080 JetNodeType TYPE_CONSTRAINT = new JetNodeType("TYPE_CONSTRAINT", JetTypeConstraint.class); 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_PARAMETER = new JetNodeType("LOOP_PARAMETER", JetParameter.class); // TODO: Do we need separate type? 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 JetNodeType REFERENCE_EXPRESSION = new JetNodeType("REFERENCE_EXPRESSION", JetSimpleNameExpression.class); 119 JetNodeType OPERATION_REFERENCE = new JetNodeType("OPERATION_REFERENCE", JetSimpleNameExpression.class); 120 JetNodeType LABEL_REFERENCE = new JetNodeType("LABEL_REFERENCE", JetSimpleNameExpression.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 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 JetNodeType DOT_QUALIFIED_EXPRESSION = new JetNodeType("DOT_QUALIFIED_EXPRESSION", JetDotQualifiedExpression.class); 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_NAMESPACE = new JetNodeType("ROOT_NAMESPACE", JetRootNamespaceExpression.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 JetNodeType NAMESPACE_HEADER = new JetNodeType("NAMESPACE_HEADER", JetNamespaceHeader.class); 149 JetNodeType SCRIPT = new JetNodeType("SCRIPT", JetScript.class); 150 151 JetNodeType IDE_TEMPLATE_EXPRESSION = new JetNodeType("IDE_TEMPLATE_EXPRESSION", JetIdeTemplate.class); 152 153 IFileElementType TYPE_CODE_FRAGMENT = new JetTypeCodeFragmentType(); 154 IFileElementType EXPRESSION_CODE_FRAGMENT = new JetExpressionCodeFragmentType(); 155}