Ejemplo n.º 1
0
 public ParameterSymbolEqualityComparer(
     SymbolEquivalenceComparer symbolEqualityComparer,
     bool distinguishRefFromOut)
 {
     _symbolEqualityComparer = symbolEqualityComparer;
     _distinguishRefFromOut  = distinguishRefFromOut;
 }
Ejemplo n.º 2
0
            public SymbolKeyReader()
            {
                _readSymbolKey = ReadSymbolKey;
                _readLocation  = ReadLocation;

                Compilation = null !;
                Comparer    = null !;
            }
 public EquivalenceVisitor(
     SymbolEquivalenceComparer symbolEquivalenceComparer,
     bool compareMethodTypeParametersByIndex,
     bool objectAndDynamicCompareEqually)
 {
     _symbolEquivalenceComparer = symbolEquivalenceComparer;
     _compareMethodTypeParametersByIndex = compareMethodTypeParametersByIndex;
     _objectAndDynamicCompareEqually = objectAndDynamicCompareEqually;
 }
 public EquivalenceVisitor(
     SymbolEquivalenceComparer symbolEquivalenceComparer,
     bool compareMethodTypeParametersByIndex,
     bool objectAndDynamicCompareEqually)
 {
     _symbolEquivalenceComparer          = symbolEquivalenceComparer;
     _compareMethodTypeParametersByIndex = compareMethodTypeParametersByIndex;
     _objectAndDynamicCompareEqually     = objectAndDynamicCompareEqually;
 }
Ejemplo n.º 5
0
            public override void Dispose()
            {
                base.Dispose();
                Compilation       = null;
                IgnoreAssemblyKey = false;
                Comparer          = null;

                // Place us back in the pool for future use.
                s_readerPool.Free(this);
            }
 public GetHashCodeVisitor(
     SymbolEquivalenceComparer symbolEquivalenceComparer,
     bool compareMethodTypeParametersByIndex,
     bool objectAndDynamicCompareEqually)
 {
     _symbolEquivalenceComparer          = symbolEquivalenceComparer;
     _compareMethodTypeParametersByIndex = compareMethodTypeParametersByIndex;
     _objectAndDynamicCompareEqually     = objectAndDynamicCompareEqually;
     _parameterAggregator = (acc, sym) => Hash.Combine(symbolEquivalenceComparer.ParameterEquivalenceComparer.GetHashCode(sym), acc);
     _symbolAggregator    = (acc, sym) => GetHashCode(sym, acc);
 }
Ejemplo n.º 7
0
            public override void Dispose()
            {
                base.Dispose();
                _idToResult.Clear();
                Compilation       = null;
                IgnoreAssemblyKey = false;
                Comparer          = null;
                _methodSymbolStack.Clear();

                // Place us back in the pool for future use.
                s_readerPool.Free(this);
            }
Ejemplo n.º 8
0
 private void Initialize(
     string data,
     Compilation compilation,
     bool ignoreAssemblyKey,
     CancellationToken cancellationToken)
 {
     base.Initialize(data, cancellationToken);
     Compilation       = compilation;
     IgnoreAssemblyKey = ignoreAssemblyKey;
     Comparer          = ignoreAssemblyKey
         ? SymbolEquivalenceComparer.IgnoreAssembliesInstance
         : SymbolEquivalenceComparer.Instance;
 }
Ejemplo n.º 9
0
        private static bool ParametersMatch(
            ComparisonOptions options,
            Compilation compilation,
            ImmutableArray <IParameterSymbol> parameters,
            RefKind[] refKinds,
            SymbolKey[] typeKeys,
            CancellationToken cancellationToken)
        {
            if (parameters.Length != refKinds.Length)
            {
                return(false);
            }

            for (int i = 0; i < refKinds.Length; i++)
            {
                // The ref-out distinction is not interesting for SymbolKey because you can't overload
                // based on the difference.
                var parameter = parameters[i];
                if (!SymbolEquivalenceComparer.AreRefKindsEquivalent(refKinds[i], parameter.RefKind, distinguishRefFromOut: false))
                {
                    return(false);
                }

                // We are checking parameters for equality, if they refer to method type parameters,
                // then we don't want to recurse through the method (which would then recurse right
                // back into the parameters).  So we ask that type parameters only be checked by
                // metadataName to prevent that.
                var newOptions = new ComparisonOptions(
                    options.IgnoreCase,
                    options.IgnoreAssemblyKey,
                    compareMethodTypeParametersByName: true);

                if (!typeKeys[i].Equals(SymbolKey.Create(parameter.Type, compilation, cancellationToken), newOptions))
                {
                    return(false);
                }
            }

            return(true);
        }
Ejemplo n.º 10
0
        private static bool ParameterRefKindsMatch(
            ImmutableArray <IParameterSymbol> parameters,
            ImmutableArray <RefKind> refKinds)
        {
            if (parameters.Length != refKinds.Length)
            {
                return(false);
            }

            for (int i = 0; i < refKinds.Length; i++)
            {
                // The ref-out distinction is not interesting for SymbolKey because you can't overload
                // based on the difference.
                if (!SymbolEquivalenceComparer.AreRefKindsEquivalent(
                        refKinds[i], parameters[i].RefKind, distinguishRefFromOut: false))
                {
                    return(false);
                }
            }

            return(true);
        }
Ejemplo n.º 11
0
 private SignatureComparer(SymbolEquivalenceComparer symbolEquivalenceComparer)
 {
     this.symbolEquivalenceComparer = symbolEquivalenceComparer;
 }
 public SignatureTypeSymbolEquivalenceComparer(SymbolEquivalenceComparer symbolEquivalenceComparer)
 {
     _symbolEquivalenceComparer = symbolEquivalenceComparer;
 }