示例#1
0
        private IPropertyMember InitializeResourceManager()
        {
            //Declare the resource manager field.
            this.resourceManagerDataMember = this.Fields.AddNew(new TypedName("_resourceManager", typeof(ResourceManager)));
            //The property...
            this.resourceManager = this.Properties.AddNew(new TypedName("ResourceManager", resourceManagerDataMember.FieldType), true, false);
            //Full resolution.
            resourceManagerDataMember.FieldType.ResolutionOptions = TypeReferenceResolveOptions.GlobalType;
            IFieldReferenceExpression resourceManagerDataMemberRef = resourceManagerDataMember.GetReference();
            //Check if it's null,
            IConditionStatement ics = resourceManager.GetPart.IfThen((Expression.Expression)resourceManagerDataMemberRef == PrimitiveExpression.NullValue);

            //If it is and the parent is a namespace, then use the assembly's resource.
            if (this.ParentTarget is INameSpaceDeclaration || this.parentTarget is IIntermediateProject)
            {
                ics.Assign(resourceManagerDataMemberRef, new CreateNewObjectExpression(resourceManagerDataMember.FieldType, new PrimitiveExpression("Resources"), (new TypeOfExpression(this)).GetProperty("Assembly")));
            }
            //Otherwise the resource is for the contianing type.
            else if (this.parentTarget is IDeclaredType)
            {
                ics.Assign(resourceManagerDataMemberRef, new CreateNewObjectExpression(resourceManagerDataMember.FieldType, new TypeOfExpression(this)));
            }
            //Yield the return of the data member.
            resourceManager.GetPart.Return(resourceManagerDataMemberRef);
            return(this.resourceManager);
        }
示例#2
0
 public virtual void TranslateMember(IPropertyMember propertyMember)
 {
     if (propertyMember is IIndexerMember)
     {
         this.TranslateMember((IIndexerMember)propertyMember);
         return;
     }
     this.TranslateMember <IMemberParentType>(propertyMember);
 }
示例#3
0
 public void Dispose()
 {
     if (this.parentTarget == null || this.statements == null)
     {
         return;
     }
     this.parentTarget = null;
     this.statements.Dispose();
     this.statements = null;
 }
示例#4
0
 public void ReferenceDeclaration(IPropertyMember declaration)
 {
     if (declaration is IIntermediatePropertyMember)
     {
         this.ReferenceDeclaration((IIntermediatePropertyMember)declaration);
     }
     else
     {
         this.Formatter.ReferenceDeclaration(declaration);
     }
 }
示例#5
0
 public void Dispose()
 {
     if (this.autoMember != null)
     {
         this.autoMember.Dispose();
         this.autoMember = null;
     }
     if (this.dataMember != null)
     {
         this.dataMember.Dispose();
         this.dataMember = null;
     }
     if (this.declarationTarget != null)
     {
         this.declarationTarget = null;
     }
     this.namePrimitive = null;
     this.name          = null;
     this.value         = null;
 }
示例#6
0
        public void Rebuild()
        {
            if (this.autoMember != null)
            {
                this.declarationTarget.Properties.Remove(this.autoMember);
                this.autoMember.Dispose();
            }
            if (this.dataMember != null)
            {
                this.declarationTarget.Fields.Remove(this.dataMember);
                this.dataMember.Dispose();
            }
            switch (this.declarationTarget.GenerationType)
            {
            case ResourceGenerationType.GeneratedClass:
                this.autoMember             = declarationTarget.Properties.AddNew(new TypedName(name, typeof(string)), true, false);
                this.autoMember.AccessLevel = DeclarationAccessLevel.Internal;
                this.namePrimitive          = new PrimitiveExpression(name);
                this.autoMember.GetPart.Return(declarationTarget.ResourceManager.GetReference().GetMethod("GetString").Invoke(namePrimitive));
                break;

            case ResourceGenerationType.GeneratedClassWithCache:
                this.dataMember             = declarationTarget.Fields.AddNew(new TypedName(string.Format("__{0}_dm_", name), typeof(string)));
                this.autoMember             = declarationTarget.Properties.AddNew(new TypedName(name, typeof(string)), true, false);
                this.dataMember.IsStatic    = true;
                this.autoMember.IsStatic    = true;
                this.dataMember.AccessLevel = DeclarationAccessLevel.Private;
                this.autoMember.AccessLevel = DeclarationAccessLevel.Internal;
                IFieldReferenceExpression dataMemberReference = dataMember.GetReference();
                IConditionStatement       ics = this.autoMember.GetPart.IfThen((Expression.Expression)dataMemberReference == PrimitiveExpression.NullValue);
                this.namePrimitive = new PrimitiveExpression(name);
                ics.Assign(dataMemberReference, declarationTarget.ResourceManager.GetReference().GetMethod("GetString").Invoke(namePrimitive));
                this.autoMember.GetPart.Return(dataMemberReference);
                break;

            default:
                break;
            }
        }
示例#7
0
 public void ReferenceDeclaration(IPropertyMember declaration)
 {
 }
示例#8
0
 public void ReferenceDeclaration(IPropertyMember declaration)
 {
     referenceStack.Push(declaration);
 }
示例#9
0
 public PropertySetBodyMember(IPropertyMember parentTarget)
     : base(PropertyBodyMemberPart.SetPart, parentTarget)
 {
 }
示例#10
0
 public PropertyBodyMember(PropertyBodyMemberPart part, IPropertyMember parentTarget)
 {
     this.part         = part;
     this.parentTarget = parentTarget;
 }