1 /*
  2  * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  */
 23 package org.openjdk.asmtools.jdis;
 24 
 25 public class Indenter {
 26 
 27     private int indentLength;
 28 
 29     public Indenter(int indentLength) {
 30         this.indentLength = indentLength;
 31     }
 32 
 33     public Indenter() {
 34         this.indentLength = Options.BODY_INDENT;
 35     }
 36     /**
 37      * Returns current indentation length.
 38      *
 39      * @return current indentation length.
 40      */
 41     public int indent() {
 42         return indentLength;
 43     }
 44 
 45     /**
 46      * Increases indentation length.
 47      *
 48      * @param indentLength new indent length
 49      *
 50      * @throws IllegalArgumentException if indentLength is negative.
 51      */
 52     public Indenter setIndent(int indentLength) {
 53         if (indentLength < 0) {
 54             throw new IllegalArgumentException("indent length can't be negative");
 55         }
 56         this.indentLength = indentLength;
 57         return this;
 58     }
 59 
 60     /**
 61      * Increases indentation length.
 62      *
 63      * @param increase length to increase by.
 64      *
 65      * @throws IllegalArgumentException if increase is negative.
 66      */
 67     public Indenter increaseIndent(int increase) {
 68         if (increase < 0) {
 69             throw new IllegalArgumentException("indent length can't be negative");
 70         }
 71         setIndent(indent() + increase);
 72         return this;
 73     }
 74 
 75     /**
 76      * Decreases indentation length.
 77      *
 78      * @param decrease length to decrease by
 79      *
 80      * @throws IllegalArgumentException if decrease is negative, or if decrease is greater than
 81      *                                  {@link #indent() current indentation length}.
 82      */
 83     public Indenter decreaseIndent(int decrease) {
 84         if (decrease < 0) {
 85             throw new IllegalArgumentException("decrease can't be negative");
 86         }
 87         setIndent(indent() - decrease);
 88         return this;
 89     }
 90 
 91     /**
 92      * Creates indent string based on current indent size.
 93      */
 94     public String getIndentString() {
 95         StringBuilder sb = new StringBuilder();
 96         for (int i = 0; i < indent(); i++) {
 97             sb.append(' ');
 98         }
 99         return sb.toString();
100     }
101 }