Skip to content

Commit f7dcfd5

Browse files
committed
Make folders to scan for access transformers configurable
1 parent 2766450 commit f7dcfd5

File tree

3 files changed

+91
-50
lines changed

3 files changed

+91
-50
lines changed

src/main/java/net/minecraftforge/gradle/user/UserBaseExtension.java

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,27 @@
2020
package net.minecraftforge.gradle.user;
2121

2222
import java.util.ArrayList;
23+
import java.util.Collections;
2324
import java.util.HashMap;
2425
import java.util.List;
2526
import java.util.Map;
2627
import java.util.Map.Entry;
2728

2829
import com.google.common.collect.Lists;
2930

31+
import groovy.lang.Closure;
3032
import net.minecraftforge.gradle.common.BaseExtension;
3133
import net.minecraftforge.gradle.common.Constants;
34+
import org.gradle.api.file.FileCollection;
35+
import org.gradle.api.plugins.JavaPluginConvention;
36+
import org.gradle.api.tasks.SourceSet;
3237

3338
public class UserBaseExtension extends BaseExtension
3439
{
3540
private HashMap<String, Object> replacements = new HashMap<String, Object>();
3641
private ArrayList<String> includes = new ArrayList<String>();
3742
private ArrayList<Object> ats = new ArrayList<Object>();
43+
private ArrayList<Object> atSources = new ArrayList<Object>();
3844
private String runDir = "run";
3945
private boolean makeObfSourceJar = true;
4046
private List<Object> clientJvmArgs = Lists.newArrayList();
@@ -89,15 +95,39 @@ public void at(Object obj)
8995

9096
public void ats(Object... obj)
9197
{
92-
for (Object object : obj)
93-
ats.add(object);
98+
Collections.addAll(ats, obj);
9499
}
95100

96101
public List<Object> getAccessTransformers()
97102
{
98103
return ats;
99104
}
100105

106+
//@formatter:off
107+
public void accessTransformerSource(Object obj) { atSource(obj); }
108+
public void accessTransformerSources(Object... obj) { atSources(obj); }
109+
//@formatter:on
110+
111+
public void atSource(Object obj)
112+
{
113+
atSources.add(obj);
114+
}
115+
116+
public void atSources(Object... obj)
117+
{
118+
Collections.addAll(atSources, obj);
119+
}
120+
121+
public List<Object> getAccessTransformerSources()
122+
{
123+
return atSources;
124+
}
125+
126+
public FileCollection getResolvedAccessTransformerSources()
127+
{
128+
return resolveFiles(atSources);
129+
}
130+
101131
public void setRunDir(String value)
102132
{
103133
this.runDir = value;
@@ -188,4 +218,31 @@ private List<String> resolve(List<Object> list)
188218
}
189219
return out;
190220
}
221+
222+
private Object resolveFile(Object obj)
223+
{
224+
while (obj instanceof Closure)
225+
obj = ((Closure<?>) obj).call();
226+
227+
SourceSet set = null;
228+
if (obj instanceof SourceSet)
229+
set = (SourceSet) obj;
230+
else if (obj instanceof String)
231+
{
232+
JavaPluginConvention javaConv = (JavaPluginConvention) project.getConvention().getPlugins().get("java");
233+
set = javaConv.getSourceSets().findByName((String) obj);
234+
}
235+
236+
return (set != null) ? set.getResources() : obj;
237+
}
238+
239+
protected FileCollection resolveFiles(List<Object> objects)
240+
{
241+
Object[] files = new Object[objects.size()];
242+
int i = 0;
243+
for (Object obj : objects)
244+
files[i++] = resolveFile(obj);
245+
return project.files(files).getAsFileTree();
246+
}
247+
191248
}

src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.gradle.api.plugins.JavaPlugin;
6060
import org.gradle.api.plugins.JavaPluginConvention;
6161
import org.gradle.api.plugins.MavenPluginConvention;
62+
import org.gradle.api.specs.Spec;
6263
import org.gradle.api.tasks.GroovySourceSet;
6364
import org.gradle.api.tasks.JavaExec;
6465
import org.gradle.api.tasks.ScalaSourceSet;
@@ -774,10 +775,17 @@ protected void mapConfigurations()
774775
}
775776
}
776777

777-
protected void addAtsToDeobf()
778+
private static final Spec<File> AT_SPEC = new Spec<File>()
778779
{
779-
// INFO: This method is overriden by PatcherUserBasePlugin to add the reading from resource dirs and depndencies
780+
@Override
781+
public boolean isSatisfiedBy(File file)
782+
{
783+
return file.isFile() && file.getName().toLowerCase().endsWith("_at.cfg");
784+
}
785+
};
780786

