Skip to content

Commit 1f3a6c5

Browse files
kernel/Kompile, DefinitionParsing: converting cacheFile param to Guice injection
1 parent 07e0976 commit 1f3a6c5

8 files changed

Lines changed: 53 additions & 31 deletions

File tree

k-distribution/src/test/scala/org/kframework/backend/kore/KoreTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class KoreTest {
3636
}
3737

3838
def kompile(k: String): Definition = {
39-
val compiler = new Kompile(options, files, kem, false)
39+
val compiler = new Kompile(options, files, kem)
4040
val backend = new KoreBackend(options, files, kem)
4141
files.saveToDefinitionDirectory("test.k", k)
4242
val defn = compiler.run(files.resolveDefinitionDirectory("test.k"), "TEST", "TEST", backend.steps, backend.excludedModuleTags)

kernel/src/main/java/org/kframework/kompile/DefinitionParsing.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public class DefinitionParsing {
7676
private final boolean isStrict;
7777
private final boolean profileRules;
7878
private final List<File> lookupDirectories;
79+
private final Map<String, ParseCache> caches;
7980

8081
public DefinitionParsing(
8182
List<File> lookupDirectories,
@@ -95,6 +96,7 @@ public DefinitionParsing(
9596
this.loader = new BinaryLoader(this.kem);
9697
this.isStrict = options.strict();
9798
this.profileRules = options.profileRules;
99+
this.caches = loadCaches(cacheFile, loader);
98100
}
99101

100102
public java.util.Set<Module> parseModules(CompiledDefinition definition, String mainModule, File definitionFile, java.util.Set<String> excludeModules) {
@@ -111,7 +113,6 @@ public java.util.Set<Module> parseModules(CompiledDefinition definition, String
111113
def = Kompile.excludeModulesByTag(excludeModules).apply(def);
112114

113115
errors = java.util.Collections.synchronizedSet(Sets.newHashSet());
114-
caches = loadCaches();
115116

116117
ResolveConfig resolveConfig = new ResolveConfig(definition.getParsedDefinition(), isStrict, kore, this::parseBubble, this::getParser);
117118
gen = new RuleGrammarGenerator(definition.getParsedDefinition());
@@ -129,7 +130,7 @@ public java.util.Set<Module> parseModules(CompiledDefinition definition, String
129130
return mutable(def.entryModules());
130131
}
131132

132-
public Map<String, ParseCache> loadCaches() {
133+
public static Map<String, ParseCache> loadCaches(File cacheFile, BinaryLoader loader) {
133134
Map<String, ParseCache> result;
134135
//noinspection unchecked
135136
result = cacheFile != null ? loader.loadCache(Map.class, cacheFile) : null;
@@ -217,7 +218,6 @@ protected Definition resolveConfigBubbles(Definition definition, Module defaultC
217218
}
218219

219220
errors = java.util.Collections.synchronizedSet(Sets.newHashSet());
220-
caches = loadCaches();
221221

222222
ResolveConfig resolveConfig = new ResolveConfig(definitionWithConfigBubble, isStrict, kore, this::parseBubble, this::getParser);
223223
gen = new RuleGrammarGenerator(definitionWithConfigBubble);
@@ -235,7 +235,6 @@ protected Definition resolveConfigBubbles(Definition definition, Module defaultC
235235
return result;
236236
}
237237

238-
Map<String, ParseCache> caches;
239238
private java.util.Set<KEMException> errors;
240239
RuleGrammarGenerator gen;
241240

kernel/src/main/java/org/kframework/kompile/Kompile.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,12 @@
5757
import org.kframework.utils.Stopwatch;
5858
import org.kframework.utils.errorsystem.KEMException;
5959
import org.kframework.utils.errorsystem.KExceptionManager;
60+
import org.kframework.utils.file.CacheFile;
6061
import org.kframework.utils.file.FileUtil;
6162
import org.kframework.utils.file.JarInfo;
6263
import scala.Function1;
6364

65+
import javax.annotation.Nullable;
6466
import java.io.File;
6567
import java.io.UnsupportedEncodingException;
6668
import java.util.Collections;
@@ -97,20 +99,13 @@ public class Kompile {
9799
private final DefinitionParsing definitionParsing;
98100
java.util.Set<KEMException> errors;
99101

100-
public Kompile(KompileOptions kompileOptions, FileUtil files, KExceptionManager kem, boolean cacheParses) {
101-
this(kompileOptions, files, kem, new Stopwatch(kompileOptions.global), cacheParses);
102-
}
103-
104102
public Kompile(KompileOptions kompileOptions, FileUtil files, KExceptionManager kem) {
105-
this(kompileOptions, files, kem, true);
103+
this(kompileOptions, files, kem, new Stopwatch(kompileOptions.global), null);
106104
}
107105

108106
@Inject
109-
public Kompile(KompileOptions kompileOptions, FileUtil files, KExceptionManager kem, Stopwatch sw) {
110-
this(kompileOptions, files, kem, sw, true);
111-
}
112-
113-
public Kompile(KompileOptions kompileOptions, FileUtil files, KExceptionManager kem, Stopwatch sw, boolean cacheParses) {
107+
public Kompile(KompileOptions kompileOptions, FileUtil files, KExceptionManager kem, Stopwatch sw,
108+
@Nullable @CacheFile File cacheFile) {
114109
this.kompileOptions = kompileOptions;
115110
this.files = files;
116111
this.kem = kem;
@@ -119,10 +114,6 @@ public Kompile(KompileOptions kompileOptions, FileUtil files, KExceptionManager
119114
List<File> lookupDirectories = kompileOptions.outerParsing.includes.stream().map(files::resolveWorkingDirectory).collect(Collectors.toList());
120115
// these directories should be relative to the current working directory if we refer to them later after the WD has changed.
121116
kompileOptions.outerParsing.includes = lookupDirectories.stream().map(File::getAbsolutePath).collect(Collectors.toList());
122-
File cacheFile = cacheParses ? kompileOptions.experimental.cacheFile != null
123-
? files.resolveWorkingDirectory(kompileOptions.experimental.cacheFile)
124-
: files.resolveKompiled("cache.bin")
125-
: null;
126117
this.definitionParsing = new DefinitionParsing(
127118
lookupDirectories, kompileOptions, kem, files,
128119
parser, cacheFile);

kernel/src/main/java/org/kframework/kompile/KompileFrontEnd.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ public static List<Module> getModules() {
3434
private final KompileOptions options;
3535
private final Provider<Backend> koreBackend;
3636
private final Stopwatch sw;
37-
private final KExceptionManager kem;
3837
private final BinaryLoader loader;
3938
private final Provider<FileUtil> files;
39+
private final Provider<Kompile> kompile;
4040

4141
@Inject
4242
KompileFrontEnd(
@@ -48,14 +48,15 @@ public static List<Module> getModules() {
4848
KExceptionManager kem,
4949
BinaryLoader loader,
5050
JarInfo jarInfo,
51-
Provider<FileUtil> files) {
51+
Provider<FileUtil> files,
52+
Provider<Kompile> kompile) {
5253
super(kem, options.global, usage, experimentalUsage, jarInfo, files);
5354
this.options = options;
5455
this.koreBackend = koreBackend;
5556
this.sw = sw;
56-
this.kem = kem;
5757
this.loader = loader;
5858
this.files = files;
59+
this.kompile = kompile;
5960
}
6061

6162
@Override
@@ -65,9 +66,8 @@ public int run() {
6566
options.outerParsing.mainDefinitionFile(files.get()).getAbsolutePath());
6667
}
6768

68-
Kompile kompile = new Kompile(options, files.get(), kem, sw, !options.profileRules);
6969
Backend backend = koreBackend.get();
70-
CompiledDefinition def = kompile.run(options.outerParsing.mainDefinitionFile(files.get()), options.mainModule(files.get()), options.syntaxModule(files.get()), backend.steps(), backend.excludedModuleTags());
70+
CompiledDefinition def = kompile.get().run(options.outerParsing.mainDefinitionFile(files.get()), options.mainModule(files.get()), options.syntaxModule(files.get()), backend.steps(), backend.excludedModuleTags());
7171
sw.printIntermediate("Kompile to kore");
7272
loader.saveOrDie(files.get().resolveKompiled("compiled.bin"), def);
7373
sw.printIntermediate("Save to disk");

kernel/src/main/java/org/kframework/kompile/KompileModule.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@
44
import com.google.inject.AbstractModule;
55
import com.google.inject.Provides;
66
import com.google.inject.TypeLiteral;
7-
import com.google.inject.multibindings.MapBinder;
87
import com.google.inject.multibindings.Multibinder;
98
import org.kframework.main.FrontEnd;
109
import org.kframework.main.GlobalOptions;
1110
import org.kframework.main.Tool;
12-
import org.kframework.utils.errorsystem.KEMException;
13-
import org.kframework.utils.errorsystem.KExceptionManager;
11+
import org.kframework.utils.file.CacheFile;
12+
import org.kframework.utils.file.FileUtil;
13+
import org.kframework.utils.inject.DefinitionScoped;
1414
import org.kframework.utils.inject.Options;
1515
import org.kframework.utils.inject.OuterParsingModule;
1616
import org.kframework.utils.inject.RequestScoped;
1717
import org.kframework.utils.options.OuterParsingOptions;
1818
import org.kframework.utils.options.SMTOptions;
1919

20-
import java.util.Map;
20+
import java.io.File;
2121

2222
public class KompileModule extends AbstractModule {
2323

@@ -52,4 +52,14 @@ GlobalOptions globalOptions(KompileOptions options) {
5252
@Provides
5353
OuterParsingOptions outerParsingOptions(KompileOptions options) { return options.outerParsing; }
5454

55+
@Provides @RequestScoped @CacheFile
56+
File cacheFile(KompileOptions options, FileUtil files) {
57+
return !options.profileRules ? KompileModule.getCacheFileImpl(options, files) : null;
58+
}
59+
60+
public static File getCacheFileImpl(KompileOptions kompileOptions, FileUtil files) {
61+
return kompileOptions.experimental.cacheFile != null
62+
? files.resolveWorkingDirectory(kompileOptions.experimental.cacheFile)
63+
: files.resolveKompiled("cache.bin");
64+
}
5565
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright (c) 2014-2019 K Team. All Rights Reserved.
2+
package org.kframework.utils.file;
3+
4+
import com.google.inject.BindingAnnotation;
5+
6+
import java.lang.annotation.Retention;
7+
import java.lang.annotation.Target;
8+
9+
import static java.lang.annotation.ElementType.*;
10+
import static java.lang.annotation.RetentionPolicy.*;
11+
12+
@BindingAnnotation @Target({FIELD, PARAMETER, METHOD}) @Retention(RUNTIME)
13+
public @interface CacheFile {}

kernel/src/main/java/org/kframework/utils/inject/DefinitionLoadingModule.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
import com.google.inject.Provider;
66
import com.google.inject.Provides;
77
import org.kframework.kompile.CompiledDefinition;
8+
import org.kframework.kompile.KompileModule;
89
import org.kframework.kompile.KompileOptions;
910
import org.kframework.utils.BinaryLoader;
1011
import org.kframework.utils.errorsystem.KEMException;
1112
import org.kframework.utils.errorsystem.KExceptionManager;
13+
import org.kframework.utils.file.CacheFile;
1214
import org.kframework.utils.file.DefinitionDir;
1315
import org.kframework.utils.file.Environment;
1416
import org.kframework.utils.file.FileUtil;
@@ -31,6 +33,10 @@ CompiledDefinition koreDefinition(BinaryLoader loader, FileUtil files) {
3133
return loader.loadOrDie(CompiledDefinition.class, files.resolveKompiled("compiled.bin"));
3234
}
3335

36+
@Provides @DefinitionScoped @CacheFile
37+
File cacheFile(KompileOptions kompileOptions, FileUtil files) {
38+
return KompileModule.getCacheFileImpl(kompileOptions, files);
39+
}
3440

3541
@Provides @RequestScoped
3642
KompileOptions kompileOptions(Provider<CompiledDefinition> compiledDef) {

kernel/src/test/java/org/kframework/kompile/KompileFrontEndTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,30 @@ public class KompileFrontEndTest extends IOTestCase {
2424
@Mock
2525
FileUtil files;
2626

27+
@Mock
28+
Kompile kompile;
29+
2730
KompileOptions options = new KompileOptions();
2831

2932
@Test
3033
public void testHelp() throws IOException {
3134
options.global.help = true;
32-
new KompileFrontEnd(options, "foo", "", Providers.of(koreBackend), sw, kem, loader, jarInfo, Providers.of(files)).main();
35+
new KompileFrontEnd(options, "foo", "", Providers.of(koreBackend), sw, kem, loader, jarInfo, Providers.of(files), Providers.of(kompile)).main();
3336
assertEquals("foo", stdout.toString());
3437
}
3538

3639

3740
@Test
3841
public void testExperimentalHelp() throws IOException {
3942
options.global.helpExperimental = true;
40-
new KompileFrontEnd(options, "", "foo", Providers.of(koreBackend), sw, kem, loader, jarInfo, Providers.of(files)).main();
43+
new KompileFrontEnd(options, "", "foo", Providers.of(koreBackend), sw, kem, loader, jarInfo, Providers.of(files), Providers.of(kompile)).main();
4144
assertEquals("foo", stdout.toString());
4245
}
4346

4447
@Test
4548
public void testVersion() {
4649
options.global.version = true;
47-
new KompileFrontEnd(options, "", "foo", Providers.of(koreBackend), sw, kem, loader, jarInfo, Providers.of(files)).main();
50+
new KompileFrontEnd(options, "", "foo", Providers.of(koreBackend), sw, kem, loader, jarInfo, Providers.of(files), Providers.of(kompile)).main();
4851
verify(jarInfo).printVersionMessage();
4952
}
5053
}

0 commit comments

Comments
 (0)