flex-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aha...@apache.org
Subject git commit: [flex-falcon] [refs/heads/develop] - fix interface override checking
Date Thu, 09 Mar 2017 07:06:04 GMT
Repository: flex-falcon
Updated Branches:
  refs/heads/develop 6e14d6835 -> dad773a21


fix interface override checking


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/dad773a2
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/dad773a2
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/dad773a2

Branch: refs/heads/develop
Commit: dad773a2193b5a80aee1e5a5f82d30b82ac19431
Parents: 6e14d68
Author: Alex Harui <aharui@apache.org>
Authored: Wed Mar 8 22:42:14 2017 -0800
Committer: Alex Harui <aharui@apache.org>
Committed: Wed Mar 8 22:42:14 2017 -0800

----------------------------------------------------------------------
 .../semantics/MethodBodySemanticChecker.java    |  7 +++
 .../src/test/java/as/ASInheritanceTests.java    | 59 ++++++++++++++++++++
 2 files changed, 66 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dad773a2/compiler/src/main/java/org/apache/flex/compiler/internal/semantics/MethodBodySemanticChecker.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/semantics/MethodBodySemanticChecker.java
b/compiler/src/main/java/org/apache/flex/compiler/internal/semantics/MethodBodySemanticChecker.java
index 1b51727..3904823 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/semantics/MethodBodySemanticChecker.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/semantics/MethodBodySemanticChecker.java
@@ -2799,7 +2799,14 @@ public class MethodBodySemanticChecker
         if( conflicts.size() > 0 )
         {
             for( IFunctionDefinition overriden : conflicts )
+            {
+            	if ((overriden instanceof SetterDefinition &&
+            		funcDef instanceof GetterDefinition) ||
+            		(overriden instanceof GetterDefinition &&
+            		funcDef instanceof SetterDefinition))
+            		continue;
                 addProblem(new InterfaceMethodOverrideProblem(iNode, funcDef.getBaseName(),
overriden.getParent().getBaseName()));
+            }
         }
 
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dad773a2/compiler/src/test/java/as/ASInheritanceTests.java
----------------------------------------------------------------------
diff --git a/compiler/src/test/java/as/ASInheritanceTests.java b/compiler/src/test/java/as/ASInheritanceTests.java
index 4d1d393..b5833e1 100644
--- a/compiler/src/test/java/as/ASInheritanceTests.java
+++ b/compiler/src/test/java/as/ASInheritanceTests.java
@@ -83,4 +83,63 @@ public class ASInheritanceTests  extends ASFeatureTestsBase{
 
         compileAndExpectErrors(source, false,false,false, null,"No default constructor found
in base class A.\n");
     }
+    
+    @Test
+    public void InterfaceOverrideError()
+    {
+        // all tests can assume that flash.display.Sprite
+        // flash.system.System and flash.events.Event have been imported
+        String[] imports = new String[]
+                {
+                };
+        String[] declarations = new String[]
+                {
+                };
+        String[] testCode = new String[]
+                {
+
+                };
+        String[] extra = new String[]
+                {
+                        "interface A {",
+                        "function get text():String;",
+                        "}",
+                        "interface B extends A {",
+                        "function get text():String;",
+                        "}"
+                };
+        String source = getAS(imports, declarations, testCode, extra);
+
+        compileAndExpectErrors(source, false,false,false, null,"Cannot override an interface
method.  Method text conflicts with a method in base interface A.\n");
+    }
+
+    @Test
+    public void InterfaceOverrideOK()
+    {
+        // all tests can assume that flash.display.Sprite
+        // flash.system.System and flash.events.Event have been imported
+        String[] imports = new String[]
+                {
+                };
+        String[] declarations = new String[]
+                {
+                };
+        String[] testCode = new String[]
+                {
+
+                };
+        String[] extra = new String[]
+                {
+                        "interface A {",
+                        "function get text():String;",
+                        "}",
+                        "interface B extends A {",
+                        "function set text(value:String):void;",
+                        "}"
+                };
+        String source = getAS(imports, declarations, testCode, extra);
+
+        compileAndRun(source);;
+    }
+
 }


Mime
View raw message