2013-04-12 3 views
0

Есть ли способ получить компилятор, когда кто-то пишет «новый MyClass()» и MyClass Inherit из EntityBase. Мне нравится останавливать разработчиков писать это. Могу ли я сделать это с помощью проекта CodeIssue.CodeIssue project with roslyn

ответ

3

Абсолютно!

Это именно та политика, которую CodeIssues предназначены для обработки. Вы должны иметь возможность написать CodeIssue, который проверяет узлы ObjectCreationSyntax. Код для проверки наследования выглядит примерно так (не рядом с компилятором в данный момент, так это из памяти):

var entityBaseType = document.Project.GetCompilation(cancellationToken).GetTypeByMetadataName("FullyQualifiedTypeName.EntityBase"); 
var typeInfo = document.GetSemanticModel(cancellationToken).GetTypeInfo(node); 
if (typeInfo.Type.BaseType.Equals(entityBaseType)) 
{ 
    return new CodeIssue(...); 
} 

return null; 
+0

Спасибо большое, но у меня есть проблема, выясняя, как проверить ObjectCreationSyntax. Там так мало примеров. – user1199595

+0

Ознакомьтесь с прохождением «Работа с семантикой», который поставляется с Roslyn CTP. В нем есть несколько примеров использования SemanticModel для ответа на эти вопросы. –

+0

Куда уходит класс CodeIssue? похоже, они изменили имя. – Maslow

Смежные вопросы