Skip to content

Commit 9b1ee39

Browse files
committed
get rid of wurst.dependencies
1 parent 3e2f87b commit 9b1ee39

2 files changed

Lines changed: 37 additions & 83 deletions

File tree

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.google.common.base.Charsets;
44
import com.google.common.base.Preconditions;
5-
import com.google.common.collect.ImmutableList;
65
import com.google.common.collect.Lists;
76
import com.google.common.collect.Maps;
87
import com.google.common.collect.Sets;
@@ -41,7 +40,6 @@
4140

4241
import java.io.*;
4342
import java.lang.ref.WeakReference;
44-
import java.nio.charset.StandardCharsets;
4543
import java.util.*;
4644
import java.util.Map.Entry;
4745
import java.util.function.Function;
@@ -148,49 +146,12 @@ public void loadWurstFilesInDir(File dir) {
148146
loadWurstFilesInDir(f);
149147
} else if (Utils.isWurstFile(f)) {
150148
loadFile(f);
151-
} else if (f.getName().equals("wurst.dependencies")) {
152-
dependencies.addAll(checkDependencyFile(f, gui));
153149
} else if ((!mapFile.isPresent() || runArgs.isNoExtractMapScript()) && f.getName().equals("war3map.j")) {
154150
loadFile(f);
155151
}
156152
}
157153
}
158154

159-
public static ImmutableList<File> checkDependencyFile(File depFile, WurstGui gui) {
160-
List<String> lines;
161-
try {
162-
lines = Files.readLines(depFile, StandardCharsets.UTF_8);
163-
} catch (IOException e) {
164-
e.printStackTrace();
165-
throw new Error(e);
166-
}
167-
LineOffsets offsets = new LineOffsets();
168-
int lineNr = 0;
169-
int offset = 0;
170-
for (String line : lines) {
171-
offsets.set(lineNr, offset);
172-
lineNr++;
173-
offset += line.length() + 1;
174-
}
175-
offsets.set(lineNr, offset);
176-
lineNr = 0;
177-
ImmutableList.Builder<File> dependencies = ImmutableList.builder();
178-
for (String line : lines) {
179-
int lineOffset = offsets.get(lineNr);
180-
WPos pos = new WPos(depFile.getAbsolutePath(), offsets, lineOffset + 1, lineOffset + line.length() + 1);
181-
File folder = new File(line);
182-
if (!folder.exists()) {
183-
gui.sendError(new CompileError(pos, "Folder " + line + " not found."));
184-
} else if (!folder.isDirectory()) {
185-
gui.sendError(new CompileError(pos, line + " is not a folder."));
186-
} else {
187-
dependencies.add(folder);
188-
}
189-
lineNr++;
190-
}
191-
return dependencies.build();
192-
}
193-
194155
@Override
195156
public @Nullable WurstModel parseFiles() {
196157

@@ -220,10 +181,6 @@ public static ImmutableList<File> checkDependencyFile(File depFile, WurstGui gui
220181
} else {
221182
WLogger.info("No wurst folder found in " + relativeWurstDir);
222183
}
223-
File dependencyFile = new File(projectFolder, "wurst.dependencies");
224-
if (dependencyFile.exists()) {
225-
dependencies.addAll(checkDependencyFile(dependencyFile, gui));
226-
}
227184
addDependenciesFromFolder(projectFolder, dependencies);
228185
}
229186