787+
protected void addAtsToDeobf()
788+
{
781789
// add src ATs
782790
DeobfuscateJar binDeobf = (DeobfuscateJar) project.getTasks().getByName(TASK_DEOBF_BIN);
783791
DeobfuscateJar decompDeobf = (DeobfuscateJar) project.getTasks().getByName(TASK_DEOBF);
@@ -786,6 +794,21 @@ protected void addAtsToDeobf()
786794
Object[] extAts = getExtension().getAccessTransformers().toArray();
787795
binDeobf.addTransformer(extAts);
788796
decompDeobf.addTransformer(extAts);
797+
798+
// grab ATs from configured resource dirs
799+
boolean addedAts = false;
800+
801+
for (File at : getExtension().getResolvedAccessTransformerSources().filter(AT_SPEC).getFiles())
802+
{
803+
project.getLogger().lifecycle("Found AccessTransformer: {}", at.getName());
804+
binDeobf.addTransformer(at);
805+
decompDeobf.addTransformer(at);
806+
addedAts = true;
807+
}
808+
809+
// TODO: search dependency jars for resources
810+
811+
useLocalCache = useLocalCache || addedAts;
789812
}
790813

791814
/**

src/main/java/net/minecraftforge/gradle/user/patcherUser/PatcherUserBasePlugin.java

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ protected void applyUserPlugin()
5757
String global = DIR_API_JAR_BASE + "/" + REPLACE_API_NAME + "%s-" + REPLACE_API_VERSION;
5858
String local = DIR_LOCAL_CACHE + "/" + REPLACE_API_NAME + "%s-" + REPLACE_API_VERSION + "-PROJECT(" + project.getName() + ")";
5959

60+
// grab ATs from resource dirs
61+
JavaPluginConvention javaConv = (JavaPluginConvention) project.getConvention().getPlugins().get("java");
62+
SourceSet main = javaConv.getSourceSets().getByName("main");
63+
SourceSet api = javaConv.getSourceSets().getByName("api");
64+
65+
getExtension().atSources(main, api);
66+
6067
this.makeDecompTasks(global, local, delayedFile(JAR_MERGED), TASK_MERGE_JARS, delayedFile(MCP_PATCHES_MERGED));
6168

6269
// setup userdev
@@ -198,52 +205,6 @@ public void execute(Project proj)
198205
project.getDependencies().add(CONFIG_MC, ImmutableMap.of("group", group, "name", artifact, "version", version));
199206
}
200207

201-
@Override
202-
protected void addAtsToDeobf()
203-
{
204-
// add src ATs
205-
DeobfuscateJar binDeobf = (DeobfuscateJar) project.getTasks().getByName(TASK_DEOBF_BIN);
206-
DeobfuscateJar decompDeobf = (DeobfuscateJar) project.getTasks().getByName(TASK_DEOBF);
207-
208-
// ATs from the ExtensionObject
209-
Object[] extAts = getExtension().getAccessTransformers().toArray();
210-
binDeobf.addTransformer(extAts);
211-
decompDeobf.addTransformer(extAts);
212-
213-
// grab ATs from resource dirs
214-
JavaPluginConvention javaConv = (JavaPluginConvention) project.getConvention().getPlugins().get("java");
215-
SourceSet main = javaConv.getSourceSets().getByName("main");
216-
SourceSet api = javaConv.getSourceSets().getByName("api");
217-
218-
boolean addedAts = false;
219-
220-
for (File at : main.getResources().getFiles())
221-
{
222-
if (at.getName().toLowerCase().endsWith("_at.cfg"))
223-
{
224-
project.getLogger().lifecycle("Found AccessTransformer in main resources: " + at.getName());
225-
binDeobf.addTransformer(at);
226-
decompDeobf.addTransformer(at);
227-
addedAts = true;
228-
}
229-
}
230-
231-
for (File at : api.getResources().getFiles())
232-
{
233-
if (at.getName().toLowerCase().endsWith("_at.cfg"))
234-
{
235-
project.getLogger().lifecycle("Found AccessTransformer in api resources: " + at.getName());
236-
binDeobf.addTransformer(at);
237-
decompDeobf.addTransformer(at);
238-
addedAts = true;
239-
}
240-
}
241-
242-
// TODO: search dependency jars for resources
243-
244-
useLocalCache = useLocalCache || addedAts;
245-
}
246-
247208
@Override
248209
protected Object getStartDir()
249210
{

0 commit comments

Comments
 (0)