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); }
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; } }