Skip to content

Commit

Permalink
Merge remote-tracking branch 'github/master' into task_194-Check_acce…
Browse files Browse the repository at this point in the history
…ss_to_elements_not_yet_existing
  • Loading branch information
LorenzoBettini committed Jun 15, 2020
2 parents 23f2de0 + 29dea9a commit 21130f9
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,66 +16,83 @@ class EdeltaFormatterTest extends EdeltaAbstractTest {
@Test
def void testFormatting() {
assertFormatted[
expectation = '''
toBeFormatted = '''
import edelta.refactorings.lib.EdeltaRefactorings
// IMPORTANT: ecores must be in source directories
// otherwise you can't refer to them
metamodel "ecore"
metamodel "myexample"

package my.code

metamodel "ecore"
metamodel "myexample"
metamodel "myecore"

use Example as example
use EdeltaRefactorings as std
use Example as example
use EdeltaRefactorings as extension std

def createClass2(String name) {
newEClass(name)
def createClass2 ( String name , int i ) { newEClass(name)
}

def createClass3() {
val a = newEAttribute(attrname) [
lowerBound = 1
]

def createClass3() : String {
val a= newEAttribute(attrname)[
lowerBound=1
]
}

modifyEcore aModification epackage myecore {
std.addMandatoryAttr("name", ecoreref(EString), it)
modifyEcore aModification epackage myecore {
std . addMandatoryAttr( "name" ,
ecoreref(EString), it)
ecoreref ( ecore . EString )
ecoreref ( EString )

val a= newEAttribute(attrname)[
lowerBound=1
]


}


'''
toBeFormatted = '''

expectation = '''

import edelta.refactorings.lib.EdeltaRefactorings

// IMPORTANT: ecores must be in source directories
// otherwise you can't refer to them
package my.code

metamodel "ecore"
metamodel "myexample"
metamodel "myecore"

use Example as example
use EdeltaRefactorings as std
use Example as example
use EdeltaRefactorings as extension std

def createClass2(String name) { newEClass(name)
def createClass2(String name, int i) {
newEClass(name)
}

def createClass3() {
val a= newEAttribute(attrname)[
lowerBound=1
]
def createClass3() : String {
val a = newEAttribute(attrname) [
lowerBound = 1
]
}

modifyEcore aModification epackage myecore {
std . addMandatoryAttr( "name" ,
ecoreref(EString), it)
}
std.addMandatoryAttr("name", ecoreref(EString), it)
ecoreref(ecore.EString)
ecoreref(EString)

val a = newEAttribute(attrname) [
lowerBound = 1
]

}
'''
]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,60 +34,87 @@ public void testFormatting() {
_builder.newLine();
_builder.append("// otherwise you can\'t refer to them");
_builder.newLine();
_builder.append("metamodel \"ecore\"");
_builder.newLine();
_builder.append("metamodel \"myexample\"");
_builder.append("package my.code");
_builder.newLine();
_builder.newLine();
_builder.append("metamodel \"ecore\"");
_builder.newLine();
_builder.append("metamodel \"myexample\"");
_builder.newLine();
_builder.append("metamodel \"myecore\"");
_builder.newLine();
_builder.newLine();
_builder.append("use Example as example ");
_builder.append("use Example as example ");
_builder.newLine();
_builder.append("use EdeltaRefactorings as std");
_builder.append("use EdeltaRefactorings as extension std");
_builder.newLine();
_builder.newLine();
_builder.append("def createClass2(String name) {");
_builder.append("def createClass2 ( String name , int i ) { \t\t\t\tnewEClass(name)");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.newLine();
_builder.append("def createClass3() : String {");
_builder.newLine();
_builder.append("\t");
_builder.append("newEClass(name)");
_builder.append("val a= newEAttribute(attrname)[");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("lowerBound=1");
_builder.newLine();
_builder.append("\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("def createClass3() {");
_builder.append("modifyEcore aModification epackage myecore {");
_builder.newLine();
_builder.append("\t");
_builder.append("val a = newEAttribute(attrname) [");
_builder.append("std . addMandatoryAttr( \"name\" , ");
_builder.newLine();
_builder.append("\t\t");
_builder.append("lowerBound = 1");
_builder.append("\t");
_builder.append("ecoreref(EString), it)");
_builder.newLine();
_builder.append("\t");
_builder.append("]");
_builder.append("ecoreref ( ecore . EString ) ");
_builder.newLine();
_builder.append("}");
_builder.append("\t");
_builder.append("ecoreref ( EString )");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("val a= newEAttribute(attrname)[");
_builder.newLine();
_builder.append("\t\t\t\t\t\t\t\t");
_builder.append("lowerBound=1");
_builder.newLine();
_builder.append("modifyEcore aModification epackage myecore {");
_builder.append("\t\t\t\t\t\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("std.addMandatoryAttr(\"name\", ecoreref(EString), it)");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.newLine();
it.setExpectation(_builder);
it.setToBeFormatted(_builder);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("import edelta.refactorings.lib.EdeltaRefactorings");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("// IMPORTANT: ecores must be in source directories");
_builder_1.newLine();
_builder_1.append("// otherwise you can\'t refer to them");
_builder_1.newLine();
_builder_1.append("package my.code");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("metamodel \"ecore\"");
_builder_1.newLine();
Expand All @@ -96,25 +123,28 @@ public void testFormatting() {
_builder_1.append("metamodel \"myecore\"");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("use Example as example ");
_builder_1.append("use Example as example");
_builder_1.newLine();
_builder_1.append("use EdeltaRefactorings as std");
_builder_1.append("use EdeltaRefactorings as extension std");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("def createClass2(String name) { \t\t\t\tnewEClass(name)");
_builder_1.append("def createClass2(String name, int i) {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("newEClass(name)");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("def createClass3() {");
_builder_1.append("def createClass3() : String {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("val a= newEAttribute(attrname)[");
_builder_1.newLine();
_builder_1.append("\t\t\t");
_builder_1.append("lowerBound=1");
_builder_1.append("val a = newEAttribute(attrname) [");
_builder_1.newLine();
_builder_1.append("\t\t");
_builder_1.append("lowerBound = 1");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("]");
_builder_1.newLine();
_builder_1.append("}");
Expand All @@ -123,16 +153,28 @@ public void testFormatting() {
_builder_1.append("modifyEcore aModification epackage myecore {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("std . addMandatoryAttr( \"name\" , ");
_builder_1.append("std.addMandatoryAttr(\"name\", ecoreref(EString), it)");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("ecoreref(EString), it)");
_builder_1.append("ecoreref(ecore.EString)");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.append("\t");
_builder_1.append("ecoreref(EString)");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("val a = newEAttribute(attrname) [");
_builder_1.newLine();
_builder_1.append("\t\t");
_builder_1.append("lowerBound = 1");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("]");
_builder_1.newLine();
_builder_1.newLine();
it.setToBeFormatted(_builder_1);
_builder_1.append("}");
_builder_1.newLine();
it.setExpectation(_builder_1);
};
this._formatterTestHelper.assertFormatted(_function);
}
Expand Down
64 changes: 61 additions & 3 deletions edelta.parent/edelta/src/edelta/formatting2/EdeltaFormatter.xtend
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import edelta.edelta.EdeltaProgram
import edelta.edelta.EdeltaUseAs
import org.eclipse.xtext.formatting2.IFormattableDocument
import org.eclipse.xtext.xbase.annotations.formatting2.XbaseWithAnnotationsFormatter
import static edelta.edelta.EdeltaPackage.Literals.*
import edelta.edelta.EdeltaModifyEcoreOperation
import edelta.edelta.EdeltaEcoreReferenceExpression

class EdeltaFormatter extends XbaseWithAnnotationsFormatter {

Expand All @@ -17,22 +20,77 @@ class EdeltaFormatter extends XbaseWithAnnotationsFormatter {
// tests and I prefer to have full control on code coverage.
if (expr instanceof EdeltaProgram) {
_format(expr, document)
} else if (expr instanceof EdeltaUseAs) {
_format(expr, document)
} else if (expr instanceof EdeltaOperation) {
_format(expr, document)
} else if (expr instanceof EdeltaModifyEcoreOperation) {
_format(expr, document)
} else if (expr instanceof EdeltaEcoreReferenceExpression) {
_format(expr, document)
} else {
super.format(expr, document)
}
}

def void _format(EdeltaProgram edeltaProgram, extension IFormattableDocument document) {
edeltaProgram.prepend[setNewLines(0, 0, 1); noSpace].append[newLine]
edeltaProgram.getImportSection.format;
edeltaProgram.regionFor.keyword("package").append[oneSpace]
edeltaProgram.regionFor.keywords("metamodel").forEach[append[oneSpace]]
for (EdeltaUseAs edeltaUseAs : edeltaProgram.getUseAsClauses()) {
edeltaUseAs.format;
edeltaUseAs.format
edeltaUseAs.append[setNewLines(1, 1, 2)]
}
for (EdeltaOperation edeltaOperation : edeltaProgram.getOperations()) {
edeltaOperation.format;
edeltaOperation.append[setNewLines(1, 1, 2)]
}
for (o : edeltaProgram.modifyEcoreOperations) {
o.format
for (modifyEcore : edeltaProgram.modifyEcoreOperations) {
modifyEcore.format
}
}

def void _format(EdeltaUseAs useAs, extension IFormattableDocument document) {
useAs.regionFor.keyword("use").append[oneSpace]
useAs.type.append[oneSpace]
useAs.type.format
useAs.regionFor.keyword("as").append[oneSpace]
useAs.regionFor.keyword("extension").append[oneSpace]
}

def void _format(EdeltaOperation operation, extension IFormattableDocument document) {
operation.regionFor.keyword("def").append[oneSpace]
operation.regionFor.keyword("(").surround[noSpace]
if (!operation.params.isEmpty) {
for (comma : operation.regionFor.keywords(","))
comma.prepend[noSpace].append[oneSpace]
for (params : operation.params)
params.format
operation.regionFor.keyword(")").prepend[noSpace]
}
if (operation.type !== null) {
operation.regionFor.keyword(")").append[oneSpace]
operation.type.prepend[oneSpace].append[oneSpace]
operation.type.format
} else {
operation.regionFor.keyword(")").append[oneSpace]
}
operation.body.format
}

def void _format(EdeltaModifyEcoreOperation operation, extension IFormattableDocument document) {
operation.regionFor.keyword("modifyEcore").append[oneSpace]
operation.regionFor.keyword("epackage").surround[oneSpace]
operation.regionFor.feature(EDELTA_MODIFY_ECORE_OPERATION__EPACKAGE).surround[oneSpace]
operation.body.format
}

def void _format(EdeltaEcoreReferenceExpression ecoreref, extension IFormattableDocument document) {
ecoreref.regionFor.keyword("(").surround[noSpace]
for (node : ecoreref.reference.regionFor.keywords("."))
node.surround[noSpace]
ecoreref.regionFor.keyword(")").surround[noSpace]
}

}

0 comments on commit 21130f9

Please sign in to comment.