DeclOnly() public method

public DeclOnly ( ) : Microsoft.CSharp.RuntimeBinder.Semantics.AggregateDeclaration
return Microsoft.CSharp.RuntimeBinder.Semantics.AggregateDeclaration
Beispiel #1
0
        /*
         * returns the inputfile where a symbol was declared.
         *
         * returns null for namespaces because they can be declared
         * in multiple files.
         */
        public InputFile getInputFile()
        {
            switch (_kind)
            {
            case SYMKIND.SK_NamespaceSymbol:
            case SYMKIND.SK_AssemblyQualifiedNamespaceSymbol:
                // namespaces don't have input files
                // call with a NamespaceDeclaration instead
                Debug.Assert(false);
                return(null);

            case SYMKIND.SK_NamespaceDeclaration:
                return(null);

            case SYMKIND.SK_AggregateSymbol:
            {
#if !CSEE
                AggregateSymbol AggregateSymbol = this.AsAggregateSymbol();
                if (!AggregateSymbol.IsSource())
                {
                    return(AggregateSymbol.DeclOnly().getInputFile());
                }

                // Because an AggregateSymbol that isn't metadata can be defined across multiple
                // files, getInputFile isn't a reasonable operation.
                Debug.Assert(false);
                return(null);
#endif
            }

            /*
             * case SK_AggregateType:
             *  return ((Symbol)this.AsAggregateType().getAggregate()).getInputFile();
             */

            case SYMKIND.SK_AggregateDeclaration:
                return(this.AsAggregateDeclaration().getInputFile());

            /*
             * case SK_TypeParameterType:
             *  if (this.AsTypeParameterType().GetOwningSymbol().IsAggregateSymbol())
             *  {
             *      ASSERT(0);
             *      return null;
             *  }
             *  else
             *  {
             *      ASSERT(this.AsTypeParameterType().GetOwningSymbol().IsMethodSymbol());
             *      return AsTypeParameterType().GetOwningSymbol().AsMethodSymbol().getInputFile();
             *  }
             */
            case SYMKIND.SK_TypeParameterSymbol:
                if (parent.IsAggregateSymbol())
                {
                    // Because an AggregateSymbol that isn't metadata can be defined across multiple
                    // files, getInputFile isn't a reasonable operation.
                    Debug.Assert(false);
                    return(null);
                }
                else if (parent.IsMethodSymbol())
                {
                    return(parent.AsMethodSymbol().getInputFile());
                }
                Debug.Assert(false);
                break;

            case SYMKIND.SK_FieldSymbol:
                return(this.AsFieldSymbol().containingDeclaration().getInputFile());

            case SYMKIND.SK_MethodSymbol:
                return(this.AsMethodSymbol().containingDeclaration().getInputFile());

            case SYMKIND.SK_PropertySymbol:
                return(this.AsPropertySymbol().containingDeclaration().getInputFile());

            case SYMKIND.SK_EventSymbol:
                return(this.AsEventSymbol().containingDeclaration().getInputFile());

            /*
             * case SK_PointerType:
             * case SK_NullableType:
             * case SK_ArrayType:
             * case SK_PinnedType:
             * case SK_ParameterModifierType:
             * case SK_OptionalModifierType:
             *  return AsType().GetBaseOrParameterOrElementType().getInputFile();
             */

            case SYMKIND.SK_GlobalAttributeDeclaration:
                return(parent.getInputFile());

            /*
             * case SK_NullType:
             * case SK_VoidType:
             *  return null;
             */

            default:
                Debug.Assert(false);
                break;
            }

            return(null);
        }