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; 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 { public class MappingNotFoundException extends RuntimeException {
/** /**
* Constructs a new mapping not found exception for the specified mapping. * 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) { public MappingNotFoundException(String mapping) {
super("Could not find mapping for " + 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 com.squareup.javapoet.*;
import ftbsc.lll.IInjector; import ftbsc.lll.IInjector;
import ftbsc.lll.exceptions.AmbiguousDefinitionException; import ftbsc.lll.exceptions.AmbiguousDefinitionException;
import ftbsc.lll.exceptions.InvalidResourceException;
import ftbsc.lll.exceptions.MappingNotFoundException; import ftbsc.lll.exceptions.MappingNotFoundException;
import ftbsc.lll.exceptions.TargetNotFoundException; import ftbsc.lll.exceptions.TargetNotFoundException;
import ftbsc.lll.processor.annotations.*; import ftbsc.lll.processor.annotations.*;
@ -20,6 +21,8 @@ import javax.tools.FileObject;
import javax.tools.JavaFileObject; import javax.tools.JavaFileObject;
import javax.tools.StandardLocation; import javax.tools.StandardLocation;
import java.io.*; import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
@ -61,14 +64,26 @@ public class LilleroProcessor extends AbstractProcessor {
String location = processingEnv.getOptions().get("mappingsFile"); String location = processingEnv.getOptions().get("mappingsFile");
if(location == null) if(location == null)
mapper = null; mapper = null;
else { //TODO: add local file else {
InputStream targetStream;
try { try {
URL url = new URL(location); URI target = new URI(location);
InputStream is = url.openStream(); targetStream = target.toURL().openStream();
mapper = new ObfuscationMapper(new BufferedReader(new InputStreamReader(is, } 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()); StandardCharsets.UTF_8)).lines());
is.close();
} catch(IOException ignored) {} //TODO: proper handling
} }
} }