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) { } } } }