bug with delegation from EA

This commit is contained in:
Alex Tkachman
2012-02-22 13:02:48 +02:00
parent c9c81ed70f
commit 18990e2c1b
6 changed files with 164 additions and 109 deletions
@@ -459,9 +459,47 @@ public class FunctionCodegen {
iv.aconst(null);
iv.areturn(overriden.getReturnType());
endVisit(mv, "bridge method", state.getBindingContext().get(BindingContext.DESCRIPTOR_TO_DECLARATION, functionDescriptor));
mv.visitEnd();
}
}
}
public void genDelegate(FunctionDescriptor functionDescriptor, CallableMemberDescriptor overriddenDescriptor, StackValue field) {
JvmMethodSignature jvmMethodSignature = state.getTypeMapper().mapSignature(functionDescriptor.getName(), functionDescriptor);
genDelegate(functionDescriptor, overriddenDescriptor, field, jvmMethodSignature);
}
public void genDelegate(CallableMemberDescriptor functionDescriptor, CallableMemberDescriptor overriddenDescriptor, StackValue field, JvmMethodSignature jvmMethodSignature) {
Method method = jvmMethodSignature.getAsmMethod();
int flags = ACC_PUBLIC | ACC_SYNTHETIC; // TODO.
final MethodVisitor mv = v.newMethod(null, flags, method.getName(), method.getDescriptor(), null, null);
if (v.generateCode()) {
mv.visitCode();
Type[] argTypes = method.getArgumentTypes();
InstructionAdapter iv = new InstructionAdapter(mv);
iv.load(0, JetTypeMapper.TYPE_OBJECT);
for (int i = 0, reg = 1; i < argTypes.length; i++) {
Type argType = argTypes[i];
iv.load(reg, argType);
if(argType.getSort() == Type.OBJECT) {
StackValue.onStack(JetTypeMapper.TYPE_OBJECT).put(method.getArgumentTypes()[i], iv);
}
//noinspection AssignmentToForLoopParameter
reg += argType.getSize();
}
iv.load(0, JetTypeMapper.TYPE_OBJECT);
field.put(field.type, iv);
ClassDescriptor classDescriptor = (ClassDescriptor) overriddenDescriptor.getContainingDeclaration();
String internalName = state.getTypeMapper().mapType(classDescriptor.getDefaultType()).getInternalName();
if(classDescriptor.getKind() == ClassKind.TRAIT)
iv.invokeinterface(internalName, method.getName(), method.getDescriptor());
else
iv.invokevirtual(internalName, method.getName(), method.getDescriptor());
iv.areturn(method.getReturnType());
endVisit(mv, "delegate method", state.getBindingContext().get(BindingContext.DESCRIPTOR_TO_DECLARATION, functionDescriptor));
}
}
}
@@ -567,17 +567,18 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
JetType superType = bindingContext.get(BindingContext.TYPE, specifier.getTypeReference());
assert superType != null;
ClassDescriptor superClassDescriptor = (ClassDescriptor) superType.getConstructor().getDeclarationDescriptor();
String delegateField = "$delegate_" + n;
Type fieldType = typeMapper.mapType(superClassDescriptor.getDefaultType(), OwnerKind.IMPLEMENTATION);
String delegateField = "$delegate_" + (n++);
Type fieldType = typeMapper.mapType(superClassDescriptor.getDefaultType());
String fieldDesc = fieldType.getDescriptor();
v.newField(specifier, ACC_PRIVATE, delegateField, fieldDesc, /*TODO*/null, null);
iv.putfield(classname, delegateField, fieldDesc);
StackValue field = StackValue.field(fieldType, classname, delegateField, false);
field.store(iv);
JetClass superClass = (JetClass) bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, superClassDescriptor);
final CodegenContext delegateContext = context.intoClass(superClassDescriptor,
new OwnerKind.DelegateKind(StackValue.field(fieldType, classname, delegateField, false),
typeMapper.mapType(superClassDescriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName()), state.getTypeMapper());
generateDelegates(superClass, delegateContext, overridden);
typeMapper.mapType(superClassDescriptor.getDefaultType()).getInternalName()), state.getTypeMapper());
generateDelegates(superClass, delegateContext, field);
}
}
@@ -657,7 +658,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
private void generateDelegationToTraitImpl(ExpressionCodegen codegen, @NotNull FunctionDescriptor fun) {
private void generateDelegationToTraitImpl(ExpressionCodegen codegen, FunctionDescriptor fun) {
DeclarationDescriptor containingDeclaration = fun.getContainingDeclaration();
if(containingDeclaration instanceof ClassDescriptor) {
ClassDescriptor declaration = (ClassDescriptor) containingDeclaration;
@@ -902,17 +903,26 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
protected void generateDelegates(JetClass toClass, CodegenContext delegateContext, Set<FunctionDescriptor> overriden) {
protected void generateDelegates(JetClass toClass, CodegenContext delegateContext, StackValue field) {
final FunctionCodegen functionCodegen = new FunctionCodegen(delegateContext, v, state);
final PropertyCodegen propertyCodegen = new PropertyCodegen(delegateContext, v, functionCodegen, state);
for (JetDeclaration declaration : toClass.getDeclarations()) {
if (declaration instanceof JetProperty) {
propertyCodegen.gen((JetProperty) declaration);
}
else if (declaration instanceof JetNamedFunction) {
if (!overriden.contains(bindingContext.get(BindingContext.FUNCTION, declaration))) {
functionCodegen.gen((JetNamedFunction) declaration);
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, toClass);
for (DeclarationDescriptor declaration : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
if (declaration instanceof CallableMemberDescriptor) {
CallableMemberDescriptor callableMemberDescriptor = (CallableMemberDescriptor) declaration;
if (callableMemberDescriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION) {
Set<? extends CallableMemberDescriptor> overriddenDescriptors = callableMemberDescriptor.getOverriddenDescriptors();
for (CallableMemberDescriptor overriddenDescriptor : overriddenDescriptors) {
if(overriddenDescriptor.getContainingDeclaration() == classDescriptor) {
if (declaration instanceof PropertyDescriptor) {
propertyCodegen.genDelegate((PropertyDescriptor) declaration, (PropertyDescriptor) overriddenDescriptor, field);
}
else if (declaration instanceof NamedFunctionDescriptor) {
functionCodegen.genDelegate((NamedFunctionDescriptor) declaration, overriddenDescriptor, field);
}
}
}
}
}
}
@@ -30,6 +30,10 @@ import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.commons.InstructionAdapter;
import org.objectweb.asm.commons.Method;
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
/**
* @author max
@@ -271,4 +275,14 @@ public class PropertyCodegen {
public static String setterName(String propertyName) {
return JvmAbi.SETTER_PREFIX + StringUtil.capitalizeWithJavaBeanConvention(propertyName);
}
public void genDelegate(PropertyDescriptor declaration, PropertyDescriptor overriddenDescriptor, StackValue field) {
JvmPropertyAccessorSignature jvmPropertyAccessorSignature = state.getTypeMapper().mapGetterSignature(declaration, OwnerKind.IMPLEMENTATION);
functionCodegen.genDelegate(declaration, overriddenDescriptor, field, jvmPropertyAccessorSignature.getJvmMethodSignature());
if(declaration.isVar()) {
jvmPropertyAccessorSignature = state.getTypeMapper().mapSetterSignature(declaration, OwnerKind.IMPLEMENTATION);
functionCodegen.genDelegate(declaration, overriddenDescriptor, field, jvmPropertyAccessorSignature.getJvmMethodSignature());
}
}
}
@@ -0,0 +1,24 @@
trait Trait1 {
fun foo() : String
}
trait Trait2 {
fun bar() : String
}
class T1 : Trait1{
override fun foo() = "aaa"
}
class T2 : Trait2{
override fun bar() = "bbb"
}
class C(a:Trait1, b:Trait2) : Trait1 by a, Trait2 by b
fun box() : String {
val c = C(T1(),T2())
if(c.foo() != "aaa") return "fail"
if(c.bar() != "bbb") return "fail"
return "OK"
}
@@ -47,6 +47,10 @@ public class ClassGenTest extends CodegenTestCase {
blackBoxFile("classes/inheritance.jet");
}
public void testInheritanceAndDelegation2() throws Exception {
blackBoxFile("classes/delegation2.kt");
}
public void testFunDelegation() throws Exception {
blackBoxFile("classes/funDelegation.jet");
}
+59 -94
View File
@@ -58,28 +58,19 @@
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="GuiceDsl.kt" pinned="false" current="false" current-in-tab="false">
<file leaf-file-name="GuiceDsl.kt" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/GuiceDsl.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="41" column="0" selection-start="1211" selection-end="1211" vertical-scroll-proportion="0.0">
<state line="31" column="59" selection-start="859" selection-end="859" vertical-scroll-proportion="0.3951613">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="LinkedBindingBuilder.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/binder/LinkedBindingBuilder.java">
<file leaf-file-name="Singleton.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Singleton.java">
<provider selected="true" editor-type-id="text-editor">
<state line="50" column="0" selection-start="1509" selection-end="1509" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BindingBuilder.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/internal/BindingBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="129" column="53" selection-start="4384" selection-end="4384" vertical-scroll-proportion="0.0">
<state line="32" column="18" selection-start="1107" selection-end="1107" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -130,10 +121,10 @@
</provider>
</entry>
</file>
<file leaf-file-name="GuiceExample.kt" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="GuiceExample.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/GuiceExample.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="31" column="50" selection-start="860" selection-end="860" vertical-scroll-proportion="0.5938967">
<state line="45" column="87" selection-start="1494" selection-end="1494" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -167,10 +158,9 @@
</option>
</component>
<component name="ProjectFrameBounds">
<option name="x" value="1" />
<option name="y" value="22" />
<option name="width" value="1411" />
<option name="height" value="826" />
<option name="y" value="32" />
<option name="width" value="1429" />
<option name="height" value="790" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
@@ -203,16 +193,6 @@
<sortByType />
</navigator>
<panes>
<pane id="Scope">
<subPane subId="Project Files">
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="ProjectPane">
<subPane>
<PATH>
@@ -237,6 +217,16 @@
</PATH>
</subPane>
</pane>
<pane id="Scope">
<subPane subId="Project Files">
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="PackagesPane">
<subPane>
<PATH>
@@ -506,7 +496,7 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="1" y="22" width="1411" height="826" extended-state="0" />
<frame x="0" y="32" width="1429" height="790" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
@@ -515,22 +505,23 @@
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39886847" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32956153" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="CodeWindow" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39985326" sideWeight="0.6718529" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Kotlin" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294714" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32956153" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32956153" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24944974" sideWeight="0.6718529" order="0" side_tool="false" content_ui="combo" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24909486" sideWeight="0.671151" order="0" side_tool="false" content_ui="combo" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3281471" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="ResolveWindow" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.37655678" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32956153" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="CodeWindow" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39985326" sideWeight="0.6718529" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32884902" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="ResolveWindow" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.37655678" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
@@ -590,112 +581,86 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Stage.java">
<provider selected="true" editor-type-id="text-editor">
<state line="23" column="12" selection-start="720" selection-end="720" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Scope.java">
<provider selected="true" editor-type-id="text-editor">
<state line="16" column="0" selection-start="597" selection-end="597" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/internal/Scoping.java">
<provider selected="true" editor-type-id="text-editor">
<state line="32" column="0" selection-start="1182" selection-end="1182" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="32" column="0" selection-start="1182" selection-end="1182" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/binder/AnnotatedBindingBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="25" column="63" selection-start="850" selection-end="850" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="25" column="63" selection-start="850" selection-end="850" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Provider.java">
<provider selected="true" editor-type-id="text-editor">
<state line="44" column="17" selection-start="1946" selection-end="1946" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="44" column="17" selection-start="1946" selection-end="1946" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Binder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="243" column="14" selection-start="11110" selection-end="11110" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="243" column="14" selection-start="11110" selection-end="11110" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/binder/LinkedBindingBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="50" column="0" selection-start="1509" selection-end="1509" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/spi/InjectionPoint.java">
<provider selected="true" editor-type-id="text-editor">
<state line="374" column="30" selection-start="14896" selection-end="14896" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="50" column="0" selection-start="1509" selection-end="1509" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/internal/BindingBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="129" column="53" selection-start="4384" selection-end="4384" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="129" column="53" selection-start="4384" selection-end="4384" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Singleton.java">
<provider selected="true" editor-type-id="text-editor">
<state line="32" column="18" selection-start="1107" selection-end="1107" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/spi/InjectionPoint.java">
<provider selected="true" editor-type-id="text-editor">
<state line="374" column="30" selection-start="14896" selection-end="14896" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/binder/ScopedBindingBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="31" column="0" selection-start="936" selection-end="936" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="31" column="0" selection-start="936" selection-end="936" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/internal/AbstractBindingBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state line="88" column="34" selection-start="3438" selection-end="3438" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="88" column="34" selection-start="3438" selection-end="3438" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/internal/BindingImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state line="99" column="0" selection-start="2736" selection-end="2736" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="99" column="0" selection-start="2736" selection-end="2736" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/internal/ProviderInstanceBindingImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state line="79" column="24" selection-start="3009" selection-end="3009" vertical-scroll-proportion="0.0">
<folding />
</state>
<state line="79" column="24" selection-start="3009" selection-end="3009" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/GuiceExample.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="45" column="87" selection-start="1494" selection-end="1494" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/guice-3.0-sources.jar!/com/google/inject/Injector.java">
<provider selected="true" editor-type-id="text-editor">
<state line="148" column="0" selection-start="6054" selection-end="6054" vertical-scroll-proportion="0.0">
<state line="148" column="0" selection-start="6054" selection-end="6054" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/../../../dist/kotlinc/lib/kotlin-runtime.jar!/std/namespace.class">
<provider selected="true" editor-type-id="text-editor">
<state line="336" column="0" selection-start="40990" selection-end="40990" vertical-scroll-proportion="0.32130584">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/GuiceDsl.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="41" column="0" selection-start="1211" selection-end="1211" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/GuiceExample.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="31" column="50" selection-start="860" selection-end="860" vertical-scroll-proportion="0.5938967">
<state line="31" column="59" selection-start="859" selection-end="859" vertical-scroll-proportion="0.3951613">
<folding />
</state>
</provider>