package org.simantics.scl.compiler.runtime;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import org.simantics.scl.compiler.internal.codegen.utils.JavaNamingPolicy;
import org.simantics.scl.compiler.internal.codegen.utils.TransientClassBuilder;
import org.simantics.scl.compiler.module.Module;
-import org.simantics.scl.compiler.top.SCLCompilerConfiguration;
import org.simantics.scl.compiler.top.ValueNotFound;
-import com.strobel.assembler.metadata.Buffer;
-import com.strobel.assembler.metadata.ClasspathTypeLoader;
-import com.strobel.assembler.metadata.CompositeTypeLoader;
-import com.strobel.assembler.metadata.ITypeLoader;
-import com.strobel.decompiler.Decompiler;
-import com.strobel.decompiler.DecompilerSettings;
-import com.strobel.decompiler.PlainTextOutput;
-
import gnu.trove.map.hash.THashMap;
public class RuntimeModule {
bytes = localClasses.get(internalName);
if(bytes == null)
throw new ClassNotFoundException(name);
- }
- if(SCLCompilerConfiguration.SHOW_LOADED_CLASSES_DISASSEMBLED) {
- DecompilerSettings settings = DecompilerSettings.javaDefaults();
- ITypeLoader typeLoader = new ITypeLoader() {
- @Override
- public boolean tryLoadType(String internalName, Buffer buffer) {
- byte[] bytes = getBytes(internalName);
- if(bytes != null) {
- buffer.reset(bytes.length);
- buffer.putByteArray(bytes, 0, bytes.length);
- buffer.position(0);
- return true;
- }
- else
- return false;
- }
- };
- settings.setTypeLoader(new CompositeTypeLoader(typeLoader, new ClasspathTypeLoader()));
- OutputStreamWriter writer = new OutputStreamWriter(System.out);
- PlainTextOutput output = new PlainTextOutput(writer);
- Decompiler.decompile(name, output, settings);
- try {
- writer.flush();
- } catch (IOException e) {
- }
- }
+ }
return defineClass(name, bytes, 0, bytes.length);
}
public RuntimeModule(Module module, RuntimeModuleMap parentModuleMap,
ClassLoader parentClassLoader) {
+ if(parentClassLoader == null)
+ throw new NullPointerException();
this.module = module;
this.parentModuleMap = parentModuleMap;
this.classLoader = new ModuleClassLoader(parentClassLoader);