private void maybeAssignGosuType(String strType) { if (strType.contains(IGosuProgram.NAME_PREFIX + "eval_")) { // Never load an eval class here, they should always load in a single-serving loader return; } ClassLoader loader = TypeSystem.getGosuClassLoader().getActualLoader(); TypeSystemLockHelper.getTypeSystemLockWithMonitor(loader); try { IModule global = TypeSystem.getGlobalModule(); IType type; TypeSystem.pushModule(global); try { type = TypeSystem.getByFullNameIfValidNoJava(strType); } finally { TypeSystem.popModule(global); } if (type instanceof ICompilableType) { if (!isInSingleServingLoader(type.getEnclosingType())) { _type = (ICompilableType) type; } } } finally { TypeSystem.unlock(); } }
@Override public Class loadClass(String strName) throws ClassNotFoundException { TypeSystemLockHelper.getTypeSystemLockWithMonitor(_loader); try { String strGsName = strName.replace('$', '.'); // ## hack: if (strGsName.startsWith("com.guidewire.commons.metadata.proxy._generated.iface.")) { strGsName = "entity." + strGsName.substring(strName.lastIndexOf('.') + 1); } IType type = TypeSystem.getByFullNameIfValid(strGsName); if (type instanceof IGosuClassInternal) { return ((IGosuClassInternal) type).getBackingClass(); } else if (type instanceof IJavaBackedType) { return ((IJavaBackedType) type).getBackingClass(); } return _loader.loadClass(strName); } finally { TypeSystem.unlock(); } }
private void init() { if (_buf == null) { ClassLoader loader = TypeSystem.getGosuClassLoader().getActualLoader(); TypeSystemLockHelper.getTypeSystemLockWithMonitor(loader); try { if (_bInterfaceAnnotationMethods) { _buf = TransformingCompiler.compileInterfaceMethodsClass( (IGosuClassInternal) _type, false); } else { // System.out.println( "Compiling: " + _type.getName() ); _buf = GosuClassLoader.instance().getBytes(_type); } _pos = 0; _count = _buf.length; } catch (Throwable e) { // log the exception, it tends to get swollowed esp. if it's the class doesn't parse e.printStackTrace(); throw GosuExceptionUtil.forceThrow(e); } finally { TypeSystem.unlock(); } } }