private CreateResourceModel.KeyStringDocumentStatus DoesKeyConflict(DocumentNode conflictingResource, List <DocumentCompositeNode> resourcesHostNodePath)
 {
     CreateResourceModel.KeyStringDocumentStatus stringDocumentStatus = CreateResourceModel.KeyStringDocumentStatus.None;
     if (conflictingResource != null)
     {
         DocumentCompositeNode currentResourcesDictionary = this.CurrentResourceSite != null ? this.CurrentResourceSite.HostNode : (DocumentCompositeNode)null;
         if (currentResourcesDictionary != null)
         {
             int index = resourcesHostNodePath.FindIndex((Predicate <DocumentCompositeNode>)(arg => object.ReferenceEquals((object)currentResourcesDictionary, (object)arg)));
             if (!this.resourceType.IsAssignableFrom(conflictingResource.TargetType) && !conflictingResource.TargetType.IsAssignableFrom(this.resourceType))
             {
                 stringDocumentStatus |= CreateResourceModel.KeyStringDocumentStatus.IncompatibleTypes;
             }
             if (index == -1)
             {
                 stringDocumentStatus |= CreateResourceModel.KeyStringDocumentStatus.Masked;
             }
             else if (index == resourcesHostNodePath.Count - 1)
             {
                 stringDocumentStatus |= CreateResourceModel.KeyStringDocumentStatus.Direct;
             }
             else
             {
                 stringDocumentStatus |= CreateResourceModel.KeyStringDocumentStatus.Masking;
             }
         }
     }
     return(stringDocumentStatus);
 }
 private void AnalyzeKeyString()
 {
     CreateResourceModel.KeyStringDocumentStatus stringDocumentStatus = this.keyStringDocumentStatus;
     this.keyStringDocumentStatus = this.AnalyzeKeyStringWorker();
     if (this.keyStringDocumentStatus == stringDocumentStatus)
     {
         return;
     }
     this.OnPropertyChanged("KeyStringHasIssues");
     this.OnPropertyChanged("ResourceIsValid");
     this.OnPropertyChanged("CommitActionName");
     this.OnPropertyChanged("KeyStringWarningText");
 }
 private CreateResourceModel.KeyStringDocumentStatus AnalyzeKeyStringWorker()
 {
     CreateResourceModel.KeyStringDocumentStatus stringDocumentStatus1 = CreateResourceModel.KeyStringDocumentStatus.None;
     if (string.IsNullOrEmpty(this.keyString))
     {
         stringDocumentStatus1 = CreateResourceModel.KeyStringDocumentStatus.Empty;
     }
     else
     {
         if (this.viewModel == null || this.viewModel.Document == null)
         {
             return(stringDocumentStatus1);
         }
         if (this.ValidateKeyAsName && !new SceneNodeIDHelper(this.viewModel, this.NameScope).IsValidElementID(this.NamedElement, this.keyString))
         {
             stringDocumentStatus1 |= CreateResourceModel.KeyStringDocumentStatus.InvalidName;
         }
         if (this.nearestResourceScopeElement != null)
         {
             IDocumentContext             documentContext        = this.viewModel.Document.DocumentContext;
             DocumentNode                 keyNode                = !this.applyAutomatically ? (DocumentNode)documentContext.CreateNode(this.keyString) : (DocumentNode)documentContext.CreateNode(PlatformTypes.Type, (IDocumentNodeValue) new DocumentNodeMemberValue((IMember)documentContext.TypeResolver.GetType(this.TargetType)));
             ExpressionEvaluator          expressionEvaluator    = new ExpressionEvaluator(this.viewModel.DocumentRootResolver);
             List <DocumentCompositeNode> resourcesHostNodePath1 = new List <DocumentCompositeNode>();
             DocumentNode                 conflictingResource1   = expressionEvaluator.EvaluateResourceAndCollectionPath(this.nearestResourceScopeElement.DocumentNodePath, ResourceReferenceType.Dynamic, keyNode, (ICollection <DocumentCompositeNode>)resourcesHostNodePath1, (ICollection <IDocumentRoot>)null);
             CreateResourceModel.KeyStringDocumentStatus stringDocumentStatus2 = stringDocumentStatus1 | this.DoesKeyConflict(conflictingResource1, resourcesHostNodePath1);
             List <DocumentCompositeNode> resourcesHostNodePath2 = new List <DocumentCompositeNode>();
             DocumentNode conflictingResource2 = expressionEvaluator.EvaluateResourceAndCollectionPath(this.nearestResourceScopeElement.DocumentNodePath, ResourceReferenceType.Static, keyNode, (ICollection <DocumentCompositeNode>)resourcesHostNodePath2, (ICollection <IDocumentRoot>)null);
             stringDocumentStatus1 = stringDocumentStatus2 | this.DoesKeyConflict(conflictingResource2, resourcesHostNodePath2);
         }
         else if (this.CurrentResourceSite != null)
         {
             DocumentCompositeNode resource = this.CurrentResourceSite.FindResource(this.viewModel.DocumentRootResolver, this.keyString, (ICollection <DocumentCompositeNode>)null, (ICollection <IDocumentRoot>)null);
             if (resource != null)
             {
                 if (!this.resourceType.IsAssignableFrom(resource.TargetType) && !resource.TargetType.IsAssignableFrom(this.resourceType))
                 {
                     stringDocumentStatus1 |= CreateResourceModel.KeyStringDocumentStatus.IncompatibleTypes;
                 }
                 stringDocumentStatus1 |= CreateResourceModel.KeyStringDocumentStatus.Direct;
             }
         }
     }
     return(stringDocumentStatus1);
 }
 private bool CheckStatus(CreateResourceModel.KeyStringDocumentStatus status, CreateResourceModel.KeyStringDocumentStatus test)
 {
     return((status & test) == test);
 }