use of org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration in project xtext-xtend by eclipse.
the class AbstractReusableActiveAnnotationTests method testAnnotationDefaultValuesBug463161.
@Test
public void testAnnotationDefaultValuesBug463161() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package myannotation");
_builder.newLine();
_builder.newLine();
_builder.append("import java.util.List");
_builder.newLine();
_builder.append("import java.lang.annotation.RetentionPolicy");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.Active");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationContext");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.AbstractClassProcessor");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.declaration.MutableClassDeclaration");
_builder.newLine();
_builder.newLine();
_builder.append("@Active(AnnotationDefaultValuesProcessor)");
_builder.newLine();
_builder.append("annotation AnnotationDefaultValues { }");
_builder.newLine();
_builder.newLine();
_builder.append("class AnnotationDefaultValuesProcessor extends AbstractClassProcessor {");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("override doTransform(MutableClassDeclaration mutableClass, extension TransformationContext context) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("val annotationRef = mutableClass.findAnnotation(findTypeGlobally(MyAnnotation))");
_builder.newLine();
_builder.append("\t\t");
_builder.append("mutableClass.addField(annotationRef.getExpression(\'value\')?.toString ?: \'wasNull\') [");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("type = string");
_builder.newLine();
_builder.append("\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("annotation MyAnnotation {");
_builder.newLine();
_builder.append("\t");
_builder.append("int value = 1");
_builder.newLine();
_builder.append("}");
_builder.newLine();
Pair<String, String> _mappedTo = Pair.<String, String>of("myannotation/AnnotationDefaultValues.xtend", _builder.toString());
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package myusercode");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("@myannotation.AnnotationDefaultValues");
_builder_1.newLine();
_builder_1.append("@myannotation.MyAnnotation");
_builder_1.newLine();
_builder_1.append("class MyClass {}");
_builder_1.newLine();
Pair<String, String> _mappedTo_1 = Pair.<String, String>of("myusercode/UserCode.xtend", _builder_1.toString());
final Procedure1<CompilationUnitImpl> _function = (CompilationUnitImpl it) -> {
final MutableClassDeclaration clazz = it.getTypeLookup().findClass("myusercode.MyClass");
final MutableFieldDeclaration field = IterableExtensions.head(clazz.getDeclaredFields());
Assert.assertEquals("wasNull", field.getSimpleName());
};
this.assertProcessing(_mappedTo, _mappedTo_1, _function);
}
use of org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration in project xtext-xtend by eclipse.
the class AbstractReusableActiveAnnotationTests method testMovingComputedTypes_02.
@Test
public void testMovingComputedTypes_02() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package myannotation");
_builder.newLine();
_builder.newLine();
_builder.append("import java.util.List");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.Active");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationContext");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationParticipant");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.declaration.MutableMethodDeclaration");
_builder.newLine();
_builder.newLine();
_builder.append("@Active(Method2FieldProcessor)");
_builder.newLine();
_builder.append("annotation Method2Field { }");
_builder.newLine();
_builder.append("class Method2FieldProcessor implements TransformationParticipant<MutableMethodDeclaration> {");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("override doTransform(List<? extends MutableMethodDeclaration> annotatedMethods, extension TransformationContext context) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("annotatedMethods.forEach [ method |");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("method.declaringType.addField(method.simpleName) [");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("type = method.returnType");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("initializer = method.body");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("method.remove");
_builder.newLine();
_builder.append("\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("}");
_builder.newLine();
Pair<String, String> _mappedTo = Pair.<String, String>of("myannotation/MyAnnotation.xtend", _builder.toString());
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package myusercode");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("class MyClass {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("val foo = \'foo\'");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("@myannotation.Method2Field");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("def x() { foo }");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("@myannotation.Method2Field");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("def y() { x }");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
Pair<String, String> _mappedTo_1 = Pair.<String, String>of("myusercode/UserCode.xtend", _builder_1.toString());
final Procedure1<CompilationUnitImpl> _function = (CompilationUnitImpl it) -> {
final MutableClassDeclaration type = it.getTypeLookup().findClass("myusercode.MyClass");
final MutableFieldDeclaration field = ((MutableFieldDeclaration[]) Conversions.unwrapArray(type.getDeclaredFields(), MutableFieldDeclaration.class))[1];
Assert.assertEquals("java.lang.String", field.getType().getName());
};
this.assertProcessing(_mappedTo, _mappedTo_1, _function);
}
use of org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration in project xtext-xtend by eclipse.
the class AbstractReusableActiveAnnotationTests method testValidation.
@Test
public void testValidation() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package myannotation");
_builder.newLine();
_builder.newLine();
_builder.append("import java.util.List");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.Active");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationContext");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationParticipant");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.declaration.MutableNamedElement");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration");
_builder.newLine();
_builder.newLine();
_builder.append("@Active(typeof(ValidatedProcessor))");
_builder.newLine();
_builder.append("annotation Validated { }");
_builder.newLine();
_builder.append("class ValidatedProcessor implements TransformationParticipant<MutableNamedElement> {");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("override doTransform(List<? extends MutableNamedElement> annotatedMethods, extension TransformationContext context) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("annotatedMethods.forEach [ ele |");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("switch ele {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("MutableFieldDeclaration : ele.addWarning(\'field-warning\')");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("default : ele.addWarning(\'warning\')");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
Pair<String, String> _mappedTo = Pair.<String, String>of("myannotation/AbstractAnnotation.xtend", _builder.toString());
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package myusercode");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("class MyClass {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("@myannotation.Validated");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("def void foo() {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("}");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("@myannotation.Validated");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("String name");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
Pair<String, String> _mappedTo_1 = Pair.<String, String>of("myusercode/UserCode.xtend", _builder_1.toString());
final Procedure1<CompilationUnitImpl> _function = (CompilationUnitImpl it) -> {
final MutableClassDeclaration type = it.getTypeLookup().findClass("myusercode.MyClass");
final MutableMethodDeclaration method = IterableExtensions.head(type.getDeclaredMethods());
final MutableFieldDeclaration field = IterableExtensions.head(type.getDeclaredFields());
Assert.assertEquals("field-warning", IterableExtensions.head(it.getProblemSupport().getProblems(field)).getMessage());
Assert.assertEquals("warning", IterableExtensions.head(it.getProblemSupport().getProblems(method)).getMessage());
};
this.assertProcessing(_mappedTo, _mappedTo_1, _function);
}
use of org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration in project xtext-xtend by eclipse.
the class AbstractReusableActiveAnnotationTests method testDeterministicExecutionOrder_02.
@Test
public void testDeterministicExecutionOrder_02() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("import myannotation.*");
_builder.newLine();
_builder.append("class MyClass {");
_builder.newLine();
_builder.append("\t");
_builder.append("@_A @_B @_C String field1");
_builder.newLine();
_builder.append("\t");
_builder.append("@_C @_B @_A String field2");
_builder.newLine();
_builder.append("}");
_builder.newLine();
Pair<String, String> _mappedTo = Pair.<String, String>of("MyClass.xtend", _builder.toString());
final Procedure1<CompilationUnitImpl> _function = (CompilationUnitImpl it) -> {
final MutableClassDeclaration myClass = it.getTypeLookup().findClass("MyClass");
Assert.assertEquals("field1_A_B_C", IterableExtensions.head(myClass.getDeclaredFields()).getSimpleName());
Assert.assertEquals("field2_A_B_C", ((MutableFieldDeclaration[]) Conversions.unwrapArray(myClass.getDeclaredFields(), MutableFieldDeclaration.class))[1].getSimpleName());
};
this.assertProcessing(this.THREE_ANNOTATIONS, _mappedTo, _function);
}
use of org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration in project xtext-xtend by eclipse.
the class AbstractReusableActiveAnnotationTests method testMovingComputedTypes_02.
@Test
public void testMovingComputedTypes_02() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package myannotation");
_builder.newLine();
_builder.newLine();
_builder.append("import java.util.List");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.Active");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationContext");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.TransformationParticipant");
_builder.newLine();
_builder.append("import org.eclipse.xtend.lib.macro.declaration.MutableMethodDeclaration");
_builder.newLine();
_builder.newLine();
_builder.append("@Active(Method2FieldProcessor)");
_builder.newLine();
_builder.append("annotation Method2Field { }");
_builder.newLine();
_builder.append("class Method2FieldProcessor implements TransformationParticipant<MutableMethodDeclaration> {");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("override doTransform(List<? extends MutableMethodDeclaration> annotatedMethods, extension TransformationContext context) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("annotatedMethods.forEach [ method |");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("method.declaringType.addField(method.simpleName) [");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("type = method.returnType");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("initializer = method.body");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("method.remove");
_builder.newLine();
_builder.append("\t\t");
_builder.append("]");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("}");
_builder.newLine();
Pair<String, String> _mappedTo = Pair.<String, String>of("myannotation/MyAnnotation.xtend", _builder.toString());
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package myusercode");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("class MyClass {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("val foo = \'foo\'");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("@myannotation.Method2Field");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("def x() { foo }");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("@myannotation.Method2Field");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("def y() { x }");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
Pair<String, String> _mappedTo_1 = Pair.<String, String>of("myusercode/UserCode.xtend", _builder_1.toString());
final Procedure1<CompilationUnitImpl> _function = (CompilationUnitImpl it) -> {
final MutableClassDeclaration type = it.getTypeLookup().findClass("myusercode.MyClass");
final MutableFieldDeclaration field = ((MutableFieldDeclaration[]) Conversions.unwrapArray(type.getDeclaredFields(), MutableFieldDeclaration.class))[1];
Assert.assertEquals("java.lang.String", field.getType().getName());
};
this.assertProcessing(_mappedTo, _mappedTo_1, _function);
}
Aggregations