/*
 * Copyright (c) 2011, 2015 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.validation;

import org.eclipse.osgi.util.NLS;

/**
 * @author alruiz@google.com (Alex Ruiz)
 */
public class Messages extends NLS {
  public static String conflictingExtensions;
  public static String conflictingField;
  public static String conflictingGroup;
  public static String conflictingReservedName;
  public static String conflictingReservedNumber;
  public static String expectedFieldName;
  public static String expectedFieldNumber;
  public static String expectedIdentifier;
  public static String expectedInteger;
  public static String expectedNumber;
  public static String expectedPositiveNumber;
  public static String expectedString;
  public static String expectedSyntaxIdentifier;
  public static String expectedTrueOrFalse;
  public static String fieldNumbersMustBePositive;
  public static String importingUnsupportedSyntax;
  public static String importNotFound;
  public static String invalidMapKeyType;
  public static String invalidMapValueType;
  public static String literalNotInEnum;
  public static String mapWithModifier;
  public static String mapWithinTypeExtension;
  public static String missingFieldNumber;
  public static String missingModifier;
  public static String multiplePackages;
  public static String nameConflict;
  public static String oneofFieldWithModifier;
  public static String requiredInProto3;
  public static String reservedIndexAndName;
  public static String reservedToMax;
  public static String scopingError;
  public static String tagNumberRangeConflict;
  public static String tagNumberConflict;
  public static String unknownSyntax;
  public static String unrecognizedSyntaxIdentifier;

  static {
    Class<Messages> targetType = Messages.class;
    NLS.initializeMessages(targetType.getName(), targetType);
  }

  private Messages() {}
}
