Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9626b8f

Browse filesBrowse files
SlavaRaelsassph
authored andcommitted
[ASGenerator] 'Implement interface methods' shouldn't be show inside the class. fixes fdorg#1982 (fdorg#1983)
* Small cleanup... * WIP * [ASGenerator] 'Implement interface methods' shouldn't be show inside the class. fixes fdorg#1982
1 parent e69f854 commit 9626b8f
Copy full SHA for 9626b8f
Expand file treeCollapse file tree

18 files changed

+225
-69
lines changed
Open diff view settings
Collapse file

‎External/Plugins/ASCompletion/Completion/ASGenerator.cs‎

Copy file name to clipboardExpand all lines: External/Plugins/ASCompletion/Completion/ASGenerator.cs
+13-8Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,17 @@ protected virtual void ContextualGenerator(ScintillaControl sci, int position, A
102102
resolve.Type = null;
103103
}
104104

105-
if (isNotInterface && found.inClass != ClassModel.VoidClass && contextToken != null)
105+
if (isNotInterface && !found.inClass.IsVoid() && contextToken != null)
106106
{
107-
if (resolve.Member == null && resolve.Type != null
108-
&& (resolve.Type.Flags & FlagType.Interface) > 0) // implement interface
107+
// implement interface
108+
if (CanShowImplementInterfaceList(resolve))
109109
{
110110
contextParam = resolve.Type.Type;
111111
ShowImplementInterface(found, options);
112112
return;
113113
}
114-
115-
if (resolve.Member != null && !context.CurrentClass.IsVoid()
116-
&& (resolve.Member.Flags & FlagType.LocalVar) > 0) // promote to class var
114+
// promote to class var
115+
if (!context.CurrentClass.IsVoid() && resolve.Member != null && (resolve.Member.Flags & FlagType.LocalVar) > 0)
117116
{
118117
contextMember = resolve.Member;
119118
ShowPromoteLocalAndAddParameter(found, options);
@@ -312,7 +311,7 @@ protected virtual void ContextualGenerator(ScintillaControl sci, int position, A
312311
}
313312

314313
// suggest generate constructor / toString
315-
if (isNotInterface && found.member == null && found.inClass != ClassModel.VoidClass && contextToken == null)
314+
if (isNotInterface && found.member == null && !found.inClass.IsVoid() && contextToken == null)
316315
{
317316
bool hasConstructor = false;
318317
bool hasToString = false;
@@ -336,7 +335,7 @@ protected virtual void ContextualGenerator(ScintillaControl sci, int position, A
336335
&& resolve.Member != null
337336
&& resolve.Type != null
338337
&& resolve.Type.QualifiedName == context.Features.stringKey
339-
&& found.inClass != ClassModel.VoidClass)
338+
&& !found.inClass.IsVoid())
340339
{
341340
int lineStartPos = sci.PositionFromLine(sci.CurrentLine);
342341
var text = sci.GetLine(line);
@@ -449,6 +448,12 @@ protected virtual void ContextualGenerator(ScintillaControl sci, int position, A
449448
// TODO: Empty line, show generators list? yep
450449
}
451450

451+
protected virtual bool CanShowImplementInterfaceList(ASResult resolve)
452+
{
453+
return resolve.Context.ContextFunction == null && resolve.Context.ContextMember == null
454+
&& resolve.Member == null && resolve.Type != null && (resolve.Type.Flags & FlagType.Interface) > 0;
455+
}
456+
452457
private static MemberModel ResolveDelegate(string type, FileModel inFile)
453458
{
454459
foreach (MemberModel def in inFile.Members)
Collapse file

‎External/Plugins/HaXeContext/Completion/CodeGenerator.cs‎

Copy file name to clipboardExpand all lines: External/Plugins/HaXeContext/Completion/CodeGenerator.cs
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ protected override void ContextualGenerator(ScintillaControl sci, int position,
2222
}
2323
base.ContextualGenerator(sci, position, expr, options);
2424
}
25+
26+
protected override bool CanShowImplementInterfaceList(ASResult resolve)
27+
{
28+
return resolve.Context.Separator != "=" && base.CanShowImplementInterfaceList(resolve);
29+
}
2530
}
2631

2732
class GeneratorItem : ICompletionListItem
Collapse file

‎Tests/External/Plugins/ASCompletion.Tests/ASCompletion.Tests.csproj‎

Copy file name to clipboardExpand all lines: Tests/External/Plugins/ASCompletion.Tests/ASCompletion.Tests.csproj
+14Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,20 @@
906906
<EmbeddedResource Include="Test Files\completion\haxe\GetExpressionType_Type_stringInitializer_2.hx" />
907907
<EmbeddedResource Include="Test Files\parser\haxe\Issue1964_package_test.extern.hx" />
908908
<EmbeddedResource Include="Test Files\parser\haxe\AbstractsTest2.hx" />
909+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1982_1.hx" />
910+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1982_1.hx" />
911+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1982_2.hx" />
912+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1982_2.hx" />
913+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1982_3.hx" />
914+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1982_3.hx" />
915+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1982_4.hx" />
916+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1982_4.hx" />
917+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1982_5.hx" />
918+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1982_5.hx" />
919+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1982_6.hx" />
920+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1982_6.hx" />
921+
<EmbeddedResource Include="Test Files\generated\haxe\BeforeImplementInterface_issue1696_3.hx" />
922+
<EmbeddedResource Include="Test Files\generated\haxe\AfterImplementInterface_issue1696_3.hx" />
909923
</ItemGroup>
910924
<ItemGroup>
911925
<ProjectReference Include="..\..\..\..\External\Plugins\AS2Context\AS2Context.csproj">
Collapse file

‎Tests/External/Plugins/ASCompletion.Tests/Completion/ASGeneratorTests.cs‎

Copy file name to clipboardExpand all lines: Tests/External/Plugins/ASCompletion.Tests/Completion/ASGeneratorTests.cs
+59-61Lines changed: 59 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -537,12 +537,17 @@ public IEnumerable<TestCaseData> HaxeTestCases
537537
yield return
538538
new TestCaseData(ReadAllTextHaxe("BeforeImplementInterface_issue1696_1"), GeneratorJobType.ImplementInterface)
539539
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1696_1"))
540-
.SetName("Implement interface methods. Issue 1696")
540+
.SetName("Implement interface methods. Issue 1696. Case 1")
541541
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1696");
542542
yield return
543543
new TestCaseData(ReadAllTextHaxe("BeforeImplementInterface_issue1696_2"), GeneratorJobType.ImplementInterface)
544544
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1696_2"))
545-
.SetName("Implement interface properties. Issue 1696")
545+
.SetName("Implement interface properties. Issue 1696. Case 2")
546+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1696");
547+
yield return
548+
new TestCaseData(ReadAllTextHaxe("BeforeImplementInterface_issue1696_3"), GeneratorJobType.ImplementInterface)
549+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1696_3"))
550+
.SetName("Implement interface properties. Issue 1696. Case 3")
546551
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1696");
547552
}
548553
}
@@ -557,8 +562,10 @@ public string Haxe(string sourceText, GeneratorJobType job)
557562
string Common(string sourceText, GeneratorJobType job)
558563
{
559564
SetSrc(sci, sourceText);
560-
ASGenerator.contextParam = ASContext.Context.CurrentClass.Implements.First();
561-
ASGenerator.GenerateJob(job, null, ASContext.Context.CurrentClass, null, null);
565+
var options = new List<ICompletionListItem>();
566+
ASGenerator.ContextualGenerator(sci, options);
567+
var item = options.Find(it => ((GeneratorItem)it).job == job);
568+
var value = item.Value;
562569
return sci.Text;
563570
}
564571
}
@@ -3179,62 +3186,6 @@ internal static string Common(string sourceText, ScintillaControl sci)
31793186
}
31803187
}
31813188

