Compare two source code files using EMF [message #764597] |
Mon, 12 December 2011 13:59 |
Missing name Missing name Messages: 6 Registered: December 2011 |
Junior Member |
|
|
I´m not sure if this is the right place to ask this, but I couldn´t find any better place.
In my application I should compare two source code files to see if something has changed and then highlight those changes. For that i thought of using EMF compare. My application is a standalone application and is not used as a plugin or something similar. It should run without eclipse. Therefore I linked all the necessary libraries and tried to use EMF compare.
The problem now is that I don´t know how to build the two models that I have to use to compare the two source code files against each other. In the following code snippet I wrote as a first approach, the source code files are passed as files (Test1.java and Test2.java) but actually the source code of both files are stored in a string as the method parameters indicate.
So my question is basically how can I generate two models based on String that contain Java source code so that I can use these two models to compare against each other?
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));
}
|
|
|
|
|
Re: Compare two source code files using EMF [message #765053 is a reply to message #765042] |
Tue, 13 December 2011 10:29 |
Nicolas Bros Messages: 49 Registered: July 2009 |
Member |
|
|
Quote:I'm not sure what you mean with text level
I mean that it would compare the two sources character by character, without trying to "understand" the differences at a higher level of abstraction (i.e. whether the difference corresponds to a method, field, etc.)
Quote:but, again I can't find any explanation how to create these temporary projects based on some code strings.
Well, usually Java source files in Eclipse are contained in Java projects, managed by the JDT. Since the MoDisco Java discoverer is based on the JDT, it needs to have a Java project to work with.
So, if your sources are already in a Java project in your workspace, then you can simply launch the MoDisco java discoverer on it.
It not, then you will need to create a Java project programmatically. Maybe the easiest way would be to first create a Java project manually, and make it a template that your code would copy into the workspace when needed. Or, you can use the JDT APIs to configure a JDT project.
For example, see the method "createPluginProject" in this MoDisco utility class, that creates projects with the JDT and PDE natures:
https://dev.eclipse.org/svnroot/modeling/org.eclipse.mdt.modisco/plugins/trunk/org.eclipse.gmt.modisco.infra.common.core/src/org/eclipse/gmt/modisco/infra/common/core/internal/utils/ProjectUtils.java
|
|
|
Powered by
FUDForum. Page generated in 0.04188 seconds