View Javadoc
1   /*
2    * SPDX-License-Identifier: LGPL-2.1-or-later
3    * See LICENSE file for details.
4    *
5    * Copyright 2012-2026 Hazendaz.
6    */
7   package net.alchim31.maven.yuicompressor;
8   
9   import java.io.File;
10  
11  import org.apache.maven.plugin.logging.Log;
12  import org.codehaus.plexus.build.BuildContext;
13  import org.mozilla.javascript.ErrorReporter;
14  import org.mozilla.javascript.EvaluatorException;
15  
16  /**
17   * The Class ErrorReporter4Mojo.
18   */
19  public class ErrorReporter4Mojo implements ErrorReporter {
20  
21      /** The default filename. */
22      private String defaultFilename;
23  
24      /** The accept warn. */
25      private boolean acceptWarn;
26  
27      /** The log. */
28      private Log log;
29  
30      /** The warning cnt. */
31      private int warningCnt;
32  
33      /** The error cnt. */
34      private int errorCnt;
35  
36      /** The build context. */
37      private BuildContext buildContext;
38  
39      /** The source file. */
40      private File sourceFile;
41  
42      /**
43       * Instantiates a new error reporter 4 mojo.
44       *
45       * @param log
46       *            the log
47       * @param jswarn
48       *            the jswarn
49       * @param buildContext
50       *            the build context
51       */
52      public ErrorReporter4Mojo(Log log, boolean jswarn, BuildContext buildContext) {
53          this.log = log;
54          this.acceptWarn = jswarn;
55          this.buildContext = buildContext;
56      }
57  
58      /**
59       * Sets the default file name.
60       *
61       * @param v
62       *            the new default file name
63       */
64      public void setDefaultFileName(String v) {
65          if (v.length() == 0) {
66              v = null;
67          }
68          defaultFilename = v;
69      }
70  
71      /**
72       * Gets the error cnt.
73       *
74       * @return the error cnt
75       */
76      public int getErrorCnt() {
77          return errorCnt;
78      }
79  
80      /**
81       * Gets the warning cnt.
82       *
83       * @return the warning cnt
84       */
85      public int getWarningCnt() {
86          return warningCnt;
87      }
88  
89      @Override
90      public void error(String message, String sourceName, int line, String lineSource, int lineOffset) {
91          String fullMessage = newMessage(message, sourceName, line, lineSource, lineOffset);
92          buildContext.addMessage(sourceFile, line, lineOffset, message, BuildContext.SEVERITY_ERROR, null);
93          log.error(fullMessage);
94          errorCnt++;
95      }
96  
97      @Override
98      public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource,
99              int lineOffset) {
100         error(message, sourceName, line, lineSource, lineOffset);
101         throw new EvaluatorException(message, sourceName, line, lineSource, lineOffset);
102     }
103 
104     @Override
105     public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) {
106         if (acceptWarn) {
107             String fullMessage = newMessage(message, sourceName, line, lineSource, lineOffset);
108             buildContext.addMessage(sourceFile, line, lineOffset, message, BuildContext.SEVERITY_WARNING, null);
109             log.warn(fullMessage);
110             warningCnt++;
111         }
112     }
113 
114     /**
115      * New message.
116      *
117      * @param message
118      *            the message
119      * @param sourceName
120      *            the source name
121      * @param line
122      *            the line
123      * @param lineSource
124      *            the line source
125      * @param lineOffset
126      *            the line offset
127      *
128      * @return the string
129      */
130     private String newMessage(String message, String sourceName, int line, String lineSource, int lineOffset) {
131         StringBuilder back = new StringBuilder();
132         if (sourceName == null || sourceName.length() == 0) {
133             sourceName = defaultFilename;
134         }
135         if (sourceName != null) {
136             back.append(sourceName).append(":line ").append(line).append(":column ").append(lineOffset).append(':');
137         }
138         if (message != null && message.length() != 0) {
139             back.append(message);
140         } else {
141             back.append("unknown error");
142         }
143         if (lineSource != null && lineSource.length() != 0) {
144             back.append("\n\t").append(lineSource);
145         }
146         return back.toString();
147     }
148 
149     /**
150      * Sets the file.
151      *
152      * @param file
153      *            the new file
154      */
155     public void setFile(File file) {
156         sourceFile = file;
157     }
158 
159 }