Skip to content

Commit b6ece7b

Browse files
committed
Remove MethodParameterMemberParser hack
1 parent db7141b commit b6ece7b

13 files changed

+29
-32
lines changed

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/impl/OpAdaptationInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public OpAdaptationInfo(OpInfo srcInfo, Type type,
5959
List<FunctionalMethodType> fmts = FunctionalParameters.findFunctionalMethodTypes(type);
6060

6161
RetypingRequest r = new RetypingRequest(srcInfo.struct(), fmts);
62-
struct = Structs.from(r, problems, new OpRetypingMemberParser());
62+
struct = Structs.from(r, type, problems, new OpRetypingMemberParser());
6363
try {
6464
OpUtils.checkHasSingleOutput(struct);
6565
}

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/impl/OpClassInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public OpClassInfo(final Class<?> opClass, final String version, final Hints hin
7777
this.names = Arrays.asList(names);
7878
List<ValidityProblem> problems = new ArrayList<>();
7979
try {
80-
struct = Structs.from(opClass, problems, new ClassParameterMemberParser(), new ClassOpDependencyMemberParser());
80+
struct = Structs.from(opClass, opClass, problems, new ClassParameterMemberParser(), new ClassOpDependencyMemberParser());
8181
OpUtils.checkHasSingleOutput(struct);
8282
} catch (ValidityException e) {
8383
validityException = e;

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/impl/OpFieldInfo.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.scijava.struct.StructInstance;
4949
import org.scijava.struct.Structs;
5050
import org.scijava.struct.ValidityException;
51+
import org.scijava.types.Types;
5152

5253
/**
5354
* Metadata about an op implementation defined as a field.
@@ -100,7 +101,8 @@ public OpFieldInfo(final Object instance, final Field field, final String versio
100101
// NB: Subclassing a collection and inheriting its fields is NOT
101102
// ALLOWED!
102103
try {
103-
struct = Structs.from(field, problems, new FieldParameterMemberParser());
104+
Type structType = Types.fieldType(field, field.getDeclaringClass());
105+
struct = Structs.from(field, structType, problems, new FieldParameterMemberParser());
104106
// struct = ParameterStructs.structOf(field);
105107
OpUtils.checkHasSingleOutput(struct);
106108
// NB: Contextual parameters not supported for now.

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/impl/OpMethodInfo.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,19 @@ public OpMethodInfo(final Method method, final Class<?> opType, final String ver
104104
checkModifiers(method, problems);
105105

106106
this.opType = findOpType(method, opType, problems);
107-
this.struct = generateStruct(method, problems, new MethodParameterMemberParser(opType), new MethodOpDependencyMemberParser());
107+
this.struct = generateStruct(method, opType, problems, new MethodParameterMemberParser(), new MethodOpDependencyMemberParser());
108108

109109
validityException = problems.isEmpty() ? null : new ValidityException(
110110
problems);
111111
}
112112

113113
@SafeVarargs
114-
private Struct generateStruct(Method m, List<ValidityProblem> problems,
115-
MemberParser<Method, ? extends Member<?>> ... memberParsers)
114+
private Struct generateStruct(Method m, Type structType,
115+
List<ValidityProblem> problems,
116+
MemberParser<Method, ? extends Member<?>>... memberParsers)
116117
{
117118
try {
118-
return Structs.from(m, problems, memberParsers);
119+
return Structs.from(m, structType, problems, memberParsers);
119120
} catch (IllegalArgumentException e) {
120121
problems.add(new ValidityProblem(e));
121122
return null;

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/simplify/SimplifiedOpInfo.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public SimplifiedOpInfo(OpInfo info, SimplificationMetadata metadata, double pri
7575
this.opType = SimplificationUtils.retypeOpType(info.opType(), inputTypes,
7676
outputType);
7777
RetypingRequest r = new RetypingRequest(info.struct(), fmts);
78-
this.struct = Structs.from(r, problems, new OpRetypingMemberParser());
78+
this.struct = Structs.from(r, opType, problems, new OpRetypingMemberParser());
7979

8080
this.priority = priority;
8181
this.hints = srcInfo.declaredHints().plus(Simplification.FORBIDDEN);

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/struct/ClassOpDependencyMemberParser.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import java.lang.reflect.Field;
55
import java.lang.reflect.Modifier;
6+
import java.lang.reflect.Type;
67
import java.util.ArrayList;
78
import java.util.List;
89

@@ -17,7 +18,7 @@ public class ClassOpDependencyMemberParser implements
1718
{
1819

1920
@Override
20-
public List<FieldOpDependencyMember<?>> parse(Class<?> source)
21+
public List<FieldOpDependencyMember<?>> parse(Class<?> source, Type structType)
2122
throws ValidityException
2223
{
2324
if (source == null) return null;

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/struct/ClassParameterMemberParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class ClassParameterMemberParser implements
1919
{
2020

2121
@Override
22-
public List<SynthesizedParameterMember<?>> parse(Class<?> source)
22+
public List<SynthesizedParameterMember<?>> parse(Class<?> source, Type structType)
2323
throws ValidityException
2424
{
2525
if (source == null) return null;

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/struct/FieldParameterMemberParser.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class FieldParameterMemberParser implements
1717
{
1818

1919
@Override
20-
public List<SynthesizedParameterMember<?>> parse(Field source)
20+
public List<SynthesizedParameterMember<?>> parse(Field source, Type structType)
2121
throws ValidityException
2222
{
2323
if (source == null) return null;
@@ -32,7 +32,7 @@ public List<SynthesizedParameterMember<?>> parse(Field source)
3232

3333
org.scijava.struct.Structs.checkModifiers(source.toString() + ": ", problems, source
3434
.getModifiers(), false, Modifier.FINAL);
35-
FunctionalParameters.parseFunctionalParameters(items, problems, fieldType,
35+
FunctionalParameters.parseFunctionalParameters(items, problems, structType,
3636
paramData);
3737
// Fail if there were any problems.
3838
if (!problems.isEmpty()) {

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/struct/MethodOpDependencyMemberParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class MethodOpDependencyMemberParser implements
2626
private static final Map<Method, MethodJavadoc> methodDocMap = new ConcurrentHashMap<>();
2727

2828
@Override
29-
public List<MethodParameterOpDependencyMember<?>> parse(Method source)
29+
public List<MethodParameterOpDependencyMember<?>> parse(Method source, Type structType)
3030
throws ValidityException
3131
{
3232
if (source == null) return null;

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/struct/MethodParameterMemberParser.java

+3-13
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,8 @@
1616
public class MethodParameterMemberParser implements
1717
MemberParser<Method, SynthesizedParameterMember<?>>
1818
{
19-
private final Class<?> opType;
20-
21-
/**
22-
* HACK: We need the opType here to determine the functional type.
23-
* @param opType
24-
*/
25-
public MethodParameterMemberParser(Class<?> opType) {
26-
this.opType = opType;
27-
}
28-
2919
@Override
30-
public List<SynthesizedParameterMember<?>> parse(Method source)
20+
public List<SynthesizedParameterMember<?>> parse(Method source, Type structType)
3121
throws ValidityException
3222
{
3323
if (source == null) return null;
@@ -43,11 +33,11 @@ public List<SynthesizedParameterMember<?>> parse(Method source)
4333
// Determine functional type
4434
Type functionalType;
4535
try {
46-
functionalType = OpMethodUtils.getOpMethodType(opType, source);
36+
functionalType = OpMethodUtils.getOpMethodType(Types.raw(structType), source);
4737
}
4838
catch (IllegalArgumentException e) {
4939
problems.add(new ValidityProblem(e.getMessage()));
50-
functionalType = Types.parameterizeRaw(opType);
40+
functionalType = Types.parameterizeRaw(Types.raw(structType));
5141
}
5242

5343
// Parse method level @Parameter annotations.

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/struct/OpRetypingMemberParser.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
package org.scijava.ops.engine.struct;
33

4+
import java.lang.reflect.Type;
45
import java.util.ArrayList;
56
import java.util.List;
67

@@ -37,7 +38,7 @@ public class OpRetypingMemberParser implements
3738
* output of this {@link SimplifiedOpInfo}
3839
*/
3940
@Override
40-
public List<Member<?>> parse(RetypingRequest source)
41+
public List<Member<?>> parse(RetypingRequest source, Type structType)
4142
throws ValidityException
4243
{
4344
List<FunctionalMethodType> newFmts = source.newFmts();
@@ -58,10 +59,10 @@ else if (m.isOutput()) {
5859
return newMembers;
5960
}
6061

61-
public List<Member<?>> parse(Struct s, List<FunctionalMethodType> newFmts)
62+
public List<Member<?>> parse(Struct s, List<FunctionalMethodType> newFmts, Type structType)
6263
throws ValidityException
6364
{
64-
return parse(new RetypingRequest(s, newFmts));
65+
return parse(new RetypingRequest(s, newFmts), structType);
6566
}
6667

6768
}

scijava/scijava-struct/src/main/java/org/scijava/struct/MemberParser.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ public interface MemberParser<S, M extends Member<?>> {
1818
* returned
1919
*
2020
* @param source the {@link Object} to parse
21+
* @param structType TODO
2122
* @return a {@link List} of {@link Member}s parsed from {@code source}
2223
* @throws {@link ValidityException} when the source of the {@link Member}s is
2324
* improperly declared, formatted
2425
*/
25-
List<M> parse(S source) throws ValidityException;
26+
List<M> parse(S source, Type structType) throws ValidityException;
2627

2728
}

scijava/scijava-struct/src/main/java/org/scijava/struct/Structs.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package org.scijava.struct;
33

44
import java.lang.reflect.Modifier;
5+
import java.lang.reflect.Type;
56
import java.util.ArrayList;
67
import java.util.List;
78
import java.util.function.Supplier;
@@ -30,13 +31,13 @@ public static <T> StructInstance<T> expand(
3031
}
3132

3233
@SafeVarargs
33-
public static <S> Struct from(S source, List<ValidityProblem> problems,
34+
public static <S> Struct from(S source, Type structType, List<ValidityProblem> problems,
3435
MemberParser<S, ? extends Member<?>>... parsers)
3536
{
3637
List<Member<?>> members = new ArrayList<>();
3738
for (MemberParser<S, ? extends Member<?>> p : parsers) {
3839
try {
39-
members.addAll(p.parse(source));
40+
members.addAll(p.parse(source, structType));
4041
}
4142
catch (ValidityException e) {
4243
problems.addAll(e.problems());

0 commit comments

Comments
 (0)