diff --git a/CHANGELOG.md b/CHANGELOG.md index 095dd6839..f34333750 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +## 1.5.12 +* Bugfix: Function types for inherited methods could in some cases show wrong signature when type parameters where used. +* Bugfix: Auto-completion would in some cases show wrong types when type parameters where used. +* Improvement: performance improvements (expression evaluation cache) +* ## 1.5.11 * Improvement: Variables and members with only init expression "= null" should now correctly resolve to type Null. * Improvement: Added parser support for `TIntersection` reification (macro : type & type) diff --git a/src/main/java/com/intellij/plugins/haxe/ide/lookup/HaxeMemberLookupElement.java b/src/main/java/com/intellij/plugins/haxe/ide/lookup/HaxeMemberLookupElement.java index f8a707dbe..73a820018 100644 --- a/src/main/java/com/intellij/plugins/haxe/ide/lookup/HaxeMemberLookupElement.java +++ b/src/main/java/com/intellij/plugins/haxe/ide/lookup/HaxeMemberLookupElement.java @@ -26,6 +26,7 @@ import com.intellij.plugins.haxe.lang.psi.*; import com.intellij.plugins.haxe.model.*; import com.intellij.plugins.haxe.model.type.HaxeGenericResolver; +import com.intellij.plugins.haxe.model.type.HaxeGenericResolverUtil; import com.intellij.plugins.haxe.model.type.ResultHolder; import com.intellij.plugins.haxe.model.type.SpecificFunctionReference; import com.intellij.plugins.haxe.util.HaxePresentableUtil; @@ -89,9 +90,17 @@ public static Collection convert(HaxeResolveResult left } if (!shouldBeIgnored) { HaxeBaseMemberModel model = HaxeBaseMemberModel.fromPsi(componentName); - if (model instanceof HaxeMethodModel) { - // adding functionType in addition to method call - result.add(new HaxeMemberLookupElement(leftReferenceResolveResult, componentName, context, resolver, model, true)); + if (model != null) { + HaxeClassModel classModel = model.getDeclaringClass(); + if (classModel != null && leftReferenceResolveResult != null) { + HaxeClass currentClass = leftReferenceResolveResult.getHaxeClass(); + HaxeClass membersClass = classModel.haxeClass; + resolver = HaxeGenericResolverUtil.createInheritedClassResolver(membersClass, currentClass, resolver); + } + if (model instanceof HaxeMethodModel) { + // adding functionType in addition to method call + result.add(new HaxeMemberLookupElement(leftReferenceResolveResult, componentName, context, resolver, model, true)); + } } result.add(new HaxeMemberLookupElement(leftReferenceResolveResult, componentName, context, resolver, model)); } diff --git a/src/main/java/com/intellij/plugins/haxe/model/type/HaxeExpressionEvaluatorCacheService.java b/src/main/java/com/intellij/plugins/haxe/model/type/HaxeExpressionEvaluatorCacheService.java index a65c805b3..eb920a890 100644 --- a/src/main/java/com/intellij/plugins/haxe/model/type/HaxeExpressionEvaluatorCacheService.java +++ b/src/main/java/com/intellij/plugins/haxe/model/type/HaxeExpressionEvaluatorCacheService.java @@ -40,7 +40,9 @@ public class HaxeExpressionEvaluatorCacheService { public void clearCaches() { - cacheMap.clear(); + synchronized(this) { + cacheMap.clear(); + } } }