parseClassElement_(derivedClass) {
    let start = this.getTreeStartLocation_();

    let annotations = this.parseAnnotations_();
    let type = peekType();
    let isStatic = false, functionKind = null;
    switch (type) {
      case STATIC: {
        let staticToken = nextToken();
        type = peekType();
        switch (type) {
          case OPEN_PAREN: {
            let location = this.getTreeLocation_(start);
            let name = new LiteralPropertyName(location, staticToken);
            let fs = this.pushFunctionState_(FUNCTION_STATE_METHOD);
            let m = this.parseMethod_(start, isStatic, functionKind, name,
                                      annotations);
            this.popFunctionState_(fs);
            return m;
          }
          default:
            isStatic = true;
            if (type === STAR && this.options_.generators)
              return this.parseGeneratorMethod_(start, true, annotations);

            return this.parseClassElement2_(start, isStatic, annotations,
                                            derivedClass);
        }
        break;
      }

      case STAR:
        return this.parseGeneratorMethod_(start, isStatic, annotations);

      default:
        return this.parseClassElement2_(start, isStatic, annotations,
                                        derivedClass);
    }
  }
ClassElement :
  static MethodDefinition
  MethodDefinition

MethodDefinition :
  PropertyName ( FormalParameterList ) { FunctionBody }
  * PropertyName ( FormalParameterList ) { FunctionBody }
  get PropertyName ( ) { FunctionBody }
  set PropertyName ( PropertySetParameterList ) { FunctionBody }