3182-
[TestFixture]
3183-
public class ContextualGeneratorTests : GenerateJob
3184-
{
3185-
[TestFixtureSetUp]
3186-
public void AddInterfaceDefTestsSetup() => ASContext.Context.Settings.GenerateImports.Returns(true);
3187-
3188-
public IEnumerable<TestCaseData> HaxeTestCases
3189-
{
3190-
get
3191-
{
3192-
yield return
3193-
new TestCaseData("BeforeContextualGeneratorTests_issue1747_1")
3194-
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_1"))
3195-
.SetName("Issue1747. Case 1")
3196-
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3197-
yield return
3198-
new TestCaseData("BeforeContextualGeneratorTests_issue1747_2")
3199-
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_2"))
3200-
.SetName("Issue1747. Case 2")
3201-
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3202-
yield return
3203-
new TestCaseData("BeforeContextualGeneratorTests_issue1747_3")
3204-
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_3"))
3205-
.SetName("Issue1747. Case 3")
3206-
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3207-
yield return
3208-
new TestCaseData("BeforeContextualGeneratorTests_issue1747_4")
3209-
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_4"))
3210-
.SetName("Issue1747. Case 4")
3211-
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3212-
yield return
3213-
new TestCaseData("BeforeContextualGeneratorTests_issue1767_1")
3214-
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1767_1"))
3215-
.SetName("Issue1767. Case 1")
3216-
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1767");
3217-
}
3218-
}
3219-
3220-
[Test, TestCaseSource(nameof(HaxeTestCases))]
3221-
public string Haxe(string fileName) => HaxeImpl(fileName, sci);
3222-
3223-
internal static string HaxeImpl(string fileName, ScintillaControl sci)
3224-
{
3225-
SetHaxeFeatures(sci);
3226-
SetCurrentFileName(GetFullPathHaxe(fileName));
3227-
return Common(ReadAllTextHaxe(fileName), sci);
3228-
}
3229-
3230-
internal static string Common(string sourceText, ScintillaControl sci)
3231-
{
3232-
SetSrc(sci, sourceText);
3233-
ASGenerator.ContextualGenerator(sci, new List<ICompletionListItem>());
3234-
return sci.Text;
3235-
}
3236-
}
3237-
32383189
[TestFixture]
32393190
public class GenerateClassTests : GenerateJob
32403191
{
@@ -3289,12 +3240,35 @@ internal static void Common(string sourceText, string constructorArgs, Scintilla
32893240
}
32903241

32913242
[TestFixture]
3292-
public class GeneratorJobTypeConstructorTests : GenerateJob
3243+
public class ContextualGeneratorTests : GenerateJob
32933244
{
3245+
[TestFixtureSetUp]
3246+
public void Setup() => ASContext.Context.Settings.GenerateImports.Returns(true);
3247+
32943248
public IEnumerable<TestCaseData> HaxeTestCases
32953249
{
32963250
get
32973251
{
3252+
yield return new TestCaseData("BeforeContextualGeneratorTests_issue1747_1", 0, false)
3253+
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_1"))
3254+
.SetName("Issue1747. Case 1")
3255+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3256+
yield return new TestCaseData("BeforeContextualGeneratorTests_issue1747_2", 0, false)
3257+
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_2"))
3258+
.SetName("Issue1747. Case 2")
3259+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3260+
yield return new TestCaseData("BeforeContextualGeneratorTests_issue1747_3", 0, false)
3261+
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_3"))
3262+
.SetName("Issue1747. Case 3")
3263+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3264+
yield return new TestCaseData("BeforeContextualGeneratorTests_issue1747_4", 0, false)
3265+
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1747_4"))
3266+
.SetName("Issue1747. Case 4")
3267+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1747");
3268+
yield return new TestCaseData("BeforeContextualGeneratorTests_issue1767_1", 0, false)
3269+
.Returns(ReadAllTextHaxe("AfterContextualGeneratorTests_issue1767_1"))
3270+
.SetName("Issue1767. Case 1")
3271+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1767");
32983272
yield return new TestCaseData("BeforeGenerateConstructor_issue1738_1", GeneratorJobType.Constructor, true)
32993273
.Returns(ReadAllTextHaxe("AfterGenerateConstructor_issue1738_1"))
33003274
.SetName("Generate constructor")
@@ -3325,6 +3299,30 @@ public IEnumerable<TestCaseData> HaxeTestCases
33253299
yield return new TestCaseData("BeforeGenerateConstructor_issue1738_9", GeneratorJobType.ChangeConstructorDecl, true)
33263300
.Returns(ReadAllTextHaxe("AfterGenerateConstructor_issue1738_9"))
33273301
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1738");
3302+
yield return new TestCaseData("BeforeImplementInterface_issue1982_1", GeneratorJobType.ImplementInterface, true)
3303+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1982_1"))
3304+
.SetName("Issue1982. Case 1")
3305+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1982");
3306+
yield return new TestCaseData("BeforeImplementInterface_issue1982_2", GeneratorJobType.ImplementInterface, false)
3307+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1982_2"))
3308+
.SetName("Issue1982. Case 2")
3309+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1982");
3310+
yield return new TestCaseData("BeforeImplementInterface_issue1982_3", GeneratorJobType.ImplementInterface, false)
3311+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1982_3"))
3312+
.SetName("Issue1982. Case 3")
3313+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1982");
3314+
yield return new TestCaseData("BeforeImplementInterface_issue1982_4", GeneratorJobType.ImplementInterface, false)
3315+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1982_4"))
3316+
.SetName("Issue1982. Case 4")
3317+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1982");
3318+
yield return new TestCaseData("BeforeImplementInterface_issue1982_5", GeneratorJobType.ImplementInterface, false)
3319+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1982_5"))
3320+
.SetName("Issue1982. Case 5")
3321+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1982");
3322+
yield return new TestCaseData("BeforeImplementInterface_issue1982_6", GeneratorJobType.ImplementInterface, false)
3323+
.Returns(ReadAllTextHaxe("AfterImplementInterface_issue1982_6"))
3324+
.SetName("Issue1982. Case 6")
3325+
.SetDescription("https://github.com/fdorg/flashdevelop/issues/1982");
33283326
}
33293327
}
33303328

Collapse file
+29Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package;
2+
import Type.ValueType;
3+
import haxe.Timer;
4+
import haxe.ds.Vector;
5+
class Main implements IBar, IFoo {
6+
public function new() {
7+
}
8+
9+
10+
/* INTERFACE IFoo */
11+
12+
@:isVar public var foo(get, set):haxe.ds.Vector<haxe.Timer->Type.ValueType>;
13+
14+
function get_foo():haxe.ds.Vector<haxe.Timer->Type.ValueType> {
15+
return foo;
16+
}
17+
18+
function set_foo(value:haxe.ds.Vector<haxe.Timer->Type.ValueType>):haxe.ds.Vector<haxe.Timer->Type.ValueType> {
19+
return foo = value;
20+
}
21+
}
22+
23+
interface IBar {
24+
function bar():Void;
25+
}
26+
27+
interface IFoo {
28+
var foo(get, set):haxe.ds.Vector<haxe.Timer->Type.ValueType>;
29+
}
Collapse file
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package;
2+
class Main implements IFoo {
3+
public function new() {}
4+
}
5+
6+
interface IFoo {}
Collapse file
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package;
2+
class Main {
3+
public function new() {
4+
var f:IFoo;
5+
}
6+
}
7+
8+
interface IFoo {
9+
function foo():Void;
10+
}
Collapse file
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package;
2+
class Main {
3+
public function new(f:IFoo) {}
4+
}
5+
6+
interface IFoo {
7+
function foo():Void;
8+
}
Collapse file
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package;
2+
class Main {
3+
public var f:IFoo;
4+
}
5+
6+
interface IFoo {
7+
function foo():Void;
8+
}
Collapse file
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package;
2+
enum Foo {
3+
FBar(foo:IFoo);
4+
}
5+
6+
interface IFoo {
7+
function foo():Void;
8+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.