2016-01-28 6 views
0

Я анализирую преобразование существующей библиотеки C# в java. Для начала я должен знать, какие типы/встроенные ключевые слова используются в существующей библиотеке C#. Я имею в виду, напримерКак получить различные типы, используемые в проекте C# с Roslyn

public class CSharpClass 
{ 
int i; 
float j; 
Console.Writeline(String.Concat("A","B")); 
} 

В этом классе типов/ключевые слова, используемые являются,

  1. общественного
  2. INT
  3. поплавок
  4. Консоль
  5. Строка

Мои вопросы:

  1. Есть ли способ сделать это. Надеюсь, я смогу сделать это с Рослин. Но мы можем получить «LocalDeclarationStatementSyntax» для переменных. Но как разобрать «Консоль» и «Конкат». Является ли это «Sytax walker», который анализирует все токены в классе, является единственным вариантом?
  2. Также как получить все классы из файла проекта с Roslyn?
+0

Не могли бы вы уточнить, что именно вы хотите и почему? Почему вы говорите о типах, а затем включаете 'public' в список? Вы заботитесь только о явно упомянутых типах, а также неявно? Например, если код был «var x = new int [0] .ToList();', должны ли быть введены типы «Enumerable» и «List » (или «List '?)? – svick

+0

Консоль и строка не являются ключевыми словами. Вы ищете ключевые слова или идентификаторы (или типы токенов)? Или вы хотите, чтобы уровень был выше и знал обо всех символах? –

ответ

3

Вам также нужна семантика - синтаксис - это только текст, который вы видите, и это именно то, что вы получаете, ничего больше, не меньше. Получите Compilation для вашего проекта, затем вы можете позвонить GetSemanticModel, где вы дадите ему дерево, а затем оттуда вы можете позвонить GetTypeInfo или GetSymbolInfo (в зависимости от случая, искать в Интернете разницу между этими двумя), чтобы получить информацию о типе.

Что касается получения Compilation, если вы пишете инструмент командной строки, вы, вероятно, захотите использовать MSBuildWorkspace для загрузки вашего проекта. Если вы анализируете проекты, открытые в Visual Studio, используйте VisualStudioWorkspace и т. Д.

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