Skip to content

Commit fb7d30c

Browse files
committed
Remove MethodParameterMemberParser hack
1 parent 0bc7222 commit fb7d30c

File tree

13 files changed

+29
-32
lines changed

13 files changed

+29
-32
lines changed

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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 5 additions & 4 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 3 additions & 13 deletions
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.

0 commit comments

Comments
 (0)