/*
 * Copyright (c) 2014 Google Inc.
 *
 * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
 * Public License v1.0 which accompanies this distribution, and is available at
 *
 * http://www.eclipse.org/legal/epl-v10.html
 */
package com.google.eclipse.protobuf.parser;

import com.google.eclipse.protobuf.protobuf.impl.ProtobufImpl;

/**
 * Represents an unknown syntax protocol buffer, which is ignored by the editor.
 *
 * @author alruiz@google.com (Alex Ruiz)
 */
public class UnknownSyntaxProtobuf extends ProtobufImpl {

  /**
   * Creates a new <code>{@link UnknownSyntaxProtobuf}</code>.
   */
  public UnknownSyntaxProtobuf() {}
}
