public JNode VisitMemberResolveResult(MemberResolveResult res) { var me = res.Member; JNode node2; bool enumValuesAsNames; if (me == null) //TODO: dynamics { throw new NotImplementedException(); //var node3 = Js.Member(node.MemberName); //if (node.Target != null) // node3.PreviousMember = VisitExpression(node.Target); //return node3; } else if (IsEntityFunctionProperty(res.Member, res))//(Entity)node.entity)) { var pe = (IProperty)me; var xxx = new CSharpInvocationResolveResult(res.TargetResult, pe.Getter, null); node2 = Visit(xxx); return(node2); } else if (me.IsEnumMember() && JMeta.UseJsonEnums(me, out enumValuesAsNames)) { var me2 = (IField)me; if (enumValuesAsNames) { return(J.String(JNaming.JName(me2))); } else { return(J.Value(me2.ConstantValue)); } } //TODO: Support a way to override this (JsField.ConstantInlining=false) else if (res.IsCompileTimeConstant && !me.IsEnumMember()) { return(J.Value(res.ConstantValue)); } else { var node3 = JNaming.JAccess(me); node2 = node3; if (res.TargetResult != null && !me.IsStatic()) { var instanceContext = VisitExpression(res.TargetResult); if (node3.Name.IsNullOrEmpty()) //support Name="" { node2 = instanceContext; } else { node3.PreviousMember = instanceContext; } } } return(node2); }
public virtual List <JEntityDeclaration> _VisitEnum(ITypeDefinition ce) { var unit = new JUnit { Statements = new List <JStatement>() }; ExportTypeNamespace(ce); var att = ce.GetMetadata <JEnumAttribute>(); bool valuesAsNames; JMeta.UseJsonEnums(ce, out valuesAsNames); //var valuesAsNames = att != null && att.ValuesAsNames; var constants = ce.GetConstants().ToList(); if (!valuesAsNames && constants.Where(t => t.ConstantValue == null).FirstOrDefault() != null) { var value = 0L; foreach (var c in constants) { if (c.ConstantValue == null) { c.SetConstantValue(value); } else { value = Convert.ToInt64(c.ConstantValue); } value++; } } constants.RemoveAll(t => !JMeta.IsJsExported(t)); var json = new JJsonObjectExpression { NamesValues = new List <JJsonNameValue>() }; json.NamesValues.AddRange(constants.Select(t => Export(t, valuesAsNames))); var st = ce.JAccess().Assign(json).Statement(); unit.Statements.Add(st); throw new NotSupportedException(); }