package org.mutabilitydetector;
/*
* #%L
* MutabilityDetector
* %%
* Copyright (C) 2008 - 2014 Graham Allan
* %%
* 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.
* #L%
*/
import org.junit.Ignore;
import org.mutabilitydetector.asmoverride.AsmVerifierFactory;
import org.mutabilitydetector.asmoverride.ClassLoadingVerifierFactory;
import org.mutabilitydetector.checkers.AsmMutabilityChecker;
import org.mutabilitydetector.checkers.CheckerResult;
import org.mutabilitydetector.checkers.CheckerRunner;
import org.mutabilitydetector.checkers.info.AnalysisDatabase;
import org.mutabilitydetector.checkers.info.InformationRetrievalRunner;
import org.mutabilitydetector.checkers.info.TypeInformationRetriever;
import org.mutabilitydetector.classloading.AnalysisClassLoader;
import org.mutabilitydetector.classloading.CachingAnalysisClassLoader;
import org.mutabilitydetector.classloading.ClassForNameWrapper;
import org.mutabilitydetector.locations.ClassIdentifier;
import org.mutabilitydetector.locations.CodeLocation;
import org.mutabilitydetector.locations.CodeLocation.ClassLocation;
import org.mutabilitydetector.locations.Dotted;
import org.mutabilitydetector.unittesting.internal.ReasonsFormatter;
import java.util.Collection;
import static java.util.Collections.singleton;
import static org.mutabilitydetector.Configurations.OUT_OF_THE_BOX_CONFIGURATION;
import static org.mutabilitydetector.MutabilityReason.NULL_REASON;
import static org.mutabilitydetector.MutableReasonDetail.newMutableReasonDetail;
import static org.mutabilitydetector.checkers.CheckerRunner.ExceptionPolicy.FAIL_FAST;
import static org.mutabilitydetector.checkers.CheckerRunner.createWithCurrentClasspath;
import static org.mutabilitydetector.checkers.info.AnalysisDatabase.newAnalysisDatabase;
import static org.mutabilitydetector.locations.Dotted.fromClass;
@Ignore
public class TestUtil {
public static AnalysisResult getAnalysisResult(Class<?> toAnalyse) {
return testAnalysisSession().resultFor(fromClass(toAnalyse));
}
public static AnalysisSession testAnalysisSession() {
return DefaultCachingAnalysisSession.createWithCurrentClassPath(OUT_OF_THE_BOX_CONFIGURATION);
}
public static String formatReasons(Collection<MutableReasonDetail> reasons) {
return ReasonsFormatter.formatReasons(reasons);
}
public static Collection<MutableReasonDetail> unusedMutableReasonDetails() {
return singleton(unusedMutableReasonDetail());
}
public static MutableReasonDetail unusedMutableReasonDetail() {
return newMutableReasonDetail("this reason is not meant to be involved",
ClassLocation.fromInternalName("some made up class name"),
NULL_REASON);
}
public static AnalysisResult runChecker(AsmMutabilityChecker checker, Class<?> toAnalyse) {
AnalysisSession analysisSession = testAnalysisSession();
CheckerResult result = CheckerRunner.createWithCurrentClasspath(FAIL_FAST).run(checker, fromClass(toAnalyse), analysisSession.getResults());
return AnalysisResult.analysisResult(fromClass(toAnalyse), result.isImmutable, result.reasons);
}
public static InformationRetrievalRunner sessionCheckerRunner() {
return new InformationRetrievalRunner(testAnalysisSession(), createWithCurrentClasspath(FAIL_FAST));
}
public static void retrieveInformation(TypeInformationRetriever checker, Class<?> toAnalyse) {
TestUtil.sessionCheckerRunner().run(checker, ClassIdentifier.forClass(fromClass(toAnalyse)));
}
public static AnalysisDatabase analysisDatabase() {
return newAnalysisDatabase(sessionCheckerRunner());
}
public static AnalysisResult unusedAnalysisResult(Dotted className, IsImmutable isImmutable) {
return AnalysisResult.analysisResult(className, isImmutable, unusedMutableReasonDetails());
}
public static CodeLocation<?> unusedCodeLocation() {
return ClassLocation.fromInternalName("this is an unused code location");
}
public static Reason unusedReason() {
return MutabilityReason.NULL_REASON;
}
public static AnalysisClassLoader testingAnalysisClassLoader() {
return new CachingAnalysisClassLoader(new ClassForNameWrapper());
}
public static AsmVerifierFactory testingVerifierFactory() {
return new ClassLoadingVerifierFactory(testingAnalysisClassLoader());
}
}