Skip to content

Commit e33d9f0

Browse files
committed
Fix issues with Access Transformers and running in CI/Binary patch mode.
1 parent 874c40a commit e33d9f0

21 files changed

Lines changed: 221 additions & 245 deletions

File tree

build.gradle

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@ subprojects.forEach { Project subProject ->
6565
subProject.java.toolchain.languageVersion = JavaLanguageVersion.of(project.java_version)
6666
subProject.java.withSourcesJar()
6767

68-
//We exclude ASM from all subprojects, it is handled by Gradle itself.
69-
subProject.configurations.configureEach { Configuration configuration ->
70-
configuration.exclude group: 'org.ow2.asm'
71-
}
72-
7368
['apiElements', 'runtimeElements'].each {
7469
subProject.configurations.named(it).configure {
7570
attributes {

common/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ dependencies {
3535
api "net.neoforged:JarJarMetadata:${project.jarjar_version}"
3636
api "net.neoforged:JarJarSelector:${project.jarjar_version}"
3737

38+
api "org.ow2.asm:asm:${project.asm_version}"
39+
api "org.ow2.asm:asm-commons:${project.asm_version}"
40+
api "org.ow2.asm:asm-tree:${project.asm_version}"
41+
3842
// IDE support
3943
api "gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:${project.gradle_idea_extension_version}"
4044
}

common/src/main/java/net/neoforged/gradle/common/tasks/PotentiallySignJar.java

Lines changed: 0 additions & 182 deletions
This file was deleted.

common/src/main/java/net/neoforged/gradle/common/tasks/RawAndSourceCombiner.java

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package net.neoforged.gradle.common.tasks;
2+
3+
import net.neoforged.gradle.common.runtime.tasks.DefaultRuntime;
4+
import net.neoforged.gradle.common.services.caching.CachedExecutionService;
5+
import net.neoforged.gradle.common.services.caching.jobs.ICacheableJob;
6+
import net.neoforged.gradle.dsl.common.tasks.WithOperations;
7+
import net.neoforged.gradle.dsl.common.tasks.WithOutput;
8+
import net.neoforged.gradle.dsl.common.tasks.WithWorkspace;
9+
import net.neoforged.gradle.dsl.common.tasks.specifications.InputFileSpecification;
10+
import net.neoforged.gradle.util.ClassVisitingFileTreeVisitor;
11+
import org.gradle.api.provider.Property;
12+
import org.gradle.api.services.ServiceReference;
13+
import org.gradle.api.tasks.CacheableTask;
14+
import org.gradle.api.tasks.TaskAction;
15+
import org.objectweb.asm.ClassVisitor;
16+
import org.objectweb.asm.MethodVisitor;
17+
import org.objectweb.asm.Opcodes;
18+
19+
import java.io.FileOutputStream;
20+
import java.io.IOException;
21+
import java.util.zip.ZipOutputStream;
22+
23+
@CacheableTask
24+
public abstract class StripFinalFromParametersTask extends DefaultRuntime implements WithOutput, InputFileSpecification, WithOperations, WithWorkspace
25+
{
26+
public StripFinalFromParametersTask() {
27+
super();
28+
}
29+
30+
@ServiceReference(CachedExecutionService.NAME)
31+
public abstract Property<CachedExecutionService> getCacheService();
32+
33+
@TaskAction
34+
public void stripFinal() throws IOException {
35+
getCacheService().get()
36+
.cached(this,
37+
ICacheableJob.Default.file(this::doStripFinal, getOutput())
38+
)
39+
.execute();
40+
}
41+
42+
private void doStripFinal() throws IOException {
43+
var input = getArchiveOperations().zipTree(getInput());
44+
try(final FileOutputStream fos = new FileOutputStream(ensureFileWorkspaceReady(getOutput()));
45+
final ZipOutputStream zos = new ZipOutputStream(fos)) {
46+
final ClassVisitingFileTreeVisitor visitor = new ClassVisitingFileTreeVisitor(zos, StripFinalClassVisitor::new);
47+
input.visit(visitor);
48+
}
49+
}
50+
51+
private static class StripFinalClassVisitor extends ClassVisitor {
52+
public StripFinalClassVisitor(int api, ClassVisitor classVisitor) {
53+
super(api, classVisitor);
54+
}
55+
56+
@Override
57+
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
58+
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
59+
return new StripFinalParameterVisitor(api, mv);
60+
}
61+
}
62+
63+
private static class StripFinalParameterVisitor extends MethodVisitor {
64+
public StripFinalParameterVisitor(int api, MethodVisitor methodVisitor) {
65+
super(api, methodVisitor);
66+
}
67+
68+
@Override
69+
public void visitParameter(String name, int access) {
70+
// Remove ACC_FINAL from parameter access flags
71+
int newAccess = access & ~Opcodes.ACC_FINAL;
72+
super.visitParameter(name, newAccess);
73+
}
74+
}
75+
}

dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/tasks/specifications/InputFileSpecification.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import org.gradle.api.file.RegularFileProperty
55
import org.gradle.api.tasks.InputFile
66
import org.gradle.api.tasks.Optional
77
import org.gradle.api.tasks.OutputFile
8+
import org.gradle.api.tasks.PathSensitive
9+
import org.gradle.api.tasks.PathSensitivity
810

911
/**
1012
* Represents an object with an input file.
@@ -20,5 +22,6 @@ trait InputFileSpecification implements ProjectSpecification {
2022
@DSLProperty
2123
@InputFile
2224
@Optional
25+
@PathSensitive(PathSensitivity.NONE)
2326
abstract RegularFileProperty getInput();
2427
}

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ gradle_idea_extension_version=1.2
2828
groovy_dsl_improver_version=2.0.0
2929
eclipse_launch_configs_version=0.1.3
3030
vscode_launch_configs_version=1.0.8
31+
asm_version=9.9
3132

3233
#Test dependencies
3334
junit_version=5.9.2

userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/AdvancedFmlTests.groovy

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class AdvancedFmlTests extends BuilderBasedTestSpecification {
2121
}
2222
}
2323
24+
repositories {
25+
mavenLocal()
26+
}
27+
2428
dependencies {
2529
implementation 'net.neoforged:neoforge:+'
2630
}
@@ -49,6 +53,10 @@ class AdvancedFmlTests extends BuilderBasedTestSpecification {
4953
}
5054
}
5155
56+
repositories {
57+
mavenLocal()
58+
}
59+
5260
dependencies {
5361
implementation 'net.neoforged:neoforge:+'
5462
}

0 commit comments

Comments
 (0)