All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes Maven / Gradle / Ivy

Go to download

A packaging of the IntelliJ Community Edition groovy-psi library. This is release number 1 of trunk branch 142.

The newest version!
/*
 * Copyright 2000-2014 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jetbrains.plugins.groovy.lang.parser;

import com.intellij.lang.ASTNode;
import com.intellij.psi.stubs.*;
import com.intellij.util.io.StringRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.GroovyLanguage;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyElementType;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariableDeclaration;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterList;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.*;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEnumConstant;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEnumConstantList;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameter;
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameterList;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.GrVariableDeclarationImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.blocks.GrBlockImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.blocks.GrClosableBlockImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.blocks.GrOpenBlockImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.params.GrParameterImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.params.GrParameterListImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.*;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.enumConstant.GrEnumConstantListImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members.GrAnnotationMethodImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members.GrConstructorImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members.GrMethodImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.types.GrTypeParameterImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.types.GrTypeParameterListImpl;
import org.jetbrains.plugins.groovy.lang.psi.stubs.*;
import org.jetbrains.plugins.groovy.lang.psi.stubs.elements.*;
import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotationMethodNameIndex;

import java.io.IOException;

/**
 * Utility interface that contains all Groovy non-token element types
 *
 * @author Dmitry.Krasilschikov, ilyas
 */
public interface GroovyElementTypes {

