removed usage of interface default methods

master
Stefan Dollase 2016-11-20 23:17:46 +01:00
parent 2226cb7116
commit f34fb54fbb
3 changed files with 29 additions and 34 deletions

View File

@ -1,31 +1,25 @@
package amidst.clazz.real;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import amidst.documentation.Immutable;
@Immutable
@FunctionalInterface
public interface RealClassDetector {
public default RealClass firstMatching(List<RealClass> realClasses) {
for (RealClass realClass : realClasses) {
if (detect(realClass)) {
return realClass;
}
}
return null;
public class RealClassDetector {
private final Predicate<RealClass> predicate;
public RealClassDetector(Predicate<RealClass> predicate) {
this.predicate = predicate;
}
public default List<RealClass> allMatching(List<RealClass> realClasses) {
List<RealClass> result = new ArrayList<>();
for (RealClass realClass : realClasses) {
if (detect(realClass)) {
result.add(realClass);
}
}
return result;
public Optional<RealClass> firstMatching(List<RealClass> realClasses) {
return realClasses.stream().filter(predicate).findFirst();
}
public boolean detect(RealClass realClass);
public List<RealClass> allMatching(List<RealClass> realClasses) {
return realClasses.stream().filter(predicate).collect(Collectors.toList());
}
}

View File

@ -4,7 +4,9 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import amidst.clazz.real.RealClass;
import amidst.clazz.real.RealClassDetector;
import amidst.clazz.symbolic.declaration.SymbolicClassDeclaration;
import amidst.clazz.symbolic.declaration.SymbolicConstructorDeclaration;
@ -115,8 +117,8 @@ public class CTBuilder {
this.previous = previous;
}
public CTBuilder ifDetect(RealClassDetector detector) {
this.detector = detector;
public CTBuilder ifDetect(Predicate<RealClass> predicate) {
this.detector = new RealClassDetector(predicate);
return this;
}
@ -132,8 +134,8 @@ public class CTBuilder {
if (detector == null) {
throw new IllegalStateException("can't declare a symbolic class without calling ifDetect before");
}
CTBuilder.this.declarationBuilder.init(symbolicClassName, isOptional);
return CTBuilder.this.declarationBuilder;
declarationBuilder.init(symbolicClassName, isOptional);
return declarationBuilder;
}
public ClassTranslator construct() {

View File

@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import amidst.clazz.real.RealClass;
import amidst.clazz.real.RealClassDetector;
@ -39,12 +40,10 @@ public class ClassTranslator {
public Map<SymbolicClassDeclaration, String> translate(List<RealClass> realClasses) throws ClassNotFoundException {
Map<SymbolicClassDeclaration, String> result = new HashMap<>();
for (Entry<RealClassDetector, SymbolicClassDeclaration> entry : translations.entrySet()) {
RealClass firstMatching = entry.getKey().firstMatching(realClasses);
String realClassName = null;
if (firstMatching != null) {
realClassName = firstMatching.getRealClassName();
}
addResult(result, entry.getValue(), realClassName);
addResult(
result,
entry.getValue(),
entry.getKey().firstMatching(realClasses).map(RealClass::getRealClassName));
}
return result;
}
@ -52,14 +51,14 @@ public class ClassTranslator {
private void addResult(
Map<SymbolicClassDeclaration, String> result,
SymbolicClassDeclaration declaration,
String realClassName) throws ClassNotFoundException {
if (realClassName == null) {
Optional<String> realClassName) throws ClassNotFoundException {
if (!realClassName.isPresent()) {
declaration.handleNoMatch();
} else if (result.containsKey(declaration)) {
declaration.handleMultipleMatches(result.get(declaration), realClassName);
declaration.handleMultipleMatches(result.get(declaration), realClassName.get());
} else {
declaration.handleMatch(realClassName);
result.put(declaration, realClassName);
declaration.handleMatch(realClassName.get());
result.put(declaration, realClassName.get());
}
}
}