Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ public void decompile(LoomInternalDecompiler.Context context) {
}

private void writeLineMap(Path output, Map<String, Map<Integer, Integer>> lineMap) {
if (lineMap.isEmpty()) {
return;
}

try (Writer writer = Files.newBufferedWriter(output, StandardCharsets.UTF_8)) {
for (Map.Entry<String, Map<Integer, Integer>> classEntry : lineMap.entrySet()) {
final String name = classEntry.getKey().replace(".", "/");
Expand Down
19 changes: 7 additions & 12 deletions src/main/java/net/fabricmc/loom/decompilers/ClassLineNumbers.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
Expand All @@ -53,14 +50,6 @@ public record ClassLineNumbers(Map<String, ClassLineNumbers.Entry> lineMap) {
}
}

public static ClassLineNumbers readMappings(Path lineMappingsPath) {
try (BufferedReader reader = Files.newBufferedReader(lineMappingsPath)) {
return readMappings(reader);
} catch (IOException e) {
throw new UncheckedIOException("Exception reading LineMappings file.", e);
}
}

public static ClassLineNumbers readMappings(BufferedReader reader) {
var lineMap = new HashMap<String, ClassLineNumbers.Entry>();

Expand All @@ -81,13 +70,16 @@ void putEntry(Map<String, ClassLineNumbers.Entry> entries, Map<Integer, Integer>

CurrentClass currentClass = null;
Map<Integer, Integer> currentMappings = new HashMap<>();
boolean didRead = false;

try {
while ((line = reader.readLine()) != null) {
if (line.isEmpty()) {
continue;
}

didRead = true;

final String[] segments = line.trim().split("\t");

if (line.charAt(0) != '\t') {
Expand All @@ -108,7 +100,10 @@ void putEntry(Map<String, ClassLineNumbers.Entry> entries, Map<Integer, Integer>
throw new RuntimeException(format("Exception reading mapping line @{0}: {1}", lineNumber, line), e);
}

assert currentClass != null;
if (!didRead) {
throw new IllegalArgumentException("Unable to read empty linemap data");
}

currentClass.putEntry(lineMap, currentMappings);

return new ClassLineNumbers(Collections.unmodifiableMap(lineMap));
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,8 @@ private static ClassLineNumbers readLineNumbers(Path linemapFile) throws IOExcep

try (BufferedReader reader = Files.newBufferedReader(linemapFile, StandardCharsets.UTF_8)) {
return ClassLineNumbers.readMappings(reader);
} catch (Exception e) {
throw new IOException("Failed to read line number map: " + linemapFile, e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,30 @@ class DecompileTest extends Specification implements GradleProjectTestTrait {
result2.task(":genSourcesWithVineflower").outcome == SUCCESS
result3.task(":genSourcesWithVineflower").outcome == SUCCESS
}

// https://github.com/FabricMC/fabric-loom/issues/1362
@Unroll
def "CFR legacy"() {
setup:
def gradle = gradleProject(project: "minimalBase", version: PRE_RELEASE_GRADLE)
gradle.buildGradle << '''
loom {
noIntermediateMappings()
clientOnlyMinecraftJar()
}

dependencies {
minecraft "com.mojang:minecraft:c0.30_01c"
mappings loom.layered() {
// No names
}
}
'''

when:
def result = gradle.run(task: "genSourcesWithCfr")

then:
result.task(":genSourcesWithCfr").outcome == SUCCESS
}
}