001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.jci.compilers;
019
020 import org.apache.commons.jci.problems.CompilationProblem;
021 import org.codehaus.groovy.control.messages.ExceptionMessage;
022 import org.codehaus.groovy.control.messages.Message;
023 import org.codehaus.groovy.control.messages.SimpleMessage;
024 import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
025 import org.codehaus.groovy.syntax.SyntaxException;
026
027 /**
028 * Groovy version of a CompilationProblem
029 *
030 * @author tcurdt
031 */
032 public final class GroovyCompilationProblem implements CompilationProblem {
033
034 private final String fileName;
035 private final String message;
036 private final boolean error;
037 private final int startLine;
038 private final int startColumn;
039 private final int endLine;
040 private final int endColumn;
041
042 public GroovyCompilationProblem(final Message pMessage) {
043 if (pMessage instanceof SimpleMessage) {
044 error = false;
045 } else {
046 error = true;
047 }
048 if (pMessage instanceof SyntaxErrorMessage) {
049 SyntaxErrorMessage syntaxErrorMessage = (SyntaxErrorMessage)pMessage;
050 SyntaxException syntaxException = syntaxErrorMessage.getCause();
051 message = syntaxException.getMessage();
052 fileName = syntaxException.getSourceLocator();
053 // FIXME: getStartLine() vs. getLine()
054 startLine = syntaxException.getStartLine();
055 startColumn = syntaxException.getStartColumn();
056 endLine = syntaxException.getLine();
057 endColumn = syntaxException.getEndColumn();
058 } else {
059 fileName = "";
060 startLine = 0;
061 startColumn = 0;
062 endLine = 0;
063 endColumn = 0;
064 if (pMessage instanceof ExceptionMessage) {
065 message = ((ExceptionMessage)pMessage).getCause().getMessage();
066 } else if (pMessage instanceof SimpleMessage) {
067 message = ((SimpleMessage)pMessage).getMessage();
068 } else {
069 message = pMessage.toString();
070 }
071 }
072 }
073
074 public boolean isError() {
075 return error;
076 }
077
078 public String getFileName() {
079 return fileName;
080 }
081
082 public int getStartLine() {
083 return startLine;
084 }
085
086 public int getStartColumn() {
087 return startColumn;
088 }
089
090 public int getEndLine() {
091 return endLine;
092 }
093
094 public int getEndColumn() {
095 return endColumn;
096 }
097
098 public String getMessage() {
099 return message;
100 }
101
102 @Override
103 public String toString() {
104 return getMessage();
105 }
106
107 }