blob: d7363ce8dc621ce37537e3afaa80c2731a5c0d46 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.myfaces.extensions.scripting.api;
import java.util.ArrayList;
import java.util.List;
/**
* <p>Contains all information regarding the result of a particular compilation process.</p>
*/
public class CompilationResult {
/**
* The compiler output, i.e. simply everything that the compiler would usually
* print to the console, if you executed the same process on the command line
* instead.
*/
private String _compilerOutput;
/**
* A list of error messages that the compiler has produced. Note that if there
* are no error messages, it's safe to assume that compilation succeeded.
*/
private List<CompilationMessage> _errors;
/**
* A list of warnings that the compiler has produced.
*/
private List<CompilationMessage> _warnings;
// ------------------------------------------ Constructors
/**
* <p>Constructs a new compilation result object using the compiler output. However,
* note that this constructor doesn't attempt to parse the compiler output to get the
* error messages and warnings. You'll have to register those messages yourself
* afterwards.</p>
*
* @param compilerOutput the compiler output, i.e. simply everything that the compiler would
* usually print to the console, if you executed the same process on
* the command line instead
*/
public CompilationResult(String compilerOutput) {
this._compilerOutput = compilerOutput;
this._errors = new ArrayList<CompilationMessage>();
this._warnings = new ArrayList<CompilationMessage>();
}
// ------------------------------------------ Public methods
/**
* <p>Returns the compiler output, i.e. simply everything that the compiler would usually
* print to the console, if you executed the same process on the command line
* instead.</p>
*
* @return the compiler output
*/
public String getCompilerOutput() {
return _compilerOutput;
}
/**
* <p>Determines whether any error messages have been registered, i.e. whether compilation
* was successful.</p>
*
* @return <code>true</code if no error messages have been registered, i.e. if compilation
* was sucessful; <code>false</code> otherwise
*/
public boolean hasErrors() {
return !_errors.isEmpty();
}
/**
* <p>Registers the given message as an error message.</p>
*
* @param message the error message you want to register
*/
public void registerError(CompilationMessage message) {
if (message != null) {
_errors.add(message);
}
}
/**
* <p>Returns a list of error messages that the compiler has produced,
* i.e. the error messages that have been registered previously.</p>
*
* @return a list of error messages
*/
public List<CompilationMessage> getErrors() {
return _errors;
}
/**
* <p>Registers the given message as a warning. You can register as many warnings as you want
* and it won't affect whether compilation was sucessful or not.</p>
*
* @param message the warning you want to register
*/
public void registerWarning(CompilationMessage message) {
if (message != null) {
_warnings.add(message);
}
}
/**
* <p>Returns a list of warnings that the compiler has produced,
* i.e. the warnings that have been registered previously.</p>
*
* @return a list of warnings
*/
public List<CompilationMessage> getWarnings() {
return _warnings;
}
// ------------------------------------------ Public static classes
/**
* <p>Utility class that contains all the required information regarding
* a single compilation message.</p>
*/
public static class CompilationMessage {
/**
* the line number of this compilation message
*/
private long lineNumber;
/**
* the actual compilation message
*/
private String message;
// -------------------------------------- Constructors
/**
* <p>Constructs a new compilation message using the line number
* and the actual compilation message as a string.</p>
*
* @param lineNumber the line number
* @param message the actual compilation message
*/
public CompilationMessage(long lineNumber, String message) {
this.lineNumber = lineNumber;
this.message = message;
}
// -------------------------------------- Public methods
/**
* <p>The number of the relevant line where this warning or error
* has occured, or <code>-1</code> if it is not known.</p>
*
* @return the line number
*/
public long getLineNumber() {
return lineNumber;
}
/**
* <p>Returns the message itself as a string, i.e. the textual content
* of whatever the compiler complained about.</p>
*
* @return the message itself as a string
*/
public String getMessage() {
return message;
}
/**
* <p>Returns a string representation of this compilation message.</p>
*
* @return a string representation of this compilation message
*/
@Override
public String toString() {
return String.format(
"CompilationMessage[lineNumber='%s', message='%s']", lineNumber, message);
}
}
}