feat: may now pass local files as mappings

This commit is contained in:
zaaarf 2023-03-13 13:03:49 +01:00
parent df3590d097
commit 6e2ea19ab4
No known key found for this signature in database
GPG key ID: 82240E075E31FA4C
3 changed files with 57 additions and 10 deletions

View file

@ -0,0 +1,22 @@
package ftbsc.lll.exceptions;
/**
* Thrown when a resource passed as an argument is not found.
*/
public class InvalidResourceException extends RuntimeException {
/**
* Empty constructor, used when the provided resource exists but is empty.
*/
public InvalidResourceException() {
super("The specified resource was empty!");
}
/**
* Named constructor, used when the specified resource doesn't exist.
* @param name the resource name
*/
public InvalidResourceException(String name) {
super("Specified resource " + name + " was not found!");
}
}

View file

@ -1,17 +1,27 @@
package ftbsc.lll.exceptions;
import ftbsc.lll.processor.tools.obfuscation.ObfuscationMapper;
import ftbsc.lll.processor.tools.obfuscation.IMapper;
/**
* Thrown upon failure to find the requested mapping within a loaded {@link ObfuscationMapper}.
* Thrown upon failure to find the requested mapping within a loaded {@link IMapper}.
*/
public class MappingNotFoundException extends RuntimeException {
/**
* Constructs a new mapping not found exception for the specified mapping.
* @param mapping the detail message
* @param mapping the relevant mapping
*/
public MappingNotFoundException(String mapping) {
super("Could not find mapping for " + mapping + "!");
}
/**
* Constructs a new mapping not found exception for the specified mapping
* with the specified reason.
* @param mapping the relevant mapping
* @param reason the reason message
*/
public MappingNotFoundException(String mapping, String reason) {
this(mapping + ": " + reason);
}
}

View file

@ -3,6 +3,7 @@ package ftbsc.lll.processor;
import com.squareup.javapoet.*;
import ftbsc.lll.IInjector;
import ftbsc.lll.exceptions.AmbiguousDefinitionException;
import ftbsc.lll.exceptions.InvalidResourceException;
import ftbsc.lll.exceptions.MappingNotFoundException;
import ftbsc.lll.exceptions.TargetNotFoundException;
import ftbsc.lll.processor.annotations.*;
@ -20,6 +21,8 @@ import javax.tools.FileObject;
import javax.tools.JavaFileObject;
import javax.tools.StandardLocation;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.*;
@ -61,14 +64,26 @@ public class LilleroProcessor extends AbstractProcessor {
String location = processingEnv.getOptions().get("mappingsFile");
if(location == null)
mapper = null;
else { //TODO: add local file
else {
InputStream targetStream;
try {
URL url = new URL(location);
InputStream is = url.openStream();
mapper = new ObfuscationMapper(new BufferedReader(new InputStreamReader(is,
StandardCharsets.UTF_8)).lines());
is.close();
} catch(IOException ignored) {} //TODO: proper handling
URI target = new URI(location);
targetStream = target.toURL().openStream();
} catch(URISyntaxException | IOException e) {
//may be a local file path
File f = new File(location);
if(!f.exists())
throw new InvalidResourceException(location);
try {
targetStream = new FileInputStream(f);
} catch(FileNotFoundException ex) {
throw new InvalidResourceException(location);
}
}
//assuming its tsrg file
//todo: replace crappy homebaked parser with actual library
this.mapper = new ObfuscationMapper(new BufferedReader(new InputStreamReader(targetStream,
StandardCharsets.UTF_8)).lines());
}
}