Steve Ramage
07/01/2020, 4:52 AMval moduleCache : java.util.Map<ModuleInfo, WeakReference<ModuleInfo>> = Collections.synchronizedMap(WeakHashMap<ModuleInfo, WeakReference<ModuleInfo>>())
[TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH] Type inference failed. Expected type mismatch:
required:
java.util.Map<ModuleInfo, WeakReference<ModuleInfo>>
found:
(MutableMap<ModuleInfo!, WeakReference<ModuleInfo>!>..kotlin.collections.Map<ModuleInfo!, WeakReference<ModuleInfo>!>?)
Quy D X Nguyen
07/01/2020, 5:22 AMSteve Ramage
07/01/2020, 5:29 AMobject Cache {
val moduleCache = Collections.synchronizedMap(WeakHashMap<ModuleInfo, WeakReference<ModuleInfo>>())
val optionCache = Collections.synchronizedMap(WeakHashMap<OptionInfo, WeakReference<OptionInfo>>())
fun <K> intern(map : Map<K, WeakReference<K>>, obj: K) : K {
val newRef = WeakReference(obj);
val ref : K? = map.putIfAbsent(obj, newRef)?.get()
if(ref == null) {
return obj;
} else {
return ref;
}
}
}
The putIfAbsent method isn't found:
[UNRESOLVED_REFERENCE] Unresolved reference: putIfAbsent
Steve Ramage
07/01/2020, 5:30 AMfun ModuleInfo.intern() : ModuleInfo {
val obj = this;
val newRef = WeakReference(obj);
val ref : ModuleInfo? = Cache.moduleCache.putIfAbsent(obj, newRef)?.get()
if(ref == null) {
return obj;
} else {
return ref;
}
}
Steve Ramage
07/01/2020, 5:30 AMfun ModuleInfo.intern() : ModuleInfo {
Cache.intern(Cache.moduleCache, this);
}
nkiesel
07/01/2020, 7:00 AMputIfAbsent
isn't found because you have a Map which in Kotlin is immutable (and thus does not have the methods that modify the map). Try to replace Map
with MutableMap
Steve Ramage
07/01/2020, 2:38 PMval moduleCache : java.util.Map<ModuleInfo, WeakReference<ModuleInfo>> = java.util.Collections.synchronizedMap(java.util.WeakHashMap<ModuleInfo, WeakReference<ModuleInfo>>())
If something more recently changed so it's more like Scala with it's own collection classes then I 'half' understand why the above doesn't work, hoewevr even with every class name fully qualified I don't understand where the kotlin type is leaking in from. IntelliJ also seems to think that every method is the Java version.pniederw
07/01/2020, 10:10 PMkotlin.collections.(Mutable)Map
, which only contain a subset of methods present in the Java classes.Steve Ramage
07/01/2020, 10:11 PMpniederw
07/01/2020, 10:12 PMpniederw
07/01/2020, 10:15 PMSteve Ramage
07/01/2020, 10:15 PMval map : java.util.Map<String, String> = java.util.HashMap<String, String>()
Steve Ramage
07/01/2020, 10:15 PMSteve Ramage
07/01/2020, 10:17 PMSteve Ramage
07/01/2020, 10:19 PMpniederw
07/01/2020, 10:28 PMSteve Ramage
07/01/2020, 10:29 PM