예제 #1
0
        public override RdUsageGroup CreateModel(IOccurrence occurrence, IOccurrenceBrowserDescriptor descriptor)
        {
            using (CompilationContextCookie.GetExplicitUniversalContextIfNotSet())
            {
                if (occurrence is ReferenceOccurrence referenceOccurrence &&
                    referenceOccurrence.PrimaryReference is IUnityYamlReference reference)
                {
                    var document   = reference.ComponentDocument;
                    var sourceFile = document.GetSourceFile();
                    if (sourceFile == null || !sourceFile.IsValid())
                    {
                        return(EmptyModel());
                    }

                    var anchor = UnitySceneDataUtil.GetAnchorFromBuffer(document.GetTextAsBuffer());
                    if (anchor == null)
                    {
                        return(EmptyModel());
                    }

                    return(CreateModel(UnityObjectPsiUtil.GetGameObjectPathFromComponent(myUnitySceneDataLocalCache, sourceFile, anchor)));
                }
            }

            return(EmptyModel());
        }
예제 #2
0
        public bool IsEventHandler([NotNull] IMethod declaredElement)
        {
            var sourceFiles = declaredElement.GetSourceFiles();

            // The methods and property setters that we are interested in will only have a single source file
            if (sourceFiles.Count != 1)
            {
                return(false);
            }

            foreach (var assetGuid in myShortNameToAssetGuid[declaredElement.ShortName])
            {
                var invokedType = UnityObjectPsiUtil.GetTypeElementFromScriptAssetGuid(mySolution, assetGuid);
                if (invokedType != null)
                {
                    var members = invokedType.GetAllClassMembers(declaredElement.ShortName);
                    foreach (var member in members)
                    {
                        if (Equals(member.Element, declaredElement))
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
예제 #3
0
        private FindUsageResultElement CreateRequest([NotNull] IUnityYamlReference currentReference, [CanBeNull] IUnityYamlReference selectedReference)
        {
            var monoScriptDocument = currentReference.ComponentDocument;

            var sourceFile = monoScriptDocument?.GetSourceFile();

            if (sourceFile == null)
            {
                return(null);
            }

            var pathElements = UnityObjectPsiUtil.GetGameObjectPathFromComponent(mySceneProcessor, currentReference.ComponentDocument).RemoveEnd("\\").Split("\\");

            // Constructing path of child indices
            var consumer = new UnityChildPathSceneConsumer();

            mySceneProcessor.ProcessSceneHierarchyFromComponentToRoot(monoScriptDocument, consumer);


            if (!GetPathFromAssetFolder(sourceFile, out var pathFromAsset, out var fileName, out var extension))
            {
                return(null);
            }
            bool needExpand = currentReference == selectedReference;
            bool isPrefab   = extension.Equals(UnityYamlConstants.Prefab, StringComparison.OrdinalIgnoreCase);

            return(new FindUsageResultElement(isPrefab, needExpand, pathFromAsset, fileName, pathElements, consumer.RootIndices.ToArray().Reverse().ToArray()));
        }
 public override RdUsageGroup CreateModel(IOccurrence occurrence, IOccurrenceBrowserDescriptor descriptor)
 {
     if (occurrence is ReferenceOccurrence referenceOccurrence &&
         referenceOccurrence.PrimaryReference is IUnityYamlReference reference)
     {
         return(CreateModel(UnityObjectPsiUtil.GetGameObjectPathFromComponent(mySceneProcessor, reference.ComponentDocument)));
     }
     return(EmptyModel());
 }
예제 #5
0
        public override RdUsageGroup CreateModel(IOccurrence occurrence, IOccurrenceBrowserDescriptor descriptor)
        {
            using (CompilationContextCookie.GetExplicitUniversalContextIfNotSet())
            {
                if (occurrence is ReferenceOccurrence referenceOccurrence &&
                    referenceOccurrence.PrimaryReference is IUnityYamlReference reference)
                {
                    return(CreateModel(UnityObjectPsiUtil.GetComponentName(reference.ComponentDocument)));
                }
            }

            return(EmptyModel());
        }
예제 #6
0
        public override ISymbolTable GetReferenceSymbolTable(bool useReferenceName)
        {
            var assetGuid  = myFileID.guid;
            var targetType = UnityObjectPsiUtil.GetTypeElementFromScriptAssetGuid(myOwner.GetSolution(), assetGuid);

            if (targetType == null)
            {
                return(EmptySymbolTable.INSTANCE);
            }

            // We don't need to do anything about useReferenceName, we only ever have one candidate

            var symbolTable = new SymbolTable(myOwner.GetPsiServices());

            symbolTable.AddSymbol(assetGuid, targetType);
            return(symbolTable);
        }
예제 #7
0
        public override ISymbolTable GetReferenceSymbolTable(bool useReferenceName)
        {
            var assetGuid  = GetScriptAssetGuid();
            var targetType = UnityObjectPsiUtil.GetTypeElementFromScriptAssetGuid(myOwner.GetSolution(), assetGuid);

            if (targetType == null)
            {
                return(EmptySymbolTable.INSTANCE);
            }

            var symbolTable = ResolveUtil.GetSymbolTableByTypeElement(targetType, SymbolTableMode.FULL, myOwner.GetPsiModule());

            if (useReferenceName)
            {
                var name = GetName();
                return(symbolTable.Filter(name, IsMethodFilter.INSTANCE, OverriddenFilter.INSTANCE, new ExactNameFilter(name),
                                          new StaticFilter(new NonStaticAccessContext(myOwner)), new EventHandlerSymbolFilter(myMode, myType, targetType.Module)));
            }

            return(symbolTable);
        }
예제 #8
0
        public override ISymbolTable GetReferenceSymbolTable(bool useReferenceName)
        {
            var assetGuid  = GetScriptAssetGuid();
            var targetType = UnityObjectPsiUtil.GetTypeElementFromScriptAssetGuid(myOwner.GetSolution(), assetGuid);

            if (targetType == null)
            {
                return(EmptySymbolTable.INSTANCE);
            }

            var symbolTable =
                ResolveUtil.GetSymbolTableByTypeElement(targetType, SymbolTableMode.FULL, myOwner.GetPsiModule());

            if (useReferenceName)
            {
                var name = GetName();
                return(symbolTable.Filter(name, new ExactNameFilter(name)));
            }

            return(symbolTable);
        }
예제 #9
0
        public override ISymbolTable GetReferenceSymbolTable(bool useReferenceName)
        {
            var assetGuid  = myFileID.guid;
            var candidates = UnityObjectPsiUtil.GetTypeElementCandidatesFromScriptAssetGuid(myOwner.GetSolution(), assetGuid);

            if (candidates.IsEmpty())
            {
                return(EmptySymbolTable.INSTANCE);
            }

            var resolvedName = myResolvedName;

            if (resolvedName == null)
            {
                var assetFiles = myMetaFileGuidCache.GetAssetNames(assetGuid);
                resolvedName = assetFiles.FirstOrDefault(null);
            }

            var symbolTable = new SymbolTable(myOwner.GetPsiServices());

            foreach (var candidate in candidates)
            {
                if (useReferenceName && resolvedName != null)
                {
                    if (resolvedName == candidate.ShortName)
                    {
                        symbolTable.AddSymbol(assetGuid, candidate);
                    }
                }
                else
                {
                    symbolTable.AddSymbol(assetGuid, candidate);
                }
            }
            return(symbolTable);
        }
예제 #10
0
 public void ConsumeGameObject(IYamlDocument gameObject, IBlockMappingNode modifications)
 {
     {
         int rootOrder = -1;
         var transform = UnityObjectPsiUtil.FindTransformComponentForGameObject(gameObject);
         if (modifications != null)
         {
             if (!int.TryParse(UnityObjectPsiUtil.GetValueFromModifications(modifications, transform.GetFileId(), UnityYamlConstants.RootOrderProperty)
                               , out rootOrder))
             {
                 rootOrder = -1;
             }
         }
         if (rootOrder == -1)
         {
             var rootOrderAsString = transform.GetUnityObjectPropertyValue(UnityYamlConstants.RootOrderProperty).AsString();
             if (!int.TryParse(rootOrderAsString, out rootOrder))
             {
                 rootOrder = -1;
             }
         }
         RootIndices.Add(rootOrder);
     }
 }