Skip to content

Commit

Permalink
Move generation to external MelangeBuilder, use progress monitors
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Degueule committed Jul 30, 2015
1 parent d550339 commit 6cc0ba0
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package fr.inria.diverse.melange.ui.builder

import com.google.inject.Inject
import com.google.inject.Provider
import org.eclipse.core.resources.IProject
import org.eclipse.core.runtime.IProgressMonitor
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.builder.EclipseResourceFileSystemAccess2
import org.eclipse.xtext.generator.IGenerator
import org.eclipse.xtext.generator.OutputConfigurationProvider

class MelangeBuilder
{
@Inject IGenerator generator
@Inject Provider<EclipseResourceFileSystemAccess2> fileSystemAccessProvider
@Inject OutputConfigurationProvider outputProvider

def void generateAdapters(Resource res, IProject project, IProgressMonitor monitor) {
val fsa = fileSystemAccessProvider.get => [f |
f.monitor = monitor
f.project = project
]

outputProvider.outputConfigurations.forEach [
fsa.outputConfigurations.put(name, it)
]

generator.doGenerate(res, fsa)
}
}
Original file line number Diff line number Diff line change
@@ -1,49 +1,45 @@
package fr.inria.diverse.melange.ui.menu

import com.google.inject.Inject
import com.google.inject.Provider
import fr.inria.diverse.melange.ui.builder.MelangeBuilder
import org.eclipse.core.commands.AbstractHandler
import org.eclipse.core.commands.ExecutionEvent
import org.eclipse.core.commands.ExecutionException
import org.eclipse.core.resources.IResource
import org.eclipse.core.runtime.IProgressMonitor
import org.eclipse.core.runtime.NullProgressMonitor
import org.eclipse.core.runtime.OperationCanceledException
import org.eclipse.core.runtime.Status
import org.eclipse.core.runtime.jobs.Job
import org.eclipse.emf.common.util.URI
import org.eclipse.jface.viewers.IStructuredSelection
import org.eclipse.ui.handlers.HandlerUtil
import org.eclipse.xtext.builder.EclipseResourceFileSystemAccess2
import org.eclipse.xtext.generator.IGenerator
import org.eclipse.xtext.generator.OutputConfigurationProvider
import org.eclipse.xtext.resource.DerivedStateAwareResource
import org.eclipse.xtext.ui.resource.XtextResourceSetProvider

class GenerateAdapters extends AbstractHandler {
@Inject MelangeBuilder builder
@Inject XtextResourceSetProvider rsProvider
@Inject IGenerator generator
@Inject Provider<EclipseResourceFileSystemAccess2> fileSystemAccessProvider
@Inject OutputConfigurationProvider outputProvider

override execute(ExecutionEvent event) throws ExecutionException {
new Job("Full Melange build") {
new Job("Melange: Generating adapters code") {
override protected run(IProgressMonitor monitor) {
val sel = HandlerUtil.getActiveMenuSelection(event)
val selection = sel as IStructuredSelection
val resource = selection.firstElement as IResource
val project = resource.project
try {
monitor.beginTask("Generating adapters code", IProgressMonitor.UNKNOWN)

val rs = rsProvider.get(project)
val res = rs.getResource(URI::createPlatformResourceURI(resource.fullPath.toString, true), true) as DerivedStateAwareResource
val fsa = fileSystemAccessProvider.get
val sel = HandlerUtil.getActiveMenuSelection(event)
val selection = sel as IStructuredSelection
val resource = selection.firstElement as IResource
val project = resource.project
val rs = rsProvider.get(project)
val res = rs.getResource(URI::createPlatformResourceURI(resource.fullPath.toString, true), true) as DerivedStateAwareResource

fsa.monitor = new NullProgressMonitor
fsa.project = project
outputProvider.outputConfigurations.forEach [
fsa.outputConfigurations.put(name, it)
]
builder.generateAdapters(res, project, monitor)
} catch (OperationCanceledException e) {
return Status.CANCEL_STATUS
} finally {
monitor.done
}

generator.doGenerate(res, fsa)
return Status.OK_STATUS
}
}.schedule
Expand Down

0 comments on commit 6cc0ba0

Please sign in to comment.