Skip to content

Commit

Permalink
Fix ValidationException on configuration change (#70)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gohla committed Sep 30, 2021
1 parent 64f2de7 commit a0a15bd
Show file tree
Hide file tree
Showing 26 changed files with 143 additions and 430 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,56 +47,17 @@ TemplateCompiler provideTemplateCompiler() {
@Provides @SpoofaxCompilerQualifier @SpoofaxCompilerScope @ElementsIntoSet
static Set<TaskDef<?, ?>> provideTaskDefsSet(
LanguageProjectCompiler languageProjectCompiler,
ClassLoaderResourcesCompiler classloaderResourcesCompiler,
ParserLanguageCompiler parserLanguageCompiler,
StylerLanguageCompiler stylerLanguageCompiler,
ConstraintAnalyzerLanguageCompiler constraintAnalyzerLanguageCompiler,
MultilangAnalyzerLanguageCompiler multilangAnalyzerLanguageCompiler,
StrategoRuntimeLanguageCompiler strategoRuntimeLanguageCompiler,
CompleterLanguageCompiler completerLanguageCompiler,
ExportsLanguageCompiler exportsLanguageCompiler,

AdapterProjectCompiler adapterProjectCompiler,
ParserAdapterCompiler parserAdapterCompiler,
StylerAdapterCompiler stylerAdapterCompiler,
ConstraintAnalyzerAdapterCompiler constraintAnalyzerAdapterCompiler,
MultilangAnalyzerAdapterCompiler multilangAnalyzerAdapterCompiler,
CompleterAdapterCompiler completerAdapterCompiler,
StrategoRuntimeAdapterCompiler strategoRuntimeAdapterCompiler,
ReferenceResolutionAdapterCompiler referenceResolutionAdapterCompiler,
HoverAdapterCompiler hoverAdapterCompiler,
GetSourceFilesAdapterCompiler getSourceFilesAdapterCompiler,

CliProjectCompiler cliProjectCompiler,
EclipseProjectCompiler eclipseProjectCompiler,
IntellijProjectCompiler intellijProjectCompiler
) {
final HashSet<TaskDef<?, ?>> taskDefs = new HashSet<>();
taskDefs.add(languageProjectCompiler);
taskDefs.add(classloaderResourcesCompiler);
taskDefs.add(parserLanguageCompiler);
taskDefs.add(stylerLanguageCompiler);
taskDefs.add(constraintAnalyzerLanguageCompiler);
taskDefs.add(multilangAnalyzerLanguageCompiler);
taskDefs.add(strategoRuntimeLanguageCompiler);
taskDefs.add(completerLanguageCompiler);
taskDefs.add(exportsLanguageCompiler);

taskDefs.add(adapterProjectCompiler);
taskDefs.add(parserAdapterCompiler);
taskDefs.add(stylerAdapterCompiler);
taskDefs.add(constraintAnalyzerAdapterCompiler);
taskDefs.add(multilangAnalyzerAdapterCompiler);
taskDefs.add(strategoRuntimeAdapterCompiler);
taskDefs.add(completerAdapterCompiler);
taskDefs.add(referenceResolutionAdapterCompiler);
taskDefs.add(hoverAdapterCompiler);
taskDefs.add(getSourceFilesAdapterCompiler);

taskDefs.add(cliProjectCompiler);
taskDefs.add(eclipseProjectCompiler);
taskDefs.add(intellijProjectCompiler);

return taskDefs;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,15 +128,15 @@ public class AdapterProjectCompiler implements TaskDef<Supplier<Result<AdapterPr

public None compile(ExecContext context, Input input) throws IOException {
// Files from other compilers.
input.parser().ifPresent((i) -> context.require(parserCompiler, i));
input.styler().ifPresent((i) -> context.require(stylerCompiler, i));
input.completer().ifPresent((i) -> context.require(completerCompiler, i));
input.strategoRuntime().ifPresent((i) -> context.require(strategoRuntimeCompiler, i));
input.constraintAnalyzer().ifPresent((i) -> context.require(constraintAnalyzerCompiler, i));
input.multilangAnalyzer().ifPresent((i) -> context.require(multilangAnalyzerCompiler, i));
input.referenceResolution().ifPresent((i) -> context.require(referenceResolutionAdapterCompiler, i));
input.hover().ifPresent((i) -> context.require(hoverAdapterCompiler, i));
context.require(getSourceFilesAdapterCompiler, input.getSourceFiles());
Option.ofOptional(input.parser()).ifSomeThrowing((i) -> parserCompiler.compile(context, i));
Option.ofOptional(input.styler()).ifSomeThrowing((i) -> stylerCompiler.compile(context, i));
Option.ofOptional(input.completer()).ifSomeThrowing((i) -> completerCompiler.compile(context, i));
Option.ofOptional(input.strategoRuntime()).ifSomeThrowing((i) -> strategoRuntimeCompiler.compile(context, i));
Option.ofOptional(input.constraintAnalyzer()).ifSomeThrowing((i) -> constraintAnalyzerCompiler.compile(context, i));
Option.ofOptional(input.multilangAnalyzer()).ifSomeThrowing((i) -> multilangAnalyzerCompiler.compile(context, i));
Option.ofOptional(input.referenceResolution()).ifSomeThrowing((i) -> referenceResolutionAdapterCompiler.compile(context, i));
Option.ofOptional(input.hover()).ifSomeThrowing((i) -> hoverAdapterCompiler.compile(context, i));
getSourceFilesAdapterCompiler.compile(context, input.getSourceFiles());

if(input.classKind().isManual()) return None.instance; // Nothing to generate: return.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import mb.common.util.ListView;
import mb.pie.api.ExecContext;
import mb.pie.api.Interactivity;
import mb.pie.api.TaskDef;
import mb.resource.hierarchical.ResourcePath;
import mb.spoofax.compiler.language.CompleterLanguageCompiler;
import mb.spoofax.compiler.util.ClassKind;
Expand All @@ -17,10 +15,9 @@
import java.io.IOException;
import java.io.Serializable;
import java.util.Optional;
import java.util.Set;

@Value.Enclosing
public class CompleterAdapterCompiler implements TaskDef<CompleterAdapterCompiler.Input, CompleterAdapterCompiler.Output> {
public class CompleterAdapterCompiler {
private final TemplateWriter completeTaskDefTemplate;

@Inject public CompleterAdapterCompiler(TemplateCompiler templateCompiler) {
Expand All @@ -29,26 +26,14 @@ public class CompleterAdapterCompiler implements TaskDef<CompleterAdapterCompile
}


@Override public String getId() {
return getClass().getName();
}

@Override public Output exec(ExecContext context, Input input) throws IOException {
public Output compile(ExecContext context, Input input) throws IOException {
final Output.Builder outputBuilder = Output.builder();
if(input.classKind().isManual()) return outputBuilder.build(); // Nothing to generate: return.
final ResourcePath generatedJavaSourcesDirectory = input.generatedJavaSourcesDirectory();
completeTaskDefTemplate.write(context, input.baseCompleteTaskDef().file(generatedJavaSourcesDirectory), input);
return outputBuilder.build();
}

@Override public boolean shouldExecWhenAffected(Input input, Set<?> tags) {
return tags.isEmpty() || tags.contains(Interactivity.NonInteractive);
}

@Override public Serializable key(Input input) {
return input.adapterProject().project().baseDirectory();
}


@Value.Immutable public interface Input extends Serializable {
class Builder extends CompleterAdapterCompilerData.Input.Builder {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import mb.common.util.ListView;
import mb.pie.api.ExecContext;
import mb.pie.api.Interactivity;
import mb.pie.api.None;
import mb.pie.api.TaskDef;
import mb.resource.ResourceKey;
import mb.resource.hierarchical.ResourcePath;
import mb.spoofax.compiler.adapter.data.ArgProviderRepr;
Expand All @@ -28,15 +26,15 @@
import org.immutables.value.Value;

import javax.inject.Inject;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;

@Value.Enclosing
public class ConstraintAnalyzerAdapterCompiler implements TaskDef<ConstraintAnalyzerAdapterCompiler.Input, None> {
public class ConstraintAnalyzerAdapterCompiler {
private final TemplateWriter analyzeTaskDefTemplate;
private final TemplateWriter analyzeMultiTaskDefTemplate;
private final TemplateWriter analyzeFileTaskDefTemplate;
Expand All @@ -55,11 +53,7 @@ public class ConstraintAnalyzerAdapterCompiler implements TaskDef<ConstraintAnal
}


@Override public String getId() {
return getClass().getName();
}

@Override public None exec(ExecContext context, Input input) throws Exception {
public None compile(ExecContext context, Input input) throws IOException {
if(input.classKind().isManual()) return None.instance; // Nothing to generate: return.
final ResourcePath generatedJavaSourcesDirectory = input.generatedJavaSourcesDirectory();
analyzeTaskDefTemplate.write(context, input.baseAnalyzeTaskDef().file(generatedJavaSourcesDirectory), input);
Expand All @@ -75,14 +69,6 @@ public class ConstraintAnalyzerAdapterCompiler implements TaskDef<ConstraintAnal
return None.instance;
}

@Override public boolean shouldExecWhenAffected(Input input, Set<?> tags) {
return tags.isEmpty() || tags.contains(Interactivity.NonInteractive);
}

@Override public Serializable key(Input input) {
return input.adapterProject().project().baseDirectory();
}


public ListView<GradleConfiguredDependency> getDependencies(Input input) {
final ArrayList<GradleConfiguredDependency> dependencies = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import mb.common.util.ListView;
import mb.pie.api.ExecContext;
import mb.pie.api.None;
import mb.pie.api.TaskDef;
import mb.resource.hierarchical.ResourcePath;
import mb.spoofax.compiler.language.ClassLoaderResourcesCompiler;
import mb.spoofax.compiler.util.ClassKind;
Expand All @@ -19,7 +18,7 @@
import java.util.Optional;

@Value.Enclosing
public class GetSourceFilesAdapterCompiler implements TaskDef<GetSourceFilesAdapterCompiler.Input, None> {
public class GetSourceFilesAdapterCompiler {
private final TemplateWriter getSourceFilesTaskDefTemplate;

@Inject public GetSourceFilesAdapterCompiler(TemplateCompiler templateCompiler) {
Expand All @@ -28,11 +27,8 @@ public class GetSourceFilesAdapterCompiler implements TaskDef<GetSourceFilesAdap
this.getSourceFilesTaskDefTemplate = templateCompiler.getOrCompileToWriter("adapter_project/GetSourceFilesTaskDef.java.mustache");
}

@Override public String getId() {
return getClass().getName();
}

@Override public None exec(ExecContext context, Input input) throws IOException {
public None compile(ExecContext context, Input input) throws IOException {
if(input.classKind().isManual()) return None.instance; // Nothing to generate: return.
final ResourcePath generatedJavaSourcesDirectory = input.generatedJavaSourcesDirectory();

Expand All @@ -41,10 +37,6 @@ public class GetSourceFilesAdapterCompiler implements TaskDef<GetSourceFilesAdap
return None.instance;
}

@Override public Serializable key(Input input) {
return input.adapterProject().project().baseDirectory();
}


@Value.Immutable
public interface Input extends Serializable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import mb.common.util.ListView;
import mb.pie.api.ExecContext;
import mb.pie.api.None;
import mb.pie.api.TaskDef;
import mb.resource.hierarchical.ResourcePath;
import mb.spoofax.compiler.language.ClassLoaderResourcesCompiler;
import mb.spoofax.compiler.util.*;
import mb.spoofax.compiler.util.ClassKind;
import mb.spoofax.compiler.util.Shared;
import mb.spoofax.compiler.util.TemplateCompiler;
import mb.spoofax.compiler.util.TemplateWriter;
import mb.spoofax.compiler.util.TypeInfo;
import org.immutables.value.Value;

import javax.inject.Inject;
Expand All @@ -15,7 +18,7 @@
import java.util.Optional;

@Value.Enclosing
public class HoverAdapterCompiler implements TaskDef<HoverAdapterCompiler.Input, None> {
public class HoverAdapterCompiler {
private final TemplateWriter hoverTaskDefTemplate;

@Inject public HoverAdapterCompiler(TemplateCompiler templateCompiler) {
Expand All @@ -24,11 +27,8 @@ public class HoverAdapterCompiler implements TaskDef<HoverAdapterCompiler.Input,
this.hoverTaskDefTemplate = templateCompiler.getOrCompileToWriter("editor_services/HoverTaskDef.java.mustache");
}

@Override public String getId() {
return getClass().getName();
}

@Override public None exec(ExecContext context, Input input) throws IOException {
public None compile(ExecContext context, Input input) throws IOException {
if(input.classKind().isManual()) return None.instance; // Nothing to generate: return.
final ResourcePath generatedJavaSourcesDirectory = input.generatedJavaSourcesDirectory();

Expand All @@ -37,15 +37,10 @@ public class HoverAdapterCompiler implements TaskDef<HoverAdapterCompiler.Input,
return None.instance;
}

@Override public Serializable key(Input input) {
return input.adapterProject().project().baseDirectory();
}


@Value.Immutable
public interface Input extends Serializable {
class Builder extends HoverAdapterCompilerData.Input.Builder {
}
class Builder extends HoverAdapterCompilerData.Input.Builder {}

static Builder builder() {
return new Builder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import mb.common.util.ListView;
import mb.pie.api.ExecContext;
import mb.pie.api.Interactivity;
import mb.pie.api.None;
import mb.pie.api.TaskDef;
import mb.resource.hierarchical.ResourcePath;
import mb.spoofax.compiler.language.MultilangAnalyzerLanguageCompiler;
import mb.spoofax.compiler.util.ClassKind;
Expand All @@ -20,10 +18,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
import java.util.Set;

@Value.Enclosing
public class MultilangAnalyzerAdapterCompiler implements TaskDef<MultilangAnalyzerAdapterCompiler.Input, None> {
public class MultilangAnalyzerAdapterCompiler {
private final TemplateWriter analyzeProjectTemplate;
private final TemplateWriter indexAstTaskDefTemplate;
private final TemplateWriter preStatixTaskDefTemplate;
Expand All @@ -40,11 +37,7 @@ public class MultilangAnalyzerAdapterCompiler implements TaskDef<MultilangAnalyz
}


@Override public String getId() {
return getClass().getName();
}

@Override public None exec(ExecContext context, Input input) throws IOException {
public None compile(ExecContext context, Input input) throws IOException {
if(input.classKind().isManual()) return None.instance; // Nothing to generate: return.
final ResourcePath generatedJavaSourcesDirectory = input.generatedJavaSourcesDirectory();
analyzeProjectTemplate.write(context, input.baseAnalyzeTaskDef().file(generatedJavaSourcesDirectory), input);
Expand All @@ -55,14 +48,6 @@ public class MultilangAnalyzerAdapterCompiler implements TaskDef<MultilangAnalyz
return None.instance;
}

@Override public boolean shouldExecWhenAffected(Input input, Set<?> tags) {
return tags.isEmpty() || tags.contains(Interactivity.NonInteractive);
}

@Override public Serializable key(Input input) {
return input.adapterProject().project().baseDirectory();
}


@Value.Immutable public interface Input extends Serializable {
class Builder extends MultilangAnalyzerAdapterCompilerData.Input.Builder {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import mb.common.util.ListView;
import mb.pie.api.ExecContext;
import mb.pie.api.Interactivity;
import mb.pie.api.None;
import mb.pie.api.TaskDef;
import mb.resource.ResourceKey;
import mb.resource.hierarchical.ResourcePath;
import mb.spoofax.compiler.adapter.data.ArgProviderRepr;
Expand All @@ -31,12 +29,10 @@
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;

@Value.Enclosing
public class ParserAdapterCompiler implements TaskDef<ParserAdapterCompiler.Input, None> {
public class ParserAdapterCompiler {
private final TemplateWriter parseTaskDefTemplate;
private final TemplateWriter tokenizeTaskDefTemplate;
private final TemplateWriter showParsedAstTaskDefTemplate;
Expand All @@ -51,11 +47,7 @@ public class ParserAdapterCompiler implements TaskDef<ParserAdapterCompiler.Inpu
}


@Override public String getId() {
return getClass().getName();
}

@Override public None exec(ExecContext context, Input input) throws IOException {
public None compile(ExecContext context, Input input) throws IOException {
if(input.classKind().isManual()) return None.instance; // Nothing to generate: return.
final ResourcePath generatedJavaSourcesDirectory = input.generatedJavaSourcesDirectory();
parseTaskDefTemplate.write(context, input.baseParseTaskDef().file(generatedJavaSourcesDirectory), input);
Expand All @@ -65,14 +57,6 @@ public class ParserAdapterCompiler implements TaskDef<ParserAdapterCompiler.Inpu
return None.instance;
}

@Override public boolean shouldExecWhenAffected(Input input, Set<?> tags) {
return tags.isEmpty() || tags.contains(Interactivity.NonInteractive);
}

@Override public Serializable key(Input input) {
return input.adapterProject().project().baseDirectory();
}


public ListView<GradleConfiguredDependency> getDependencies(Input input) {
return ListView.of(
Expand Down
Loading

0 comments on commit a0a15bd

Please sign in to comment.