X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2Fannotations%2FAnnotationUtils.java;h=08ea47297b7363bd8974c24154aa767b8e4d076b;hb=2f63e7a58e49a233b28c6968b848281060117c43;hp=fb7334cd2b2cf52cdbd1faf85dc266b762af9bc8;hpb=7045f0f516c243563976207abcec13a68891ff1d;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/annotations/AnnotationUtils.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/annotations/AnnotationUtils.java index fb7334cd2..08ea47297 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/annotations/AnnotationUtils.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/annotations/AnnotationUtils.java @@ -1,12 +1,39 @@ package org.simantics.scl.compiler.elaboration.expressions.annotations; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + import org.simantics.scl.compiler.constants.StringConstant; +import org.simantics.scl.compiler.elaboration.expressions.EListLiteral; import org.simantics.scl.compiler.elaboration.expressions.ELiteral; import org.simantics.scl.compiler.elaboration.expressions.EStringLiteral; import org.simantics.scl.compiler.elaboration.expressions.EVar; import org.simantics.scl.compiler.elaboration.expressions.Expression; +import org.simantics.scl.compiler.errors.ErrorLog; +import org.simantics.scl.compiler.internal.parsing.declarations.DAnnotationAst; public class AnnotationUtils { + /** + * Processes an annotation of form + *
@Annotation "text"
+ * or + *
@Annotation text
+ */ + public static String processStringAnnotation(ErrorLog errorLog, DAnnotationAst annotation) { + if(annotation.parameters.length != 1) + errorLog.log(annotation.location, "Expected one string parameter for " + annotation.id.text); + String result = extractString(annotation.parameters[0]); + if(result == null) + errorLog.log(annotation.location, "Expected a string parameter for " + annotation.id.text); + return result; + } + + public static void processTagAnnotation(ErrorLog errorLog, DAnnotationAst annotation) { + if(annotation.parameters.length != 0) + errorLog.log(annotation.location, "Expected no parameters for " + annotation.id.text); + } + public static String extractString(Expression expression) { if(expression instanceof EVar) return ((EVar)expression).name; @@ -24,4 +51,21 @@ public class AnnotationUtils { } return null; } + + public static List extractIdentifierList(Expression expression) { + if(expression instanceof EVar || expression instanceof EStringLiteral || expression instanceof ELiteral) + return Collections.singletonList(new EVar(expression.location, extractString(expression))); + else if(expression instanceof EListLiteral) { + Expression[] components = ((EListLiteral)expression).getComponents(); + EVar[] items = new EVar[components.length]; + for(int i=0;i