Modify src debuginfo to make stacktraces less cryptical

This commit is contained in:
Lucwousin
2020-01-02 13:41:35 +01:00
parent e2fc5ae3d9
commit eee8c73a5b
10 changed files with 198 additions and 23 deletions

View File

@@ -23,6 +23,8 @@ import com.openosrs.injector.injectors.raw.RasterizerAlpha;
import com.openosrs.injector.injectors.raw.RenderDraw;
import com.openosrs.injector.injectors.raw.ScriptVM;
import com.openosrs.injector.rsapi.RSApi;
import com.openosrs.injector.transformers.InjectTransformer;
import com.openosrs.injector.transformers.SourceChanger;
import java.io.File;
import java.io.IOException;
import net.runelite.deob.util.JarUtil;
@@ -78,6 +80,8 @@ public class Injection extends InjectData implements InjectTaskHandler
inject(new HidePlayerAttacks(this));
validate(new InjectorValidator(this));
transform(new SourceChanger(this));
}
public void save(File outputJar) throws IOException
@@ -113,6 +117,17 @@ public class Injection extends InjectData implements InjectTaskHandler
}
}
private void transform(InjectTransformer transformer)
{
final String name = transformer.getName();
log.info("Starting {}", name);
transformer.transform();
log.lifecycle("{} {}", name, transformer.getCompletionMsg());
}
public void runChildInjector(Injector injector) throws Injexception
{
inject(injector);

View File

@@ -9,14 +9,16 @@ package com.openosrs.injector;
import com.openosrs.injector.injection.InjectData;
import com.openosrs.injector.rsapi.RSApi;
import static com.openosrs.injector.rsapi.RSApi.API_BASE;
import com.openosrs.injector.rsapi.RSApiClass;
import com.openosrs.injector.rsapi.RSApiMethod;
import lombok.RequiredArgsConstructor;
import net.runelite.asm.ClassFile;
import net.runelite.asm.pool.Class;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
import static com.openosrs.injector.rsapi.RSApi.API_BASE;
@RequiredArgsConstructor
public class InjectorValidator implements Validator
{
private static final Logger log = Logging.getLogger(InjectorValidator.class);
@@ -25,11 +27,6 @@ public class InjectorValidator implements Validator
private int missing = 0, okay = 0, wtf = 0;
InjectorValidator(InjectData inject)
{
this.inject = inject;
}
public boolean validate()
{
final RSApi rsApi = inject.getRsApi();

View File

@@ -7,7 +7,7 @@
*/
package com.openosrs.injector;
public class Injexception extends Exception
public class Injexception extends RuntimeException
{
public Injexception(String message)
{

View File

@@ -9,20 +9,17 @@ package com.openosrs.injector.injectors;
import com.google.common.base.Stopwatch;
import com.openosrs.injector.injection.InjectData;
import lombok.RequiredArgsConstructor;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
@RequiredArgsConstructor
public abstract class AbstractInjector implements Injector
{
protected final InjectData inject;
protected final Logger log = Logging.getLogger(this.getClass());
private Stopwatch stopwatch;
protected AbstractInjector(InjectData inject)
{
this.inject = inject;
}
public void start()
{
stopwatch = Stopwatch.createStarted();

View File

@@ -0,0 +1,42 @@
/*
* Copyright (c) 2020, Lucas <https://github.com/Lucwousin>
* All rights reserved.
*
* This code is licensed under GPL3, see the complete license in
* the LICENSE file in the root directory of this source tree.
*/
package com.openosrs.injector.transformers;
import com.google.common.base.Stopwatch;
import com.openosrs.injector.injection.InjectData;
import lombok.RequiredArgsConstructor;
import net.runelite.asm.Named;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
@RequiredArgsConstructor
public abstract class InjectTransformer implements Named
{
protected final InjectData inject;
protected final Logger log = Logging.getLogger(this.getClass());
private Stopwatch stopwatch;
public final void transform()
{
stopwatch = Stopwatch.createStarted();
transformImpl();
}
abstract void transformImpl();
public final String getCompletionMsg()
{
return "finished in " + stopwatch.toString();
}
@Override
public final String getName()
{
return this.getClass().getSimpleName();
}
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2020, Lucas <https://github.com/Lucwousin>
* All rights reserved.
*
* This code is licensed under GPL3, see the complete license in
* the LICENSE file in the root directory of this source tree.
*/
package com.openosrs.injector.transformers;
import com.openosrs.injector.injection.InjectData;
import net.runelite.asm.ClassFile;
/**
* This class changes the java source file debug information to the rs-client file name
*/
public class SourceChanger extends InjectTransformer
{
private int n = 0;
public SourceChanger(InjectData inject)
{
super(inject);
}
@Override
void transformImpl()
{
inject.forEachPair(this::rename);
log.info("Changed source file debug information for {} classes", n);
}
private void rename(ClassFile rsclient, ClassFile vanilla)
{
++n;
final String newSrc = rsclient.getSource();
log.debug("Changing src from {} to {}", vanilla.getSource(), newSrc);
vanilla.setSource(newSrc);
}
}