revert compiler-message to receive only one file
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / messages / CompilerMessage.java
1 /*
2  * Copyright 2000-2012 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.jps.incremental.messages;
17
18 import com.intellij.openapi.util.text.StringUtil;
19 import org.jetbrains.annotations.NotNull;
20 import org.jetbrains.annotations.Nullable;
21
22 import java.io.ByteArrayOutputStream;
23 import java.io.File;
24 import java.io.PrintStream;
25
26 /**
27  * @author Eugene Zhuravlev
28  *         Date: 9/29/11
29  */
30 public class CompilerMessage extends BuildMessage {
31
32   private final String myCompilerName;
33   private final long myProblemBeginOffset;
34   private final long myProblemEndOffset;
35   private final long myProblemLocationOffset;
36   private final String mySourcePath;
37   private final long myLine;
38   private final long myColumn;
39
40   public CompilerMessage(@NotNull String compilerName, @NotNull Throwable internalError) {
41     this(compilerName, Kind.ERROR, getTextFromThrowable(internalError), null, -1L, -1L, -1L, -1L, -1L);
42   }
43
44   public CompilerMessage(@NotNull String compilerName, Kind kind, String messageText) {
45     this(compilerName, kind, messageText, null, -1L, -1L, -1L, -1L, -1L);
46   }
47
48   public CompilerMessage(@NotNull String compilerName, Kind kind, String messageText, String sourcePath) {
49     this(compilerName, kind, messageText, sourcePath, -1L, -1L, -1L, -1L, -1L);
50   }
51
52   public CompilerMessage(@NotNull String compilerName, Kind kind, String messageText,
53                          @Nullable String sourcePath,
54                          long problemBeginOffset,
55                          long problemEndOffset,
56                          long problemLocationOffset,
57                          long locationLine,
58                          long locationColumn) {
59     super(messageText, kind);
60     myCompilerName = compilerName;
61     myProblemBeginOffset = problemBeginOffset;
62     myProblemEndOffset = problemEndOffset;
63     myProblemLocationOffset = problemLocationOffset;
64     mySourcePath = sourcePath != null && !sourcePath.isEmpty()? sourcePath.replace(File.separatorChar, '/') : null;
65     myLine = locationLine;
66     myColumn = locationColumn;
67   }
68
69   @NotNull
70   public String getCompilerName() {
71     return myCompilerName;
72   }
73
74   @Nullable
75   public String getSourcePath() {
76     return mySourcePath;
77   }
78
79   public long getLine() {
80     return myLine;
81   }
82
83   public long getColumn() {
84     return myColumn;
85   }
86
87   public long getProblemBeginOffset() {
88     return myProblemBeginOffset;
89   }
90
91   public long getProblemEndOffset() {
92     return myProblemEndOffset;
93   }
94
95   public long getProblemLocationOffset() {
96     return myProblemLocationOffset;
97   }
98
99   public String toString() {
100     final StringBuilder builder = new StringBuilder();
101     builder.append(getCompilerName()).append(":").append(getKind().name()).append(":").append(super.toString());
102     final String path = getSourcePath();
103     if (path != null) {
104       builder.append("; file: ").append(path);
105       final long line = getLine();
106       final long column = getColumn();
107       if (line >= 0 && column >= 0) {
108         builder.append(" at (").append(line).append(":").append(column).append(")");
109       }
110     }
111     return builder.toString();
112   }
113
114   public static String getTextFromThrowable(Throwable internalError) {
115     StringBuilder text = new StringBuilder();
116     text.append("Error: ");
117     final String msg = internalError.getMessage();
118     if (!StringUtil.isEmptyOrSpaces(msg)) {
119       text.append(msg);
120     }
121     else {
122       text.append(internalError.getClass().getName());
123     }
124     text.append("\n");
125
126     final ByteArrayOutputStream out = new ByteArrayOutputStream();
127     internalError.printStackTrace(new PrintStream(out));
128     text.append(out.toString());
129
130     return text.toString();
131   }
132
133 }