]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Merge "Change universal type variables to existential in requested value types"
authorHannu Niemistö <hannu.niemisto@semantum.fi>
Mon, 30 Oct 2017 17:41:45 +0000 (19:41 +0200)
committerGerrit Code Review <gerrit2@www.simantics.org>
Mon, 30 Oct 2017 17:41:45 +0000 (19:41 +0200)
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/java/LoggingModule.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/ProceduralModuleSourceRepository.java
bundles/org.simantics.scl.runtime/scl/MList.scl

index dadc13aa7ee3e926a894d7cfbbe846c69d82c7b9..552c93f6464f0e61e8baea3fe1e6ceec6db29f7e 100644 (file)
@@ -4,6 +4,7 @@ import org.cojen.classfile.TypeDesc;
 import org.osgi.service.component.annotations.Component;
 import org.simantics.scl.compiler.commands.CommandSession;
 import org.simantics.scl.compiler.common.names.Name;
+import org.simantics.scl.compiler.compilation.CompilationContext;
 import org.simantics.scl.compiler.constants.JavaMethod;
 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.expressions.EApply;
@@ -63,12 +64,7 @@ public class LoggingModule extends ConcreteModule {
                 value.setMacroRule(new MacroRule() {
                     @Override
                     public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
-                        ConcreteModule module = context.getCompilationContext().module;
-                        String identifier;
-                        if (module != null)
-                            identifier = module.getName().replaceAll("/", ".");
-                        else
-                            identifier = CommandSession.class.getName();
+                        String identifier = resolveModuleIdentifier(context.getCompilationContext());
                         apply.set(new ELiteral(javaMethod), new Expression[] {
                                 new EExternalConstant(LoggerFactory.getLogger(identifier), Logger)
                         });
@@ -84,12 +80,7 @@ public class LoggingModule extends ConcreteModule {
                 value.setMacroRule(new MacroRule() {
                     @Override
                     public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
-                        ConcreteModule module = context.getCompilationContext().module;
-                        String identifier;
-                        if (module != null)
-                            identifier = module.getName().replaceAll("/", ".");
-                        else
-                            identifier = CommandSession.class.getName();
+                        String identifier = resolveModuleIdentifier(context.getCompilationContext());
                         apply.set(new ELiteral(javaMethod), new Expression[] {
                                 new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
                                 apply.parameters[0]
@@ -106,12 +97,7 @@ public class LoggingModule extends ConcreteModule {
                 value.setMacroRule(new MacroRule() {
                     @Override
                     public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
-                        ConcreteModule module = context.getCompilationContext().module;
-                        String identifier;
-                        if (module != null)
-                            identifier = module.getName().replaceAll("/", ".");
-                        else
-                            identifier = CommandSession.class.getName();
+                        String identifier = resolveModuleIdentifier(context.getCompilationContext());
                         apply.set(new ELiteral(javaMethod), new Expression[] {
                                 new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
                                 apply.parameters[0],
@@ -129,12 +115,7 @@ public class LoggingModule extends ConcreteModule {
                 value.setMacroRule(new MacroRule() {
                     @Override
                     public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
-                        ConcreteModule module = context.getCompilationContext().module;
-                        String identifier;
-                        if (module != null)
-                            identifier = module.getName().replaceAll("/", ".");
-                        else
-                            identifier = CommandSession.class.getName();
+                        String identifier = resolveModuleIdentifier(context.getCompilationContext());
                         apply.set(new ELiteral(javaMethod), new Expression[] {
                                 new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
                                 apply.parameters[0],
@@ -152,12 +133,7 @@ public class LoggingModule extends ConcreteModule {
                 value.setMacroRule(new MacroRule() {
                     @Override
                     public Expression apply(SimplificationContext context, Type[] typeParameters, EApply apply) {
-                        ConcreteModule module = context.getCompilationContext().module;
-                        String identifier;
-                        if (module != null)
-                            identifier = module.getName().replaceAll("/", ".");
-                        else
-                            identifier = CommandSession.class.getName();
+                        String identifier = resolveModuleIdentifier(context.getCompilationContext());
                         apply.set(new ELiteral(javaMethod), new Expression[] {
                                 new EExternalConstant(LoggerFactory.getLogger(identifier), Logger),
                                 apply.parameters[0],
@@ -181,4 +157,19 @@ public class LoggingModule extends ConcreteModule {
     private static String capitalizeFirstCharacter(String input) {
         return input.substring(0, 1).toUpperCase() + input.substring(1);
     }
+    
+    private static String resolveModuleIdentifier(CompilationContext context) {
+        ConcreteModule module = context.module;
+        String identifier;
+        if (module != null) {
+            String moduleName = module.getName();
+            if (moduleName.startsWith("http://")) {
+                moduleName = moduleName.substring("http://".length());
+            }
+            identifier = moduleName.replaceAll("/", ".");
+        } else {
+            identifier = CommandSession.class.getName();
+        }
+        return identifier;
+    }
 }
index 4899f88ba66e898f281c0156d527a43f773c7fa9..8d0d2e42e5aeb0306d8262a79c6da41484e390cd 100644 (file)
@@ -16,9 +16,13 @@ import org.simantics.scl.compiler.source.ModuleSource;
 import org.simantics.scl.compiler.source.PrecompiledModuleSource;
 import org.simantics.scl.compiler.source.repository.procedural.ProceduralValueDefinition;
 import org.simantics.scl.compiler.top.ValueNotFound;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public abstract class ProceduralModuleSourceRepository implements ModuleSourceRepository {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(ProceduralModuleSourceRepository.class);
+    
     public static final String PREFIX = "procedural:";
     
     protected abstract ModuleRepository getModuleRepository(UpdateListener listener);
@@ -44,6 +48,10 @@ public abstract class ProceduralModuleSourceRepository implements ModuleSourceRe
         try {
             values = sourceModule.getValue("values");
         } catch (ValueNotFound e) {
+            return null; // normal
+        } catch (Throwable e) {
+            // abnormal exception
+            LOGGER.error("Failed to find value " + moduleName + "/values", e);
             return null;
         }
         
index 6cafe6bf4426b6091f8b28488008a451cface46b..fc4f941144a69950360b1895359f1d5a7a471a0e 100644 (file)
@@ -9,6 +9,7 @@ importJava "java.util.List" where
     size :: T a -> <Proc> Integer
     isEmpty :: T a -> <Proc> Boolean
     get :: T a -> Integer -> <Proc> a
+    set :: T a -> Integer -> a -> <Proc> Maybe a
     
     add :: T a -> a -> <Proc> ()
     addAll :: T a -> [a] -> <Proc> ()