В моем приложении я должен сравнить два файла исходного кода, чтобы увидеть, изменилось ли что-то, а затем выделить эти изменения. Для этого я подумал об использовании ЭДС сравнения. Мое приложение является отдельным приложением и не используется как плагин или что-то подобное. Он должен работать без затмения. Поэтому я связал все необходимые библиотеки и попытался использовать сравнение EMF.
Проблема сейчас в том, что я не знаю, как построить две модели, которые я должен использовать для сравнения двух файлов исходного кода друг с другом. В следующем фрагменте кода, который я написал в качестве первого подхода, файлы исходного кода передаются в виде файлов (Test1.java и Test2.java), но на самом деле исходный код обоих файлов хранится в строке, как показывают параметры метода.
Итак, мой вопрос заключается в том, как я могу сгенерировать две модели на основе String, содержащие исходный код Java, чтобы я мог использовать эти две модели для сравнения друг с другом?
public void compare(String source1, String source2) throws IOException, InterruptedException {
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("java", new ResourceFactoryImpl());
XSDEcoreBuilder builder = new XSDEcoreBuilder();
Collection<EObject> model1 = builder.generate(URI.createFileURI("Test1.java"));
Collection<EObject> model2 = builder.generate(URI.createFileURI("Test2.java"));
final MatchModel match = MatchService.doMatch(model1.iterator().next(), model2.iterator().next(), Collections.<String, Object> emptyMap());
final DiffModel diff = DiffService.doDiff(match, false);
final List<DiffElement> differences = new ArrayList<DiffElement>(diff.getOwnedElements());
System.out.println("MatchModel :\n");
System.out.println(ModelUtils.serialize(match));
System.out.println("DiffModel :\n");
System.out.println(ModelUtils.serialize(diff));
}