langtools/src/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java
author briangoetz
Wed, 18 Dec 2013 16:05:18 -0500
changeset 22163 3651128c74eb
parent 20249 93f8eae31092
permissions -rw-r--r--
8030244: Update langtools to use Diamond Reviewed-by: darcy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     1
/*
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
     2
 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     4
 *
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    10
 *
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    15
 * accompanied this code).
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    16
 *
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    20
 *
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    23
 * questions.
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    24
 */
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    25
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    26
package com.sun.tools.javac.code;
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    27
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    28
import java.util.HashMap;
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    29
import java.util.Map;
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    30
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    31
import com.sun.tools.javac.tree.EndPosTable;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    32
import com.sun.tools.javac.tree.JCTree;
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    33
import com.sun.tools.javac.util.Assert;
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    34
import com.sun.tools.javac.util.Context;
14258
8d2148961366 8000663: clean up langtools imports
jjg
parents: 8236
diff changeset
    35
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    36
import com.sun.tools.javac.util.ListBuffer;
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    37
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    38
/**
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    39
 *
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    40
 * <p><b>This is NOT part of any supported API.
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    41
 * If you write code that depends on this, you do so at your own risk.
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    42
 * This code and its internal interfaces are subject to change or
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    43
 * deletion without notice.</b>
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    44
 */
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    45
public class DeferredLintHandler {
22163
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 20249
diff changeset
    46
    protected static final Context.Key<DeferredLintHandler> deferredLintHandlerKey = new Context.Key<>();
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    47
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    48
    public static DeferredLintHandler instance(Context context) {
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    49
        DeferredLintHandler instance = context.get(deferredLintHandlerKey);
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    50
        if (instance == null)
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    51
            instance = new DeferredLintHandler(context);
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    52
        return instance;
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    53
    }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    54
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    55
    protected DeferredLintHandler(Context context) {
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    56
        context.put(deferredLintHandlerKey, this);
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    57
        this.currentPos = IMMEDIATE_POSITION;
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    58
    }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    59
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    60
    /**An interface for deferred lint reporting - loggers passed to
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    61
     * {@link #report(LintLogger) } will be called when
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    62
     * {@link #flush(DiagnosticPosition) } is invoked.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    63
     */
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    64
    public interface LintLogger {
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    65
        void report();
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    66
    }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    67
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    68
    private DiagnosticPosition currentPos;
22163
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 20249
diff changeset
    69
    private Map<DiagnosticPosition, ListBuffer<LintLogger>> loggersQueue = new HashMap<>();
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    70
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    71
    /**Associate the given logger with the current position as set by {@link #setPos(DiagnosticPosition) }.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    72
     * Will be invoked when {@link #flush(DiagnosticPosition) } will be invoked with the same position.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    73
     * <br>
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    74
     * Will invoke the logger synchronously if {@link #immediate() } was called
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    75
     * instead of {@link #setPos(DiagnosticPosition) }.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    76
     */
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    77
    public void report(LintLogger logger) {
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    78
        if (currentPos == IMMEDIATE_POSITION) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    79
            logger.report();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    80
        } else {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    81
            ListBuffer<LintLogger> loggers = loggersQueue.get(currentPos);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    82
            if (loggers == null) {
20249
93f8eae31092 6386236: Please rename com.sun.tools.javac.util.ListBuffer.lb()
alundblad
parents: 19942
diff changeset
    83
                loggersQueue.put(currentPos, loggers = new ListBuffer<>());
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    84
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    85
            loggers.append(logger);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    86
        }
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    87
    }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    88
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    89
    /**Invoke all {@link LintLogger}s that were associated with the provided {@code pos}.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
    90
     */
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    91
    public void flush(DiagnosticPosition pos) {
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    92
        ListBuffer<LintLogger> loggers = loggersQueue.get(pos);
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    93
        if (loggers != null) {
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    94
            for (LintLogger lintLogger : loggers) {
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    95
                lintLogger.report();
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    96
            }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    97
            loggersQueue.remove(pos);
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    98
        }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
    99
    }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   100
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   101
    /**Sets the current position to the provided {@code currentPos}. {@link LintLogger}s
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   102
     * passed to subsequent invocations of {@link #report(LintLogger) } will be associated
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   103
     * with the given position.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   104
     */
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   105
    public DiagnosticPosition setPos(DiagnosticPosition currentPos) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   106
        DiagnosticPosition prevPosition = this.currentPos;
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   107
        this.currentPos = currentPos;
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   108
        return prevPosition;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   109
    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   110
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   111
    /**{@link LintLogger}s passed to subsequent invocations of
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   112
     * {@link #report(LintLogger) } will be invoked immediately.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   113
     */
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   114
    public DiagnosticPosition immediate() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   115
        return setPos(IMMEDIATE_POSITION);
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   116
    }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   117
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   118
    private static final DiagnosticPosition IMMEDIATE_POSITION = new DiagnosticPosition() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   119
        @Override
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   120
        public JCTree getTree() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   121
            Assert.error();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   122
            return null;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   123
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   124
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   125
        @Override
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   126
        public int getStartPosition() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   127
            Assert.error();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   128
            return -1;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   129
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   130
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   131
        @Override
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   132
        public int getPreferredPosition() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   133
            Assert.error();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   134
            return -1;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   135
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   136
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   137
        @Override
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   138
        public int getEndPosition(EndPosTable endPosTable) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   139
            Assert.error();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents: 14258
diff changeset
   140
            return -1;
8236
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   141
        }
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   142
    };
0d8646b7c602 6594914: @SuppressWarnings("deprecation") does not not work for the type of a variable
mcimadamore
parents:
diff changeset
   143
}