Skip to content

Commit

Permalink
Build: fix aspects initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
fcoulon committed Sep 1, 2015
1 parent 0885d2c commit 3339f18
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,4 +138,8 @@ class LanguageBuilder extends Builder{
]
]
}

def WeaveBuilder findBuilder(Weave w){
return builders.filter(WeaveBuilder).findFirst[it.source === w]
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
package fr.inria.diverse.melange.builder

import com.google.inject.Inject
import org.eclipse.xtext.common.types.JvmDeclaredType
import fr.inria.diverse.melange.metamodel.melange.Weave
import java.util.ArrayList
import fr.inria.diverse.melange.ast.AspectExtensions
import fr.inria.diverse.melange.metamodel.melange.Weave
import fr.inria.diverse.melange.utils.AspectToEcore
import fr.inria.diverse.melange.ast.MetamodelExtensions
import java.util.ArrayList
import org.eclipse.xtext.common.types.JvmDeclaredType

class WeaveBuilder extends OperatorBuilder{

@Inject extension AspectExtensions
@Inject extension AspectToEcore
@Inject extension MetamodelExtensions

LanguageBuilder rootLanguage

Expand All @@ -29,4 +27,8 @@ class WeaveBuilder extends OperatorBuilder{

return new ArrayList
}

def Weave getSource(){
return source as Weave
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,15 @@ class LanguageProcessor extends DispatchMelangeProcessor{
typeRefBuilder = typeRefBuilderFactory.create(root.eResource.resourceSet)

root.languages.forEach[language |
language.initialize
language.initializeSyntax
]
root.languages.forEach[language |
val langBuilder = builder.getBuilder(language)
build(langBuilder)
]
root.languages.forEach[language |
language.initializeSemantic
]
}

/**
Expand Down Expand Up @@ -162,10 +165,7 @@ class LanguageProcessor extends DispatchMelangeProcessor{
return res
}

/**
* Initialize syntax & semantics
*/
def void initialize(Language language) {
def void initializeSyntax(Language language) {

language.syntax = MelangeFactory.eINSTANCE.createMetamodel
if (language.isGeneratedByMelange) {
Expand All @@ -179,6 +179,10 @@ class LanguageProcessor extends DispatchMelangeProcessor{
}
}


}

def void initializeSemantic(Language language) {
language.semantics.clear
language.semantics += language.operators.filter(Weave)
.filter[aspectTypeRef?.type instanceof JvmDeclaredType]
Expand All @@ -189,6 +193,7 @@ class LanguageProcessor extends DispatchMelangeProcessor{
val className = aspectTypeRef.aspectAnnotationValue
if (className !== null){
aspectedClass = language.syntax.findClass(className)
ecoreFragment = builder.getBuilder(language).findBuilder(w).model
}
]
]
Expand Down

0 comments on commit 3339f18

Please sign in to comment.