package org.eclipse.xtend.lib; import java.util.function.Consumer; import org.eclipse.xtend.lib.annotations.AccessorsProcessor; import org.eclipse.xtend.lib.annotations.EqualsHashCodeProcessor; import org.eclipse.xtend.lib.annotations.FinalFieldsConstructorProcessor; import org.eclipse.xtend.lib.annotations.ToStringProcessor; import org.eclipse.xtend.lib.macro.AbstractClassProcessor; import org.eclipse.xtend.lib.macro.TransformationContext; import org.eclipse.xtend.lib.macro.declaration.ClassDeclaration; import org.eclipse.xtend.lib.macro.declaration.FieldDeclaration; import org.eclipse.xtend.lib.macro.declaration.MutableClassDeclaration; import org.eclipse.xtend.lib.macro.declaration.MutableFieldDeclaration; import org.eclipse.xtend.lib.macro.declaration.MutableMethodDeclaration; import org.eclipse.xtend.lib.macro.declaration.Visibility; import org.eclipse.xtend2.lib.StringConcatenationClient; import org.eclipse.xtext.xbase.lib.Extension; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; import org.eclipse.xtext.xbase.lib.Pure; import org.eclipse.xtext.xbase.lib.StringExtensions; import org.eclipse.xtext.xbase.lib.util.ToStringHelper; /** * @since 2.7 * @noextend * @noreference */ @Deprecated @SuppressWarnings("all") public class DataProcessor extends AbstractClassProcessor { /** * @since 2.7 * @noextend * @noreference */ @Deprecated public static class Util { @Extension private TransformationContext context; public Util(final TransformationContext context) { this.context = context; } public Iterable<? extends FieldDeclaration> getDataFields(final ClassDeclaration it) { final Function1<FieldDeclaration, Boolean> _function = (FieldDeclaration it_1) -> { return Boolean.valueOf(((!it_1.isStatic()) && this.context.isThePrimaryGeneratedJavaElement(it_1))); }; return IterableExtensions.filter(it.getDeclaredFields(), _function); } public Iterable<? extends MutableFieldDeclaration> getDataFields(final MutableClassDeclaration it) { final Function1<MutableFieldDeclaration, Boolean> _function = (MutableFieldDeclaration it_1) -> { return Boolean.valueOf(((!it_1.isStatic()) && this.context.isThePrimaryGeneratedJavaElement(it_1))); }; return IterableExtensions.filter(it.getDeclaredFields(), _function); } public void addDataToString(final MutableClassDeclaration cls) { final Procedure1<MutableMethodDeclaration> _function = (MutableMethodDeclaration it) -> { this.context.setPrimarySourceElement(it, this.context.getPrimarySourceElement(cls)); it.setReturnType(this.context.getString()); it.addAnnotation(this.context.newAnnotationReference(Override.class)); it.addAnnotation(this.context.newAnnotationReference(Pure.class)); StringConcatenationClient _client = new StringConcatenationClient() { @Override protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) { _builder.append("String result = new "); _builder.append(ToStringHelper.class); _builder.append("().toString(this);"); _builder.newLineIfNotEmpty(); _builder.append("return result;"); _builder.newLine(); } }; it.setBody(_client); }; cls.addMethod("toString", _function); } } @Override public void doTransform(final MutableClassDeclaration it, @Extension final TransformationContext context) { @Extension final DataProcessor.Util util = new DataProcessor.Util(context); @Extension final AccessorsProcessor.Util getterUtil = new AccessorsProcessor.Util(context); @Extension final EqualsHashCodeProcessor.Util ehUtil = new EqualsHashCodeProcessor.Util(context); @Extension final ToStringProcessor.Util toStringUtil = new ToStringProcessor.Util(context); @Extension final FinalFieldsConstructorProcessor.Util requiredArgsUtil = new FinalFieldsConstructorProcessor.Util(context); final Consumer<MutableFieldDeclaration> _function = (MutableFieldDeclaration it_1) -> { it_1.setFinal(true); }; util.getDataFields(it).forEach(_function); boolean _needsFinalFieldConstructor = requiredArgsUtil.needsFinalFieldConstructor(it); if (_needsFinalFieldConstructor) { requiredArgsUtil.addFinalFieldsConstructor(it); } boolean _hasHashCode = ehUtil.hasHashCode(it); boolean _not = (!_hasHashCode); if (_not) { ehUtil.addHashCode(it, util.getDataFields(it), ehUtil.hasSuperHashCode(it)); } boolean _hasEquals = ehUtil.hasEquals(it); boolean _not_1 = (!_hasEquals); if (_not_1) { ehUtil.addEquals(it, util.getDataFields(it), ehUtil.hasSuperEquals(it)); } boolean _hasToString = toStringUtil.hasToString(it); boolean _not_2 = (!_hasToString); if (_not_2) { util.addDataToString(it); } final Consumer<MutableFieldDeclaration> _function_1 = (MutableFieldDeclaration it_1) -> { boolean _shouldAddGetter = getterUtil.shouldAddGetter(it_1); if (_shouldAddGetter) { getterUtil.addGetter(it_1, Visibility.PUBLIC); } String _firstLower = StringExtensions.toFirstLower(it_1.getSimpleName()); String _plus = ("_" + _firstLower); it_1.setSimpleName(_plus); }; util.getDataFields(it).forEach(_function_1); } }