module { export = [possibleUnsafeSclValueByName, unsafeSclValueByName, sclModuleNames, moduleByName, moduleOf, nameOf, createName, valueNamesOf] } include "SCL/ReflectionJava" importJava "org.simantics.scl.compiler.module.repository.ModuleRepository" where @JavaName getValue unsafeSclValueByName_ :: ModuleRepository -> String -> a @JavaName getSourceRepository moduleSourceRepositoryOf :: ModuleRepository -> ModuleSourceRepository @JavaName getModule moduleByName_ :: ModuleRepository -> String -> Failable Module importJava "org.simantics.scl.compiler.source.repository.ModuleSourceRepository" where data ModuleSourceRepository @JavaName getModuleNames sclModuleNames_ :: ModuleSourceRepository -> [String] importJava "org.simantics.scl.compiler.errors.Failable" where data Failable a didSucceed :: Failable a -> Boolean getResult :: Failable a -> Maybe a importJava "org.simantics.scl.compiler.module.Module" where data Module @JavaName getValueNames valueNamesOf_ :: Module -> [String] importJava "org.simantics.scl.compiler.common.names.Name" where data Name @JavaName module moduleOf_ :: Name -> String @JavaName name nameOf_ :: Name -> String @JavaName create createName_ :: String -> String -> Name instance Show Name where sb <+ n = sb << moduleOf n << "/" << nameOf n moduleOf = moduleOf_ nameOf = nameOf_ createName = createName_ valueNamesOf = valueNamesOf_ type Location = Long unsafeSclValueByName :: String -> a unsafeSclValueByName = unsafeSclValueByName_ MODULE_REPOSITORY possibleUnsafeSclValueByName :: String -> Maybe a possibleUnsafeSclValueByName name = Just (unsafeSclValueByName name) `catch` \(_ :: Exception) -> Nothing sclModuleNames :: [String] sclModuleNames = sclModuleNames_ (moduleSourceRepositoryOf MODULE_REPOSITORY) moduleByName :: String -> Maybe Module moduleByName name = getResult failable where failable = moduleByName_ MODULE_REPOSITORY name