private void AnnotateDerivedTypes(DataModelBaseTypeBuilder baseBuilder, string derivedName) { if (!this.TryAnnotateDerivedType(_compiledTypes, baseBuilder, derivedName) && !this.TryAnnotateDerivedType(_compiledBases, baseBuilder, derivedName)) { throw new G4ParseFailureException(baseBuilder.DeclSymbol.GetLocation(), Strings.UnresolvedDerivedType, derivedName); } }
private bool TryAnnotateDerivedType <T>(Dictionary <string, T> lookupTable, DataModelBaseTypeBuilder baseBuilder, string derivedName) where T : DataModelTypeBuilder { T derived; if (lookupTable.TryGetValue(derivedName, out derived)) { string existingBase = derived.Base; if (existingBase != null && existingBase != baseBuilder.CSharpName) { DataModelBaseTypeBuilder existingBaseBuilder = _compiledBases.Values.First(compiledBase => compiledBase.CSharpName == baseBuilder.CSharpName); throw new G4ParseFailureException(baseBuilder.DeclSymbol.GetLocation(), Strings.TypeAlreadyTaken, derived.G4DeclaredName, existingBaseBuilder.G4DeclaredName, baseBuilder.G4DeclaredName); } derived.Base = baseBuilder.CSharpName; return(true); } return(false); }