package org.erlide.erlang.util;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtext.junit4.util.ParseHelper;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Conversions;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.Functions.Function2;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xbase.lib.Pair;
import org.erlide.erlang.Module;
@SuppressWarnings("all")
public class ErlangTestingHelper {
@Inject
private ParseHelper<Module> parser;
public final String MARKER = "�";
public Pair<Module, List<Integer>> parse(final String string) {
try {
final Pair<String, List<Integer>> res = this.extractMarkers(string);
String _key = res.getKey();
Module _parse = this.parser.parse(_key);
List<Integer> _value = res.getValue();
return Pair.<Module, List<Integer>>of(_parse, _value);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public Pair<Module, List<Integer>> parse(final String string, final String uri, final ResourceSet rset) {
try {
final Pair<String, List<Integer>> res = this.extractMarkers(string);
String _key = res.getKey();
URI _createURI = URI.createURI(uri);
Module _parse = this.parser.parse(_key, _createURI, rset);
List<Integer> _value = res.getValue();
return Pair.<Module, List<Integer>>of(_parse, _value);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public Pair<String, List<Integer>> extractMarkers(final String string) {
final String[] parts = string.split(this.MARKER);
List<Integer> list = CollectionLiterals.<Integer>newArrayList();
int _size = ((List<String>)Conversions.doWrapArray(parts)).size();
boolean _equals = (_size == 1);
if (_equals) {
boolean _contains = string.contains(this.MARKER);
if (_contains) {
String _get = parts[0];
int _length = _get.length();
list.add(Integer.valueOf(_length));
String _get_1 = parts[0];
return Pair.<String, List<Integer>>of(_get_1, list);
} else {
return Pair.<String, List<Integer>>of(string, list);
}
}
final Function1<String, Integer> _function = new Function1<String, Integer>() {
@Override
public Integer apply(final String it) {
return Integer.valueOf(it.length());
}
};
List<Integer> _map = ListExtensions.<String, Integer>map(((List<String>)Conversions.doWrapArray(parts)), _function);
ArrayList<Integer> _newArrayList = Lists.<Integer>newArrayList(_map);
list = _newArrayList;
int _size_1 = ((List<String>)Conversions.doWrapArray(parts)).size();
int _minus = (_size_1 - 1);
list.remove(_minus);
final List<Integer> result = CollectionLiterals.<Integer>newArrayList();
final Function2<Integer, Integer, Integer> _function_1 = new Function2<Integer, Integer, Integer>() {
@Override
public Integer apply(final Integer crt, final Integer old) {
int _xblockexpression = (int) 0;
{
final int anew = ((crt).intValue() + (old).intValue());
result.add(Integer.valueOf(anew));
_xblockexpression = anew;
}
return Integer.valueOf(_xblockexpression);
}
};
IterableExtensions.<Integer, Integer>fold(list, Integer.valueOf(0), _function_1);
String _join = IterableExtensions.join(((Iterable<?>)Conversions.doWrapArray(parts)));
return Pair.<String, List<Integer>>of(_join, result);
}
}