  /*
  Stub elements
   */
  GrStubElementType CLASS_DEFINITION =
    new GrTypeDefinitionElementType("class definition") {
      @Override
      public GrClassDefinition createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrClassDefinitionImpl(stub);
      }
    };
  GrStubElementType INTERFACE_DEFINITION =
    new GrTypeDefinitionElementType("interface definition") {
      @Override
      public GrInterfaceDefinition createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrInterfaceDefinitionImpl(stub);
      }
    };
  GrStubElementType ENUM_DEFINITION =
    new GrTypeDefinitionElementType("enumeration definition") {
      @Override
      public GrEnumTypeDefinition createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrEnumTypeDefinitionImpl(stub);
      }
    };
  GrStubElementType ANNOTATION_DEFINITION =
    new GrTypeDefinitionElementType("annotation definition") {
      @Override
      public GrAnnotationTypeDefinition createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrAnnotationTypeDefinitionImpl(stub);
      }
    };
  GrStubElementType ANONYMOUS_CLASS_DEFINITION =
    new GrTypeDefinitionElementType("Anonymous class") {
      @Override
      public GrAnonymousClassDefinition createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrAnonymousClassDefinitionImpl(stub);
      }
    };
  GrStubElementType TRAIT_DEFINITION =
    new GrTypeDefinitionElementType("Trait definition") {
      @Override
      public GrTraitTypeDefinition createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrTraitTypeDefinitionImpl(stub);
      }
    };

  GrStubElementType ENUM_CONSTANT_INITIALIZER =
    new GrTypeDefinitionElementType("Enum constant initializer") {
      @Override
      public GrEnumConstantInitializer createPsi(@NotNull GrTypeDefinitionStub stub) {
        return new GrEnumConstantInitializerImpl(stub);
      }
    };

  GrStubElementType ENUM_CONSTANT = new GrEnumConstantElementType();
  GrStubElementType FIELD = new GrFieldElementType();
  GrMethodElementType METHOD_DEFINITION = new GrMethodElementType("method definition") {

    @Override
    public GrMethod createPsi(@NotNull GrMethodStub stub) {
      return new GrMethodImpl(stub);
    }
  };
  GrStubElementType ANNOTATION_METHOD = new GrMethodElementType("annotation method") {
    @Override
    public GrMethod createPsi(@NotNull GrMethodStub stub) {
      return new GrAnnotationMethodImpl(stub);
    }

    @Override
    public void indexStub(@NotNull GrMethodStub stub, @NotNull IndexSink sink) {
      super.indexStub(stub, sink);
      String name = stub.getName();
      sink.occurrence(GrAnnotationMethodNameIndex.KEY, name);
    }
  };

  GrReferenceListElementType IMPLEMENTS_CLAUSE = new GrReferenceListElementType("implements clause") {
    @Override
    public GrImplementsClause createPsi(@NotNull GrReferenceListStub stub) {
      return new GrImplementsClauseImpl(stub);
    }
  };
  GrReferenceListElementType EXTENDS_CLAUSE = new GrReferenceListElementType("super class clause") {
    @Override
    public GrExtendsClause createPsi(@NotNull GrReferenceListStub stub) {
      return new GrExtendsClauseImpl(stub);
    }
  };


  GroovyElementType NONE = new GroovyElementType("no token"); //not a node

  // Indicates the wrongway of parsing
  GroovyElementType WRONGWAY = new GroovyElementType("Wrong way!");
  GroovyElementType LITERAL = new GroovyElementType("Literal");
  //Packaging
  GrPackageDefinitionElementType PACKAGE_DEFINITION = new GrPackageDefinitionElementType("Package definition");

  GrCodeBlockElementType CLOSABLE_BLOCK = new GrCodeBlockElementType("Closable block") {
    @NotNull
    @Override
    public GrBlockImpl createNode(CharSequence text) {
      return new GrClosableBlockImpl(this, text);
    }
  };
  GrCodeBlockElementType OPEN_BLOCK = new GrCodeBlockElementType("Open block") {
    @NotNull
    @Override
    public GrBlockImpl createNode(CharSequence text) {
      return new GrOpenBlockImpl(this, text);
    }
  };
  GrCodeBlockElementType CONSTRUCTOR_BODY = new GrCodeBlockElementType("Constructor body") {
    @NotNull
    @Override
    public GrBlockImpl createNode(CharSequence text) {
      return new GrOpenBlockImpl(this, text);
    }
  };

  GroovyElementType BLOCK_STATEMENT = new GroovyElementType("Block statement");

  EmptyStubElementType ENUM_CONSTANTS = new EmptyStubElementType("Enumeration constants",
                                                                                                         GroovyLanguage.INSTANCE) {
    @Override
    public GrEnumConstantList createPsi(@NotNull EmptyStub stub) {
      return new GrEnumConstantListImpl(stub);
    }
  };
  GrImportStatementElementType IMPORT_STATEMENT = new GrImportStatementElementType("Import statement");
  //Branch statements
  GroovyElementType BREAK_STATEMENT = new GroovyElementType("Break statement");
  GroovyElementType CONTINUE_STATEMENT = new GroovyElementType("Continue statement");

  GroovyElementType RETURN_STATEMENT = new GroovyElementType("Return statement");
  GroovyElementType ASSERT_STATEMENT = new GroovyElementType("Assert statement");
  GroovyElementType THROW_STATEMENT = new GroovyElementType("Throw statement");
  // Expression statements
  GroovyElementType LABELED_STATEMENT = new GroovyElementType("Labeled statement");
  GroovyElementType CALL_EXPRESSION = new GroovyElementType("Expression statement");
  GroovyElementType COMMAND_ARGUMENTS = new GroovyElementType("Command argument");
  GroovyElementType CONDITIONAL_EXPRESSION = new GroovyElementType("Conditional expression");
  GroovyElementType ELVIS_EXPRESSION = new GroovyElementType("Elvis expression");
  GroovyElementType ASSIGNMENT_EXPRESSION = new GroovyElementType("Assignment expression");
  GroovyElementType LOGICAL_OR_EXPRESSION = new GroovyElementType("Logical OR expression");
  GroovyElementType LOGICAL_AND_EXPRESSION = new GroovyElementType("Logical AND expression");
  GroovyElementType INCLUSIVE_OR_EXPRESSION = new GroovyElementType("Inclusive OR expression");
  GroovyElementType EXCLUSIVE_OR_EXPRESSION = new GroovyElementType("Exclusive OR expression");
  GroovyElementType AND_EXPRESSION = new GroovyElementType("AND expression");
  GroovyElementType REGEX_FIND_EXPRESSION = new GroovyElementType("Regex Find expression");
  GroovyElementType REGEX_MATCH_EXPRESSION = new GroovyElementType("Regex Match expression");
  GroovyElementType EQUALITY_EXPRESSION = new GroovyElementType("Equality expression");
  GroovyElementType RELATIONAL_EXPRESSION = new GroovyElementType("Relational expression");
  GroovyElementType SHIFT_EXPRESSION = new GroovyElementType("Shift expression");
  GroovyElementType RANGE_EXPRESSION = new GroovyElementType("Range expression");
  GroovyElementType COMPOSITE_LSHIFT_SIGN = new GroovyElementType("Composite shift sign <<");
  GroovyElementType COMPOSITE_RSHIFT_SIGN = new GroovyElementType("Composite shift sign >>");
  GroovyElementType COMPOSITE_TRIPLE_SHIFT_SIGN = new GroovyElementType("Composite shift sign >>>");
  GroovyElementType MORE_OR_EQUALS_SIGN = new GroovyElementType(">=");
  GroovyElementType ADDITIVE_EXPRESSION = new GroovyElementType("Additive expression");
  GroovyElementType MULTIPLICATIVE_EXPRESSION = new GroovyElementType("Multiplicative expression");
  GroovyElementType POWER_EXPRESSION = new GroovyElementType("Power expression");
  GroovyElementType POWER_EXPRESSION_SIMPLE = new GroovyElementType("Simple power expression");
  GroovyElementType UNARY_EXPRESSION = new GroovyElementType("Unary expression");
  GroovyElementType CAST_EXPRESSION = new GroovyElementType("cast expression");
  GroovyElementType SAFE_CAST_EXPRESSION = new GroovyElementType("safe cast expression");
  GroovyElementType INSTANCEOF_EXPRESSION = new GroovyElementType("instanceof expression");
  GroovyElementType PATH_PROPERTY_REFERENCE = new GroovyElementType("Property reference");

  GroovyElementType PATH_METHOD_CALL = new GroovyElementType("Method call");

  GroovyElementType PATH_INDEX_PROPERTY = new GroovyElementType("Index property");
  GroovyElementType PARENTHESIZED_EXPRESSION = new GroovyElementType("Parenthesized expression");

  // Arguments
  GroovyElementType ARGUMENTS = new GroovyElementType("Arguments");
  GroovyElementType NAMED_ARGUMENT = new GroovyElementType("Compound argument");
  GroovyElementType SPREAD_ARGUMENT = new GroovyElementType("Spread argument");
  GroovyElementType ARGUMENT_LABEL = new GroovyElementType("Argument label");
  GroovyElementType REFERENCE_EXPRESSION = new GroovyElementType("Reference expressions");

  GroovyElementType NEW_EXPRESSION = new GroovyElementType("New expressions");

  GroovyElementType BUILT_IN_TYPE_EXPRESSION = new GroovyElementType("Built in type expression");

  // Lists & maps
  GroovyElementType LIST_OR_MAP = new GroovyElementType("Generalized list");
  // Type Elements
  GroovyElementType ARRAY_TYPE = new GroovyElementType("Array type");

  GroovyElementType BUILT_IN_TYPE = new GroovyElementType("Built in type");

  GroovyElementType DISJUNCTION_TYPE_ELEMENT = new GroovyElementType("Disjunction type element");

  // GStrings
  GroovyElementType GSTRING = new GroovyElementType("GString");
  GroovyElementType GSTRING_INJECTION =new GroovyElementType("Gstring injection");
  GroovyElementType GSTRING_CONTENT = new GroovyElementType("GString content element");


  GroovyElementType REGEX = new GroovyElementType("Regular expression");
  //types
  GroovyElementType REFERENCE_ELEMENT = new GroovyElementType("reference element");
  GroovyElementType ARRAY_DECLARATOR = new GroovyElementType("array declarator");

  GroovyElementType TYPE_ARGUMENTS = new GroovyElementType("type arguments", true);
  GroovyElementType TYPE_ARGUMENT = new GroovyElementType("type argument");
  EmptyStubElementType TYPE_PARAMETER_LIST = new EmptyStubElementType("type parameter list",
                                                                                                                GroovyLanguage.INSTANCE) {
    @Override
    public GrTypeParameterList createPsi(@NotNull EmptyStub stub) {
      return new GrTypeParameterListImpl(stub);
    }
  };

  GrStubElementType TYPE_PARAMETER = new GrStubElementType("type parameter") {
    @Override
    public GrTypeParameter createPsi(@NotNull GrTypeParameterStub stub) {
      return new GrTypeParameterImpl(stub);
    }

    @Override
    public GrTypeParameterStub createStub(@NotNull GrTypeParameter psi, StubElement parentStub) {
      return new GrTypeParameterStub(parentStub, StringRef.fromString(psi.getName()));
    }

    @Override
    public void serialize(@NotNull GrTypeParameterStub stub, @NotNull StubOutputStream dataStream) throws IOException {
      dataStream.writeName(stub.getName());
    }

    @NotNull
    @Override
    public GrTypeParameterStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException {
      return new GrTypeParameterStub(parentStub, dataStream.readName());
    }
  };
  GroovyElementType TYPE_PARAMETER_EXTENDS_BOUND_LIST = new GroovyElementType("type extends list");

  GroovyElementType DEFAULT_ANNOTATION_VALUE = new GroovyElementType("default annotation value");

  GrMethodElementType CONSTRUCTOR_DEFINITION = new GrMethodElementType("constructor definition") {
    @Override
    public GrMethod createPsi(@NotNull GrMethodStub stub) {
      return new GrConstructorImpl(stub);
    }
  };

  GroovyElementType EXPLICIT_CONSTRUCTOR = new GroovyElementType("explicit constructor invokation");

  //throws
  GroovyElementType THROW_CLAUSE = new GroovyElementType("throw clause", true);
  //annotation
  GroovyElementType ANNOTATION_ARRAY_INITIALIZER = new GroovyElementType("annotation array initializer");
  GroovyElementType ANNOTATION_ARGUMENTS = new GroovyElementType("annotation arguments", true);
  GroovyElementType ANNOTATION_MEMBER_VALUE_PAIR = new GroovyElementType("annotation member value pair");

  GrStubElementType ANNOTATION = new GrAnnotationElementType("annotation");
  //parameters
  EmptyStubElementType PARAMETERS_LIST = new EmptyStubElementType("parameters list",
                                                                                                    GroovyLanguage.INSTANCE) {
    @Override
    public GrParameterList createPsi(@NotNull EmptyStub stub) {
      return new GrParameterListImpl(stub);
    }
  };

  GrStubElementType PARAMETER = new GrStubElementType("parameter") {
    @Override
    public GrParameter createPsi(@NotNull GrParameterStub stub) {
      return new GrParameterImpl(stub);
    }

    @Override
    public GrParameterStub createStub(@NotNull GrParameter psi, StubElement parentStub) {
      return new GrParameterStub(parentStub, StringRef.fromString(psi.getName()), GrStubUtils.getAnnotationNames(psi), GrStubUtils.getTypeText(
        psi.getTypeElementGroovy()));
    }

    @Override
    public void serialize(@NotNull GrParameterStub stub, @NotNull StubOutputStream dataStream) throws IOException {
      dataStream.writeName(stub.getName());
      GrStubUtils.writeStringArray(dataStream, stub.getAnnotations());
      GrStubUtils.writeNullableString(dataStream, stub.getTypeText());
    }

    @NotNull
    @Override
    public GrParameterStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException {
      final StringRef name = dataStream.readName();
      final String[] annotations = GrStubUtils.readStringArray(dataStream);
      final String typeText = GrStubUtils.readNullableString(dataStream);
      return new GrParameterStub(parentStub, name, annotations, typeText);
    }
  };

  EmptyStubElementType CLASS_BODY = new EmptyStubElementType("class block",
                                                                                                         GroovyLanguage.INSTANCE) {
      @Override
      public GrTypeDefinitionBody createPsi(@NotNull EmptyStub stub) {
        return new GrTypeDefinitionBodyBase.GrClassBody(stub);
      }
    };

  EmptyStubElementType ENUM_BODY = new EmptyStubElementType("enum block",
                                                                                                        GroovyLanguage.INSTANCE) {
    @Override
    public GrEnumDefinitionBody createPsi(@NotNull EmptyStub stub) {
      return new GrTypeDefinitionBodyBase.GrEnumBody(stub);
    }
  };
  //statements
  GroovyElementType IF_STATEMENT = new GroovyElementType("if statement");
  GroovyElementType FOR_STATEMENT = new GroovyElementType("for statement");

  GroovyElementType WHILE_STATEMENT = new GroovyElementType("while statement");
  // switch dtatement
  GroovyElementType SWITCH_STATEMENT = new GroovyElementType("switch statement");
  GroovyElementType CASE_SECTION = new GroovyElementType("case block");

  GroovyElementType CASE_LABEL = new GroovyElementType("case label");
  //for clauses
  GroovyElementType FOR_IN_CLAUSE = new GroovyElementType("IN clause");

  GroovyElementType FOR_TRADITIONAL_CLAUSE = new GroovyElementType("Traditional clause");
  GroovyElementType TRY_BLOCK_STATEMENT = new GroovyElementType("try block statement");
  GroovyElementType CATCH_CLAUSE = new GroovyElementType("catch clause");
  GroovyElementType FINALLY_CLAUSE = new GroovyElementType("finally clause");
  GroovyElementType SYNCHRONIZED_STATEMENT = new GroovyElementType("synchronized block statement");
  GroovyElementType CLASS_INITIALIZER = new GroovyElementType("static compound statement");

  EmptyStubElementType VARIABLE_DEFINITION_ERROR = new EmptyStubElementType("variable definitions with errors",
                                                                                                                          GroovyLanguage.INSTANCE) {
    @Override
    public boolean shouldCreateStub(ASTNode node) {
      return false;
    }

    @Override
    public GrVariableDeclaration createPsi(@NotNull EmptyStub stub) {
      throw new UnsupportedOperationException("Not implemented");
    }
  };
  EmptyStubElementType VARIABLE_DEFINITION =
    new EmptyStubElementType("variable definitions", GroovyLanguage.INSTANCE) {
      @Override
      public GrVariableDeclaration createPsi(@NotNull EmptyStub stub) {
        return new GrVariableDeclarationImpl(stub);
      }
    };
  GroovyElementType TUPLE_DECLARATION = new GroovyElementType("tuple declaration");
  GroovyElementType TUPLE_EXPRESSION = new GroovyElementType("tuple expression");

  GroovyElementType VARIABLE = new GroovyElementType("assigned variable");

  //modifiers
  GrStubElementType MODIFIERS = new GrModifierListElementType("modifier list");

  GroovyElementType BALANCED_BRACKETS = new GroovyElementType("balanced brackets"); //node

  //types
  GroovyElementType CLASS_TYPE_ELEMENT = new GroovyElementType("class type element"); //node
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy