package jetbrains.mps.make.facets;
/*Generated by MPS */
import jetbrains.mps.make.facet.IFacet;
import java.util.List;
import jetbrains.mps.make.facet.ITarget;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.make.resources.IPropertiesPersistence;
import jetbrains.mps.make.facet.ITargetEx2;
import jetbrains.mps.make.script.IJob;
import jetbrains.mps.make.script.IResult;
import jetbrains.mps.make.resources.IResource;
import jetbrains.mps.make.script.IJobMonitor;
import jetbrains.mps.make.resources.IPropertiesAccessor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.smodel.resources.TResource;
import java.util.Set;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.util.HashSet;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.project.SModuleOperations;
import jetbrains.mps.messages.IMessageHandler;
import jetbrains.mps.make.ErrorsLoggingHandler;
import org.apache.log4j.LogManager;
import jetbrains.mps.make.MPSCompilationResult;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import jetbrains.mps.make.ModuleMaker;
import jetbrains.mps.make.script.IFeedback;
import jetbrains.mps.make.script.IConfig;
import jetbrains.mps.baseLanguage.tuples.runtime.Tuples;
import jetbrains.mps.make.script.IPropertiesPool;
import jetbrains.mps.baseLanguage.tuples.runtime.MultiTuple;
import jetbrains.mps.compiler.JavaCompilerOptions;
import java.util.stream.IntStream;
import jetbrains.mps.RuntimeFlags;
import jetbrains.mps.internal.make.runtime.java.IdeaJavaCompiler;
import jetbrains.mps.make.CompilationResult;
import jetbrains.mps.project.Project;
import java.util.Map;
import jetbrains.mps.internal.collections.runtime.MapSequence;
public class JavaCompile_Facet extends IFacet.Stub {
private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>());
private IFacet.Name name = new IFacet.Name("jetbrains.mps.make.facets.JavaCompile");
public JavaCompile_Facet() {
ListSequence.fromList(targets).addElement(new JavaCompile_Facet.Target_compile());
ListSequence.fromList(targets).addElement(new JavaCompile_Facet.Target_auxCompile());
}
public Iterable<ITarget> targets() {
return targets;
}
public Iterable<IFacet.Name> optional() {
return Sequence.fromArray(new IFacet.Name[]{new IFacet.Name("jetbrains.mps.lang.resources.Binaries")});
}
public Iterable<IFacet.Name> required() {
return Sequence.fromArray(new IFacet.Name[]{new IFacet.Name("jetbrains.mps.lang.core.Generate"), new IFacet.Name("jetbrains.mps.lang.core.TextGen"), new IFacet.Name("jetbrains.mps.make.facets.Make")});
}
public Iterable<IFacet.Name> extended() {
return null;
}
public IFacet.Name getName() {
return this.name;
}
public IPropertiesPersistence propertiesPersistence() {
return new JavaCompile_Facet.TargetProperties();
}
public static class Target_compile implements ITargetEx2 {
private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.make.facets.JavaCompile.compile");
public Target_compile() {
}
public IJob createJob() {
return new IJob.Stub() {
@Override
public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) {
Iterable<IResource> _output_wf1ya0_a0a = null;
final Iterable<TResource> input = (Iterable<TResource>) (Iterable) rawInput;
switch (0) {
case 0:
if (Boolean.TRUE.equals(vars(pa.global()).skipCompilation())) {
_output_wf1ya0_a0a = Sequence.fromIterable(_output_wf1ya0_a0a).concat(Sequence.fromIterable(input));
return new IResult.SUCCESS(_output_wf1ya0_a0a);
}
vars(pa.global()).compiledAnything(false);
final Set<SModule> toCompile = SetSequence.fromSetWithValues(new HashSet<SModule>(), Sequence.fromIterable(input).select(new ISelector<TResource, SModule>() {
public SModule select(TResource it) {
return it.module();
}
}).where(new IWhereFilter<SModule>() {
public boolean accept(SModule it) {
return SModuleOperations.isCompileInMps(it);
}
}).distinct());
if (SetSequence.fromSet(toCompile).isEmpty()) {
return new IResult.SUCCESS(_output_wf1ya0_a0a);
}
// XXX it's odd to use dedicated ErrorsLoggingHandler provided ModuleMaker reports errors to log itself (in addition to IMessageHandler, see MessageSender). Do I need ELH here?
final IMessageHandler msgHandler = new ErrorsLoggingHandler(LogManager.getLogger(new IFacet.Name("jetbrains.mps.make.facets.JavaCompile").getName())).compose(monitor.getSession().getMessageHandler());
MPSCompilationResult cr = new ModelAccessHelper(monitor.getSession().getProject().getModelAccess()).runReadAction(new Computable<MPSCompilationResult>() {
public MPSCompilationResult compute() {
return new ModuleMaker(msgHandler).make(toCompile, progressMonitor, vars(pa.global()).options());
}
});
vars(pa.global()).compiledAnything(vars(pa.global()).compiledAnything() || cr.isCompiledAnything());
if (!(cr.isOk())) {
if (cr.getErrorsCount() > 0) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf(cr)));
} else if (cr.getWarningsCount() > 0) {
monitor.reportFeedback(new IFeedback.WARNING(String.valueOf(cr)));
} else {
monitor.reportFeedback(new IFeedback.INFORMATION(String.valueOf(cr)));
}
return new IResult.FAILURE(_output_wf1ya0_a0a);
}
for (TResource tres : Sequence.fromIterable(input)) {
if (tres.module() == null) {
return new IResult.FAILURE(_output_wf1ya0_a0a);
}
if (cr.getChangedModules().contains(tres.module())) {
_output_wf1ya0_a0a = Sequence.fromIterable(_output_wf1ya0_a0a).concat(Sequence.fromIterable(Sequence.<IResource>singleton(tres)));
}
}
default:
progressMonitor.done();
return new IResult.SUCCESS(_output_wf1ya0_a0a);
}
}
};
}
public IConfig createConfig() {
return null;
}
public Iterable<ITarget.Name> notAfter() {
return null;
}
public Iterable<ITarget.Name> after() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen"), new ITarget.Name("jetbrains.mps.lang.resources.Binaries.copyBinaries")});
}
public Iterable<ITarget.Name> notBefore() {
return null;
}
public Iterable<ITarget.Name> before() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.make.facets.Make.make")});
}
public ITarget.Name getName() {
return name;
}
public boolean isOptional() {
return false;
}
public boolean requiresInput() {
return true;
}
public boolean producesOutput() {
return true;
}
public Iterable<Class<? extends IResource>> expectedInput() {
List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>());
ListSequence.fromList(rv).addElement(TResource.class);
return rv;
}
public Iterable<Class<? extends IResource>> expectedOutput() {
return null;
}
public <T> T createParameters(Class<T> cls) {
return cls.cast(new Parameters());
}
public <T> T createParameters(Class<T> cls, T copyFrom) {
T t = createParameters(cls);
if (t != null) {
((Tuples._3) t).assign((Tuples._3) copyFrom);
}
return t;
}
public int workEstimate() {
return 300;
}
public static JavaCompile_Facet.Target_compile.Parameters vars(IPropertiesPool ppool) {
return ppool.properties(name, JavaCompile_Facet.Target_compile.Parameters.class);
}
public static class Parameters extends MultiTuple._3<Boolean, Boolean, JavaCompilerOptions> {
public Parameters() {
super();
}
public Parameters(Boolean compiledAnything, Boolean skipCompilation, JavaCompilerOptions options) {
super(compiledAnything, skipCompilation, options);
}
public Boolean compiledAnything(Boolean value) {
return super._0(value);
}
public Boolean skipCompilation(Boolean value) {
return super._1(value);
}
public JavaCompilerOptions options(JavaCompilerOptions value) {
return super._2(value);
}
public Boolean compiledAnything() {
return super._0();
}
public Boolean skipCompilation() {
return super._1();
}
public JavaCompilerOptions options() {
return super._2();
}
}
}
public static class Target_auxCompile implements ITargetEx2 {
private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.make.facets.JavaCompile.auxCompile");
public Target_auxCompile() {
}
public IJob createJob() {
return new IJob.Stub() {
@Override
public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) {
Iterable<IResource> _output_wf1ya0_a0b = null;
final Iterable<TResource> input = (Iterable<TResource>) (Iterable) rawInput;
progressMonitor.start("", IntStream.of(1000).sum());
switch (0) {
case 0:
// FIXME project property is no longer needed (we take project from make session), remove after 2017.2
if (Boolean.TRUE.equals(JavaCompile_Facet.Target_compile.vars(pa.global()).skipCompilation())) {
_output_wf1ya0_a0b = Sequence.fromIterable(_output_wf1ya0_a0b).concat(Sequence.fromIterable(input));
return new IResult.SUCCESS(_output_wf1ya0_a0b);
}
if (vars(pa.global()).skipAuxCompile() != null && vars(pa.global()).skipAuxCompile()) {
return new IResult.SUCCESS(_output_wf1ya0_a0b);
}
if (Sequence.fromIterable(input).any(new IWhereFilter<TResource>() {
public boolean accept(TResource it) {
return it.module() == null;
}
})) {
return new IResult.FAILURE(_output_wf1ya0_a0b);
}
// collect modules to compile
final Iterable<TResource> toCompile = Sequence.fromIterable(input).where(new IWhereFilter<TResource>() {
public boolean accept(TResource it) {
return SModuleOperations.isCompileInIdea(it.module());
}
});
// compile modules
if (Sequence.fromIterable(toCompile).isEmpty()) {
return new IResult.SUCCESS(_output_wf1ya0_a0b);
}
if (RuntimeFlags.isTestMode()) {
return new IResult.FAILURE(_output_wf1ya0_a0b);
}
final IdeaJavaCompiler compiler = monitor.getSession().getProject().getComponent(IdeaJavaCompiler.class);
if (compiler == null || !(compiler.isValid())) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("IntelliJ IDEA is required for compilation")));
return new IResult.FAILURE(_output_wf1ya0_a0b);
}
final ProgressMonitor subProgress_p0a0b = progressMonitor.subTask(1000);
subProgress_p0a0b.start("Compiling in IntelliJ IDEA", 1);
subProgress_p0a0b.advance(1);
CompilationResult cr = new ModelAccessHelper(monitor.getSession().getProject().getModelAccess()).runReadAction(new Computable<CompilationResult>() {
public CompilationResult compute() {
return compiler.compileModules(Sequence.fromIterable(toCompile).select(new ISelector<TResource, SModule>() {
public SModule select(TResource it) {
return it.module();
}
}).toGenericArray(SModule.class));
}
});
if (!(cr.isOk())) {
if (cr.getErrorsCount() > 0) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf(cr)));
} else if (cr.getWarningsCount() > 0) {
monitor.reportFeedback(new IFeedback.WARNING(String.valueOf(cr)));
} else {
monitor.reportFeedback(new IFeedback.INFORMATION(String.valueOf(cr)));
}
return new IResult.FAILURE(_output_wf1ya0_a0b);
}
subProgress_p0a0b.done();
default:
progressMonitor.done();
return new IResult.SUCCESS(_output_wf1ya0_a0b);
}
}
};
}
public IConfig createConfig() {
return null;
}
public Iterable<ITarget.Name> notAfter() {
return null;
}
public Iterable<ITarget.Name> after() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen")});
}
public Iterable<ITarget.Name> notBefore() {
return null;
}
public Iterable<ITarget.Name> before() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.make.facets.Make.make")});
}
public ITarget.Name getName() {
return name;
}
public boolean isOptional() {
return false;
}
public boolean requiresInput() {
return true;
}
public boolean producesOutput() {
return true;
}
public Iterable<Class<? extends IResource>> expectedInput() {
List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>());
ListSequence.fromList(rv).addElement(TResource.class);
return rv;
}
public Iterable<Class<? extends IResource>> expectedOutput() {
return null;
}
public <T> T createParameters(Class<T> cls) {
return cls.cast(new Parameters());
}
public <T> T createParameters(Class<T> cls, T copyFrom) {
T t = createParameters(cls);
if (t != null) {
((Tuples._2) t).assign((Tuples._2) copyFrom);
}
return t;
}
public int workEstimate() {
return 100;
}
public static JavaCompile_Facet.Target_auxCompile.Parameters vars(IPropertiesPool ppool) {
return ppool.properties(name, JavaCompile_Facet.Target_auxCompile.Parameters.class);
}
public static class Parameters extends MultiTuple._2<Project, Boolean> {
public Parameters() {
super();
}
public Parameters(Project unused, Boolean skipAuxCompile) {
super(unused, skipAuxCompile);
}
public Project unused(Project value) {
return super._0(value);
}
public Boolean skipAuxCompile(Boolean value) {
return super._1(value);
}
public Project unused() {
return super._0();
}
public Boolean skipAuxCompile() {
return super._1();
}
}
}
public static class TargetProperties implements IPropertiesPersistence {
public TargetProperties() {
}
public void storeValues(Map<String, String> store, IPropertiesPool properties) {
{
ITarget.Name name = new ITarget.Name("jetbrains.mps.make.facets.JavaCompile.compile");
if (properties.hasProperties(name)) {
JavaCompile_Facet.Target_compile.Parameters props = properties.properties(name, JavaCompile_Facet.Target_compile.Parameters.class);
MapSequence.fromMap(store).put("jetbrains.mps.make.facets.JavaCompile.compile.compiledAnything", String.valueOf(props.compiledAnything()));
MapSequence.fromMap(store).put("jetbrains.mps.make.facets.JavaCompile.compile.skipCompilation", String.valueOf(props.skipCompilation()));
MapSequence.fromMap(store).put("jetbrains.mps.make.facets.JavaCompile.compile.options", null);
}
}
{
ITarget.Name name = new ITarget.Name("jetbrains.mps.make.facets.JavaCompile.auxCompile");
if (properties.hasProperties(name)) {
JavaCompile_Facet.Target_auxCompile.Parameters props = properties.properties(name, JavaCompile_Facet.Target_auxCompile.Parameters.class);
MapSequence.fromMap(store).put("jetbrains.mps.make.facets.JavaCompile.auxCompile.unused", null);
MapSequence.fromMap(store).put("jetbrains.mps.make.facets.JavaCompile.auxCompile.skipAuxCompile", String.valueOf(props.skipAuxCompile()));
}
}
}
public void loadValues(Map<String, String> store, IPropertiesPool properties) {
try {
{
ITarget.Name name = new ITarget.Name("jetbrains.mps.make.facets.JavaCompile.compile");
JavaCompile_Facet.Target_compile.Parameters props = properties.properties(name, JavaCompile_Facet.Target_compile.Parameters.class);
if (MapSequence.fromMap(store).containsKey("jetbrains.mps.make.facets.JavaCompile.compile.compiledAnything")) {
props.compiledAnything(Boolean.valueOf(MapSequence.fromMap(store).get("jetbrains.mps.make.facets.JavaCompile.compile.compiledAnything")));
}
if (MapSequence.fromMap(store).containsKey("jetbrains.mps.make.facets.JavaCompile.compile.skipCompilation")) {
props.skipCompilation(Boolean.valueOf(MapSequence.fromMap(store).get("jetbrains.mps.make.facets.JavaCompile.compile.skipCompilation")));
}
if (MapSequence.fromMap(store).containsKey("jetbrains.mps.make.facets.JavaCompile.compile.options")) {
props.options(null);
}
}
{
ITarget.Name name = new ITarget.Name("jetbrains.mps.make.facets.JavaCompile.auxCompile");
JavaCompile_Facet.Target_auxCompile.Parameters props = properties.properties(name, JavaCompile_Facet.Target_auxCompile.Parameters.class);
if (MapSequence.fromMap(store).containsKey("jetbrains.mps.make.facets.JavaCompile.auxCompile.unused")) {
props.unused(null);
}
if (MapSequence.fromMap(store).containsKey("jetbrains.mps.make.facets.JavaCompile.auxCompile.skipAuxCompile")) {
props.skipAuxCompile(Boolean.valueOf(MapSequence.fromMap(store).get("jetbrains.mps.make.facets.JavaCompile.auxCompile.skipAuxCompile")));
}
}
} catch (RuntimeException re) {
}
}
}
}