Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/functions/internal/FunctionDefContextImpl.java20
1 files changed, 14 insertions, 6 deletions
diff --git a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/functions/internal/FunctionDefContextImpl.java b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/functions/internal/FunctionDefContextImpl.java
index e159dffc..c3f0b2a9 100644
--- a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/functions/internal/FunctionDefContextImpl.java
+++ b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/functions/internal/FunctionDefContextImpl.java
@@ -15,6 +15,7 @@ import java.util.Collection;
import java.util.List;
import org.eclipse.xtend.backend.common.BackendType;
+import org.eclipse.xtend.backend.common.BackendTypesystem;
import org.eclipse.xtend.backend.common.ExecutionContext;
import org.eclipse.xtend.backend.common.Function;
import org.eclipse.xtend.backend.common.NamedFunction;
@@ -103,7 +104,7 @@ public final class FunctionDefContextImpl implements FunctionDefContextInternal
}
public Object invoke (ExecutionContext ctx, String functionName, List<? extends Object> params) {
- final Collection<Function> candidates = findFunctionCandidates (ctx, functionName, params);
+ final Collection<Function> candidates = findFunctionCandidates (functionName, typesForParameters (ctx.getTypesystem(), params));
Function f = null;
try {
@@ -119,11 +120,18 @@ public final class FunctionDefContextImpl implements FunctionDefContextInternal
/**
* is public only for testing purposes
*/
- public Collection<Function> findFunctionCandidates (ExecutionContext ctx, String functionName, List<? extends Object> params) {
+ public List<BackendType> typesForParameters (BackendTypesystem ts, List<?> params) {
final List<BackendType> paramTypes = new ArrayList<BackendType>();
for (Object o: params)
- paramTypes.add (ctx.getTypesystem().findType(o));
-
+ paramTypes.add (ts.findType(o));
+
+ return paramTypes;
+ }
+
+ /**
+ * is public only for testing purposes
+ */
+ public Collection<Function> findFunctionCandidates (String functionName, List<BackendType> paramTypes) {
try {
return _byParamTypes.get (functionName, paramTypes);
} catch (RuntimeException e) {
@@ -142,7 +150,7 @@ public final class FunctionDefContextImpl implements FunctionDefContextInternal
}
public Function getMatch (ExecutionContext ctx, String name, List<BackendType> params) {
- final Collection<Function> candidates = findFunctionCandidates (ctx, name, params);
+ final Collection<Function> candidates = findFunctionCandidates (name, params);
if (candidates.isEmpty())
return null;
if (candidates.size() > 1)
@@ -152,7 +160,7 @@ public final class FunctionDefContextImpl implements FunctionDefContextInternal
}
public boolean hasMatch (ExecutionContext ctx, String functionName, List<? extends Object> params) {
- return findFunctionCandidates (ctx, functionName, params).size() > 0;
+ return findFunctionCandidates (functionName, typesForParameters (ctx.getTypesystem(), params)).size() > 0;
}
@Override

Back to the top