<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
  -->

<!-- This file could be imported in IDEA for correct code-style -->
<code_scheme name="hugegraph-style" version="173">
  <option name="LINE_SEPARATOR" value="&#xA;" />
  <option name="RIGHT_MARGIN" value="100" />
  <option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="true" />
  <option name="SOFT_MARGINS" value="100" />
  <JavaCodeStyleSettings>
    <option name="JD_P_AT_EMPTY_LINES" value="true" />
    <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" />
    <option name="ANNOTATION_PARAMETER_WRAP" value="1" />
    <option name="ALIGN_MULTILINE_ANNOTATION_PARAMETERS" value="true" />
    <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="100" />
    <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="100" />
    <option name="IMPORT_LAYOUT_TABLE">
      <value>
        <package name="" withSubpackages="true" static="true" />
        <emptyLine />
        <package name="java" withSubpackages="true" static="false" />
        <emptyLine />
        <package name="javax" withSubpackages="true" static="false" />
        <emptyLine />
        <package name="org" withSubpackages="true" static="false" />
        <emptyLine />
        <package name="com" withSubpackages="true" static="false" />
        <emptyLine />
        <package name="" withSubpackages="true" static="false" />
      </value>
    </option>
  </JavaCodeStyleSettings>
  <codeStyleSettings language="JAVA">
    <option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" />
    <option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
    <option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
    <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
    <option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
    <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
    <option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
    <option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
    <option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
    <option name="CALL_PARAMETERS_WRAP" value="1" />
    <option name="METHOD_PARAMETERS_WRAP" value="1" />
    <option name="RESOURCE_LIST_WRAP" value="1" />
    <option name="EXTENDS_LIST_WRAP" value="1" />
    <option name="THROWS_LIST_WRAP" value="1" />
    <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
    <option name="BINARY_OPERATION_WRAP" value="1" />
    <option name="TERNARY_OPERATION_WRAP" value="1" />
    <option name="FOR_STATEMENT_WRAP" value="1" />
    <option name="ARRAY_INITIALIZER_WRAP" value="1" />
    <option name="ASSIGNMENT_WRAP" value="1" />
    <option name="ASSERT_STATEMENT_WRAP" value="1" />
    <option name="IF_BRACE_FORCE" value="1" />
    <option name="DOWHILE_BRACE_FORCE" value="3" />
    <option name="WHILE_BRACE_FORCE" value="1" />
    <option name="FOR_BRACE_FORCE" value="1" />
    <option name="WRAP_LONG_LINES" value="true" />
    <option name="PARAMETER_ANNOTATION_WRAP" value="1" />
    <option name="ENUM_CONSTANTS_WRAP" value="2" />
    <option name="WRAP_ON_TYPING" value="1" />
    <option name="SOFT_MARGINS" value="100" />
    <option name="RIGHT_MARGIN" value="100" />
    <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
    <option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" value="1" />
    <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
    <option name="BLANK_LINES_AROUND_CLASS" value="1" />
    <option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
    <indentOptions>
      <option name="SMART_TABS" value="true" />
    </indentOptions>
  </codeStyleSettings>
  <codeStyleSettings language="XML">
    <option name="RIGHT_MARGIN" value="120" />
    <option name="WRAP_ON_TYPING" value="1" />
    <option name="SOFT_MARGINS" value="120" />
  </codeStyleSettings>
  <XML>
    <option name="XML_TEXT_WRAP" value="0" />
    <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
    <option name="XML_SPACE_INSIDE_EMPTY_TAG" value="true" />
  </XML>
  <Properties>
    <option name="KEEP_BLANK_LINES" value="true" />
  </Properties>
  <codeStyleSettings language="yaml">
    <option name="SPACE_WITHIN_BRACKETS" value="false" />
    <option name="SPACE_WITHIN_BRACES" value="false" />
  </codeStyleSettings>
</code_scheme>
