diff --git a/injector-generator/src/org/jetbrains/jet/di/Field.java b/injector-generator/src/org/jetbrains/jet/di/Field.java index 3ea10835b11..acc9e920d7b 100644 --- a/injector-generator/src/org/jetbrains/jet/di/Field.java +++ b/injector-generator/src/org/jetbrains/jet/di/Field.java @@ -125,8 +125,9 @@ class Field { Class clazz = type.getClazz(); List result = Lists.newArrayList(); for (Method method : allGetters(clazz)) { - DiType type = DiType.fromReflectionType(method.getGenericReturnType()); - result.add(create(false, type, var(type), new GivenExpression(this.getName() + "." + method.getName() + "()"))); + MethodCall init = new MethodCall(this, method); + DiType initType = init.getType(); + result.add(create(false, initType, var(initType), init)); } return result; } diff --git a/injector-generator/src/org/jetbrains/jet/di/InjectionLogicGenerator.java b/injector-generator/src/org/jetbrains/jet/di/InjectionLogicGenerator.java index 9f69717f936..990bbc16cc2 100644 --- a/injector-generator/src/org/jetbrains/jet/di/InjectionLogicGenerator.java +++ b/injector-generator/src/org/jetbrains/jet/di/InjectionLogicGenerator.java @@ -79,6 +79,9 @@ public abstract class InjectionLogicGenerator { ConstructorCall call = (ConstructorCall) initialization; return call.getConstructorArguments(); } + else if (initialization instanceof MethodCall) { + return Collections.singletonList(((MethodCall) initialization).getReceiver()); + } return Collections.emptyList(); } }); diff --git a/injector-generator/src/org/jetbrains/jet/di/MethodCall.kt b/injector-generator/src/org/jetbrains/jet/di/MethodCall.kt new file mode 100644 index 00000000000..929810c922f --- /dev/null +++ b/injector-generator/src/org/jetbrains/jet/di/MethodCall.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.di + +import java.lang.reflect.Method +import org.jetbrains.jet.lang.types.JetType + +public class MethodCall( + val receiver: Field, + val method: Method +) : Expression { + override fun renderAsCode(): String { + return "${receiver.getName()}.${method.getName()}()" + } + + override fun getTypesToImport() = listOf() + + override fun getType(): DiType = DiType.fromReflectionType(method.getGenericReturnType()) + +} \ No newline at end of file