/**
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
* and/or other contributors as indicated by the @authors tag. See the
* copyright.txt file in the distribution for a full listing of all
* contributors.
*
* Licensed 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.mapstruct.ap.testutil.compilation.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.tools.Diagnostic;
import javax.tools.Diagnostic.Kind;
import javax.tools.JavaFileObject;
import org.codehaus.plexus.compiler.CompilerMessage;
import org.codehaus.plexus.compiler.CompilerResult;
import org.mapstruct.ap.testutil.compilation.annotation.CompilationResult;
import org.mapstruct.ap.testutil.compilation.annotation.ExpectedCompilationOutcome;
/**
* Represents the outcome of a compilation.
*
* @author Gunnar Morling
*/
public class CompilationOutcomeDescriptor {
private CompilationResult compilationResult;
private List<DiagnosticDescriptor> diagnostics;
private CompilationOutcomeDescriptor(CompilationResult compilationResult,
List<DiagnosticDescriptor> diagnostics) {
this.compilationResult = compilationResult;
this.diagnostics = diagnostics;
}
public static CompilationOutcomeDescriptor forExpectedCompilationResult(
ExpectedCompilationOutcome expectedCompilationResult) {
if ( expectedCompilationResult == null ) {
return new CompilationOutcomeDescriptor(
CompilationResult.SUCCEEDED,
Collections.<DiagnosticDescriptor>emptyList()
);
}
else {
List<DiagnosticDescriptor> diagnosticDescriptors = new ArrayList<DiagnosticDescriptor>();
for ( org.mapstruct.ap.testutil.compilation.annotation.Diagnostic diagnostic :
expectedCompilationResult.diagnostics() ) {
diagnosticDescriptors.add( DiagnosticDescriptor.forDiagnostic( diagnostic ) );
}
return new CompilationOutcomeDescriptor( expectedCompilationResult.value(), diagnosticDescriptors );
}
}
public static CompilationOutcomeDescriptor forResult(String sourceDir, boolean compilationSuccessful,
List<Diagnostic<? extends JavaFileObject>> diagnostics) {
CompilationResult compilationResult =
compilationSuccessful ? CompilationResult.SUCCEEDED : CompilationResult.FAILED;
List<DiagnosticDescriptor> diagnosticDescriptors = new ArrayList<DiagnosticDescriptor>();
for ( Diagnostic<? extends JavaFileObject> diagnostic : diagnostics ) {
//ignore notes created by the compiler
if ( diagnostic.getKind() != Kind.NOTE ) {
diagnosticDescriptors.add( DiagnosticDescriptor.forDiagnostic( sourceDir, diagnostic ) );
}
}
return new CompilationOutcomeDescriptor( compilationResult, diagnosticDescriptors );
}
public static CompilationOutcomeDescriptor forResult(String sourceDir, CompilerResult compilerResult) {
CompilationResult compilationResult =
compilerResult.isSuccess() ? CompilationResult.SUCCEEDED : CompilationResult.FAILED;
List<DiagnosticDescriptor> diagnosticDescriptors = new ArrayList<DiagnosticDescriptor>();
for ( CompilerMessage message : compilerResult.getCompilerMessages() ) {
if ( message.getKind() != CompilerMessage.Kind.NOTE ) {
diagnosticDescriptors.add( DiagnosticDescriptor.forCompilerMessage( sourceDir, message ) );
}
}
return new CompilationOutcomeDescriptor( compilationResult, diagnosticDescriptors );
}
public CompilationResult getCompilationResult() {
return compilationResult;
}
public List<DiagnosticDescriptor> getDiagnostics() {
return diagnostics;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime
* result
+ ( ( compilationResult == null ) ? 0 : compilationResult
.hashCode() );
result = prime * result
+ ( ( diagnostics == null ) ? 0 : diagnostics.hashCode() );
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj ) {
return true;
}
if ( obj == null ) {
return false;
}
if ( getClass() != obj.getClass() ) {
return false;
}
CompilationOutcomeDescriptor other = (CompilationOutcomeDescriptor) obj;
if ( compilationResult != other.compilationResult ) {
return false;
}
if ( diagnostics == null ) {
if ( other.diagnostics != null ) {
return false;
}
}
else if ( !diagnostics.equals( other.diagnostics ) ) {
return false;
}
return true;
}
@Override
public String toString() {
return "CompilationResultDescriptor [compilationResult="
+ compilationResult + ", diagnostics=" + diagnostics + "]";
}
}