@@ -373,7 +330,7 @@ private void resolveImport(Function<File, CompilationUnit> addCompilationUnit, S
373330
private CompilationUnit loadLibPackage(Function<File, CompilationUnit> addCompilationUnit, String imp) {
374331
File file = getLibs().get(imp);
375332
if (file == null) {
376-
gui.sendError(new CompileError(new WPos("", null, 0, 0), "Could not find lib-package " + imp + ". Are you missing your wurst.dependencies file?"));
333+
gui.sendError(new CompileError(new WPos("", null, 0, 0), "Could not find lib-package " + imp + ". Is your dependency present in _build/dependencies?"));
377334
return Ast.CompilationUnit(new CompilationUnitInfo(errorHandler), Ast.JassToplevelDeclarations(), Ast.WPackages());
378335
} else {
379336
return addCompilationUnit.apply(file);

de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,63 @@
22

33

44
import de.peeeq.wurstio.WurstCompilerJassImpl;
5-
import de.peeeq.wurstio.languageserver.Convert;
6-
import de.peeeq.wurstio.languageserver.WFile;
75
import de.peeeq.wurstio.utils.FileUtils;
8-
import de.peeeq.wurstscript.RunArgs;
9-
import de.peeeq.wurstscript.attributes.CompileError;
10-
import de.peeeq.wurstscript.gui.WurstGui;
11-
import de.peeeq.wurstscript.gui.WurstGuiLogger;
12-
import org.eclipse.lsp4j.Diagnostic;
13-
import org.eclipse.lsp4j.PublishDiagnosticsParams;
146
import org.testng.annotations.Test;
157

16-
import java.io.BufferedWriter;
178
import java.io.File;
18-
import java.io.FileWriter;
199
import java.io.IOException;
10+
import java.util.ArrayList;
11+
import java.util.List;
2012
import java.nio.file.Files;
2113

2214
import static org.testng.Assert.assertEquals;
15+
import static org.testng.Assert.assertTrue;
2316

2417
public class DependencyFileParserTest {
2518

2619
@Test
27-
public void testDepFileParsing() throws IOException {
28-
File projectFolder = new File("./temp/testDepFileParsing/");
20+
public void testAddDependenciesFromBuildFolder() throws IOException {
21+
File projectFolder = new File("./temp/testAddDependenciesFromBuildFolder/");
2922
newCleanFolder(projectFolder);
30-
File a = new File(projectFolder, "a");
31-
File b = new File(projectFolder, "b");
32-
File c = new File(projectFolder, "c");
23+
File depsRoot = new File(new File(projectFolder, "_build"), "dependencies");
24+
File a = new File(depsRoot, "a");
25+
File b = new File(depsRoot, "b");
26+
File ignoredFile = new File(depsRoot, "not-a-dir.txt");
3327

3428
a.mkdirs();
35-
//b.mkdirs();
36-
c.mkdirs();
29+
b.mkdirs();
30+
Files.writeString(ignoredFile.toPath(), "x");
3731

38-
File dep = new File(projectFolder, "wurst.dependencies");
39-
try (BufferedWriter w = new BufferedWriter(new FileWriter(dep))) {
40-
w.write(a.getAbsolutePath() + "\n");
41-
w.write(b.getAbsolutePath() + "\n");
42-
w.write(c.getAbsolutePath() + "\n");
43-
}
32+
List<File> dependencies = new ArrayList<>();
33+
WurstCompilerJassImpl.addDependenciesFromFolder(projectFolder, dependencies);
4434

35+
assertEquals(dependencies.size(), 2);
36+
assertTrue(containsSameFile(dependencies, a));
37+
assertTrue(containsSameFile(dependencies, b));
38+
}
4539

46-
WurstGui gui = new WurstGuiLogger();
47-
WurstCompilerJassImpl comp = new WurstCompilerJassImpl(projectFolder, gui, null, new RunArgs());
48-
comp.loadWurstFilesInDir(projectFolder);
40+
@Test
41+
public void testAddDependenciesFromBuildFolderDoesNotDuplicate() throws IOException {
42+
File projectFolder = new File("./temp/testAddDependenciesFromBuildFolderDoesNotDuplicate/");
43+
newCleanFolder(projectFolder);
44+
File depsRoot = new File(new File(projectFolder, "_build"), "dependencies");
45+
File a = new File(depsRoot, "a");
46+
a.mkdirs();
4947

50-
assertEquals(gui.getErrorList().size(), 1);
51-
CompileError err = gui.getErrorList().get(0);
52-
assertEquals(err.getSource().getLine(), 2);
53-
assertEquals(err.getSource().getStartColumn(), 1);
54-
assertEquals(err.getSource().getEndLine(), 2);
55-
assertEquals(err.getSource().getEndColumn(), b.getAbsolutePath().length() + 1);
48+
List<File> dependencies = new ArrayList<>();
49+
dependencies.add(a);
5650

57-
PublishDiagnosticsParams diag = Convert.createDiagnostics("", WFile.create(dep), gui.getErrorList());
58-
assertEquals(diag.getDiagnostics().size(), 1);
59-
Diagnostic d = diag.getDiagnostics().get(0);
60-
assertEquals(d.getRange().getStart().getLine(), 1);
61-
assertEquals(d.getRange().getStart().getCharacter(), 0);
62-
assertEquals(d.getRange().getEnd().getLine(), 1);
63-
assertEquals(d.getRange().getEnd().getCharacter(), b.getAbsolutePath().length());
51+
WurstCompilerJassImpl.addDependenciesFromFolder(projectFolder, dependencies);
52+
assertEquals(dependencies.size(), 1);
53+
}
6454

55+
private boolean containsSameFile(List<File> files, File expected) {
56+
for (File f : files) {
57+
if (FileUtils.sameFile(f, expected)) {
58+
return true;
59+
}
60+
}
61+
return false;
6562
}
6663

6764
private void newCleanFolder(File f) throws IOException {

0 commit comments

Comments
 (0)