You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ms...@apache.org on 2015/06/14 16:30:39 UTC
git commit: [flex-falcon] [refs/heads/develop] - Type inheritence
test for supers and interface override replacements. - In JS you can overload
methods, as ou can't. For now,
all overriden/overloaded methods need to search for the top most definition a
Repository: flex-falcon
Updated Branches:
refs/heads/develop 53ed68ef7 -> 631f43ec0
Type inheritence test for supers and interface override replacements.
- In JS you can overload methods, as ou can't. For now, all overriden/overloaded
methods need to search for the top most definition and use it's signature.
This is far from optimal but hackish works right now.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/631f43ec
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/631f43ec
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/631f43ec
Branch: refs/heads/develop
Commit: 631f43ec00e1b3a911d190208b9dd6b870a5c9b9
Parents: 53ed68e
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun Jun 14 10:29:49 2015 -0400
Committer: Michael Schmalle <ms...@apache.org>
Committed: Sun Jun 14 10:30:30 2015 -0400
----------------------------------------------------------------------
.../codegen/externals/ExternalsTestUtils.java | 6 +
.../codegen/externals/TestTypeInheritence.java | 87 +++++++
.../externals_unit_tests/type_inheritence.js | 62 +++++
.../externals/emit/ReferenceEmitter.java | 11 -
.../externals/reference/ClassReference.java | 239 ++++++++++++-------
.../externals/reference/FieldReference.java | 1 +
.../externals/reference/MethodReference.java | 25 +-
.../externals/reference/ReferenceModel.java | 15 +-
.../codegen/externals/utils/FunctionUtils.java | 25 +-
9 files changed, 357 insertions(+), 114 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java
index 5caccc3..4f3092f 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java
@@ -68,6 +68,12 @@ public class ExternalsTestUtils
config.addExclude("IDBCursor", "continue");
config.addExclude("IDBCursor", "delete");
config.addExclude("IDBObjectStore", "delete");
+
+ // TODO method treated like field
+ config.addFieldExclude("Iterator", "next");
+ config.addExclude("Generator", "next");
+ config.addExclude("LinkStyle", "sheet");
+
}
public static void addTestExternalsFull(ExternCConfiguration config)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java
new file mode 100644
index 0000000..0f71102
--- /dev/null
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java
@@ -0,0 +1,87 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.externals;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.flex.compiler.clients.ExternCConfiguration;
+import org.apache.flex.compiler.internal.codegen.externals.reference.ClassReference;
+import org.junit.Test;
+
+public class TestTypeInheritence extends ExternalsTestBase
+{
+
+ @Test
+ public void test_superclasses() throws Exception
+ {
+ compile("type_inheritence.js");
+
+ ClassReference EventTarget = model.getInterfaceReference("EventTarget");
+
+ ClassReference Object = model.getClassReference("Object");
+ ClassReference Foo = model.getClassReference("Foo");
+ ClassReference Bar = model.getClassReference("Bar");
+ ClassReference Baz = model.getClassReference("Baz");
+
+ assertNotNull(Object);
+ assertNotNull(EventTarget);
+ assertNotNull(Foo);
+ assertNotNull(Bar);
+ assertNotNull(Baz);
+
+ assertSame(EventTarget, Foo.getImplementedInterfaces().get(0));
+ assertSame(Object, Foo.getSuperClass());
+ assertSame(Foo, Bar.getSuperClass());
+ assertSame(Bar, Baz.getSuperClass());
+
+ List<ClassReference> superClasses = Baz.getSuperClasses();
+ assertEquals(3, superClasses.size());
+ assertSame(Bar, superClasses.get(0));
+ assertSame(Foo, superClasses.get(1));
+ assertSame(Object, superClasses.get(2));
+
+ assertTrue(Foo.hasMethod("addEventListener"));
+
+ // TODO (mschmalle) need to revisit interface method overload
+ // XXX Since Foo implements EventTarget BUT changes it's signature, we have to
+ // use EventTargt.addEventListener()'s signature
+ String result = client.getEmitter().emit(
+ Foo.getMethod("addEventListener"));
+ assertEquals(
+ " /**\n "
+ + "* @param opt_useCapture [(boolean|undefined)] \n "
+ + "* @see [type_inheritence]\n */\n"
+ + " public function addEventListener(type:String, listener:Object, useCapture:Boolean):Object /* undefined */ "
+ + "{ return null; }\n", result);
+ }
+
+ @Override
+ protected void configure(ExternCConfiguration config) throws IOException
+ {
+ config.setASRoot(ExternalsTestUtils.AS_ROOT_DIR);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js b/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js
new file mode 100644
index 0000000..f9ebe8e
--- /dev/null
+++ b/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js
@@ -0,0 +1,62 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// type logic uses Object as the top of the tree
+/**
+ * @constructor
+ */
+function Object() {}
+
+/**
+ * @interface
+ */
+function EventTarget() {}
+
+/**
+ * @param {string} type
+ * @param {EventListener|function(!Event):(boolean|undefined)} listener
+ * @param {boolean} useCapture
+ * @return {undefined}
+ */
+EventTarget.prototype.addEventListener = function(type, listener, useCapture) {};
+
+/**
+ * @constructor
+ * @implements {EventTarget}
+ */
+function Foo () {}
+
+/**
+ * @param {boolean=} opt_useCapture
+ * @override
+ */
+Foo.prototype.addEventListener = function(type, listener, opt_useCapture) {};
+
+/**
+ * @constructor
+ * @extends {Foo}
+ */
+function Bar () {}
+
+
+/**
+ * @constructor
+ * @extends {Bar}
+ */
+function Baz () {}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java
index de531dd..d4046cc 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java
@@ -108,17 +108,6 @@ public class ReferenceEmitter
File sourceFile = reference.getFile(model.getConfiguration().getAsConstantRoot());
FileUtils.write(sourceFile, sb.toString());
}
-
- // StringBuilder sb = new StringBuilder();
- // sb.append("package {\n");
- // for (Entry<String, ConstantReference2> set : constants.entrySet())
- // {
- // ConstantReference2 reference = set.getValue();
- // emit(reference, sb);
- // }
- // sb.append("\n}");
- // File sourceFile = new File(asRoot, "constants.as");
- // FileUtils.write(sourceFile, sb.toString());
}
public void emit(BaseReference reference, StringBuilder sb)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java
index 27947bf..df381c0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java
@@ -21,6 +21,7 @@ package org.apache.flex.compiler.internal.codegen.externals.reference;
import java.io.File;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -221,6 +222,25 @@ public class ClassReference extends BaseReference
return false;
}
+ public MethodReference getSuperMethod(String methodName)
+ {
+ List<ClassReference> list = getSuperClasses();
+ for (ClassReference reference : list)
+ {
+ if (reference.hasMethod(methodName))
+ return reference.getMethod(methodName);
+ }
+
+ list = getAllImplInterfaces(); // return all our interfaces and all superclass
+ for (ClassReference reference : list)
+ {
+ if (reference.hasMethod(methodName))
+ return reference.getMethod(methodName);
+ }
+
+ return null;
+ }
+
public List<ClassReference> getSuperClasses()
{
ArrayList<ClassReference> result = new ArrayList<ClassReference>();
@@ -230,6 +250,54 @@ public class ClassReference extends BaseReference
result.add(superClass);
superClass = superClass.getSuperClass();
}
+ // ClassReference objectReference = getModel().getClassReference("Object");
+ // // TODO tests
+ // if (objectReference != null)
+ // result.add(objectReference);
+ return result;
+ }
+
+ public List<ClassReference> getAllImplInterfaces()
+ {
+ ArrayList<ClassReference> result = new ArrayList<ClassReference>();
+ for (JSTypeExpression jsTypeExpression : getComment().getImplementedInterfaces())
+ {
+ String interfaceName = jsTypeExpression.evaluate(null,
+ getModel().getJSCompiler().getTypeRegistry()).getDisplayName();
+ ClassReference classReference = getModel().getClassReference(
+ interfaceName);
+ if (classReference != null)
+ result.add(classReference);
+ }
+
+ return result;
+ }
+
+ public List<ClassReference> getImplementedInterfaces()
+ {
+ ArrayList<ClassReference> result = new ArrayList<ClassReference>();
+ for (JSTypeExpression jsTypeExpression : getComment().getImplementedInterfaces())
+ {
+ String interfaceName = jsTypeExpression.evaluate(null,
+ getModel().getJSCompiler().getTypeRegistry()).toAnnotationString();
+ //System.out.println(" !!!!!!!! [" + interfaceName + "]");
+ ClassReference reference = getModel().getClassReference(
+ interfaceName);
+ if (reference != null)
+ result.add(reference);
+ }
+ return result;
+ }
+
+ public List<ClassReference> getSuperInterfaces()
+ {
+ ArrayList<ClassReference> result = new ArrayList<ClassReference>();
+ ClassReference superClass = getSuperClass();
+ while (superClass != null)
+ {
+ result.add(superClass);
+ superClass = superClass.getSuperClass();
+ }
return result;
}
@@ -353,20 +421,12 @@ public class ClassReference extends BaseReference
sb.append("{\n");
sb.append("\n");
- printPackageAccess(sb);
-
if (!isInterface)
{
printConstructor(sb);
sb.append("\n");
}
- // for (Entry<String, FieldReference> fieldSet : getStaticFields().entrySet())
- // {
- // fieldSet.getValue().emit(sb);
- // sb.append("\n");
- // }
-
for (Entry<String, FieldReference> fieldSet : getFields().entrySet())
{
fieldSet.getValue().emit(sb);
@@ -385,21 +445,6 @@ public class ClassReference extends BaseReference
sb.append("}\n");
sb.append("}\n"); // package
-
- //System.out.println(sb.toString());
- }
-
- private void printPackageAccess(StringBuilder sb)
- {
- if (!isQualifiedName())
- return;
-
- // get all classes that are @const AND object literal
-
- // chrome.runtime
- // String packageName = getPackageName();
- // String[] split = packageName.split("\\.");
- // sb.append(" public static var " + split[split.length - 1] + ";\n");
}
private void printClass(StringBuilder sb)
@@ -425,12 +470,16 @@ public class ClassReference extends BaseReference
printSuperClass(sb);
sb.append(" ");
}
- //
- // if (TagUtils.hasTags(this, "implements"))
- // {
- // printImplements(sb);
- // sb.append(" ");
- // }
+ else
+ {
+ // XXX JSObject extends
+ //sb.append("extends JSObject ");
+ }
+
+ if (!isInterface())
+ {
+ printImplements(sb);
+ }
}
private void printInterface(StringBuilder sb)
@@ -439,11 +488,22 @@ public class ClassReference extends BaseReference
sb.append(getQualifiedName() + " ");
- // if (TagUtils.hasTags(this, "extends"))
- // {
- // printSuperClass(sb);
- // sb.append(" ");
- // }
+ List<JSTypeExpression> extendedInterfaces = getComment().getExtendedInterfaces();
+ int len = extendedInterfaces.size();
+ int i = 0;
+ if (len > 0)
+ {
+ sb.append("extends ");
+ for (JSTypeExpression jsTypeExpression : extendedInterfaces)
+ {
+ String value = jsTypeExpression.evaluate(null,
+ getModel().getJSCompiler().getTypeRegistry()).toAnnotationString();
+ sb.append(value);
+ if (i < len - 1)
+ sb.append(", ");
+ }
+ sb.append(" ");
+ }
}
private void printSuperClass(StringBuilder sb)
@@ -454,22 +514,25 @@ public class ClassReference extends BaseReference
sb.append(value);
}
- @SuppressWarnings("unused")
private void printImplements(StringBuilder sb)
{
- // if (TagUtils.hasTags(this, "implements"))
- // {
- // sb.append("implements ");
- // List<DocletTag> impls = TagUtils.getTags(this, "implements");
- // int len = impls.size();
- // for (int i = 0; i < len; i++)
- // {
- // String value = impls.get(0).getValue();
- // sb.append(value.substring(1, value.length() - 1));
- // if (i < len - 1)
- // sb.append(", ");
- // }
- // }
+ List<JSTypeExpression> implementedInterfaces = getComment().getImplementedInterfaces();
+ if (implementedInterfaces.size() == 0)
+ return;
+
+ sb.append("implements ");
+
+ int len = implementedInterfaces.size();
+ for (int i = 0; i < len; i++)
+ {
+ String value = implementedInterfaces.get(i).evaluate(null,
+ getModel().getJSCompiler().getTypeRegistry()).getDisplayName();
+ sb.append(value);
+ if (i < len - 1)
+ sb.append(", ");
+ }
+
+ sb.append(" ");
}
private void printConstructor(StringBuilder sb)
@@ -518,18 +581,18 @@ public class ClassReference extends BaseReference
public boolean isMethodOverrideFromInterface(MethodReference reference)
{
- // if (!hasImplementations())
- // return false;
- //
- // List<DocletTag> impls = TagUtils.getTags(this, "implements");
- // for (DocletTag docletTag : impls)
- // {
- // String interfaceName = docletTag.getValue().trim();
- // interfaceName = interfaceName.substring(1,
- // interfaceName.length() - 1);
- // ClassReference2 classReference = model.getClassReference(interfaceName);
- // return classReference.hasMethod(reference.getName());
- // }
+ if (!hasImplementations())
+ return false;
+
+ List<JSTypeExpression> implementedInterfaces = getComment().getImplementedInterfaces();
+ for (JSTypeExpression jsTypeExpression : implementedInterfaces)
+ {
+ String interfaceName = jsTypeExpression.evaluate(null,
+ getModel().getJSCompiler().getTypeRegistry()).getDisplayName();
+ ClassReference classReference = getModel().getClassReference(
+ interfaceName);
+ return classReference.hasSuperMethod(reference.getQualifiedName());
+ }
return false;
}
@@ -537,29 +600,33 @@ public class ClassReference extends BaseReference
public MethodReference getMethodOverrideFromInterface(
MethodReference reference)
{
- // if (!hasImplementations())
- // return null;
- //
- // List<DocletTag> impls = TagUtils.getTags(this, "implements");
- // for (DocletTag docletTag : impls)
- // {
- // String interfaceName = docletTag.getValue().trim();
- // interfaceName = interfaceName.substring(1,
- // interfaceName.length() - 1);
- // ClassReference2 classReference = model.getClassReference(interfaceName);
- // return classReference.getMethods().get(reference.getName());
- // }
+ // get all super classes, reverse and search top down
+ List<ClassReference> superClasses = getSuperClasses();
+ superClasses.add(0, this);
+ Collections.reverse(superClasses);
+
+ // for each superclass, get all implemented interfaces
+ for (ClassReference classReference : superClasses)
+ {
+ List<ClassReference> interfaces = classReference.getImplementedInterfaces();
+ for (ClassReference interfaceReference : interfaces)
+ {
+ // check for the method on the interface
+ MethodReference method = interfaceReference.getMethod(reference.getBaseName());
+ if (method != null)
+ return method;
+ }
+ }
return null;
}
- @SuppressWarnings("unused")
private boolean hasImplementations()
{
return getComment().getImplementedInterfaceCount() > 0;
}
- public boolean hasImplements(String interfaceName)
+ public boolean _hasImplements(String interfaceName)
{
// boolean hasImplements = TagUtils.hasTags(this, "implements");
// if (hasImplements)
@@ -577,6 +644,9 @@ public class ClassReference extends BaseReference
public ClassReference getSuperClass()
{
+ if (getBaseName().equals("Object"))
+ return null;
+
JSTypeExpression baseType = getComment().getBaseType();
if (baseType != null)
{
@@ -585,6 +655,11 @@ public class ClassReference extends BaseReference
if (jsType != null)
return getModel().getClassReference(jsType.getDisplayName());
}
+ else
+ {
+ return getModel().getObjectReference();
+ }
+
return null;
}
@@ -613,22 +688,6 @@ public class ClassReference extends BaseReference
return false;
}
- @SuppressWarnings("unused")
- private List<ClassReference> getSuperInterfaces()
- {
- ArrayList<ClassReference> result = new ArrayList<ClassReference>();
- // if (!TagUtils.hasTags(this, "implements"))
- // return result;
- //
- // List<DocletTag> impls = TagUtils.getTags(this, "implements");
- // for (DocletTag tag : impls)
- // {
- // String type = TagUtils.getType(tag);
- // result.add(model.getClassReference(type));
- // }
- return result;
- }
-
public boolean hasLocalMethodConflict(String functionName)
{
return methods.containsKey(functionName);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java
index 1a85ff4..e6e92cf 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java
@@ -79,6 +79,7 @@ public class FieldReference extends MemberReference
if (excluded != null)
{
excluded.print(sb);
+ return; // XXX (mschmalle) accessors are not treated right, need to exclude get/set
}
if (!getClassReference().isInterface() && !getComment().isOverride())
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java
index 3c98137..fba7caf 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java
@@ -87,9 +87,6 @@ public class MethodReference extends MemberReference
return;
}
- if (isOverride())
- return;
-
if (getClassReference().hasSuperMethod(getQualifiedName()))
return;
@@ -106,9 +103,20 @@ public class MethodReference extends MemberReference
staticValue = "";
String isOverride = "";
- // if (TagUtils.hasTags(this, "override"))
+
+ if (!getClassReference().isInterface())
+ {
+ MethodReference overrideFromInterface = getClassReference().getMethodOverrideFromInterface(
+ this);
+ if (/*isOverride() && */overrideFromInterface != null)
+ {
+ override = overrideFromInterface;
+ }
+ }
+
+ // if (isOverride())
// {
- // isOverride = "override ";
+ // //isOverride = "override ";
// if (getClassReference().isMethodOverrideFromInterface(this))
// {
// override = getClassReference().getMethodOverrideFromInterface(
@@ -166,13 +174,14 @@ public class MethodReference extends MemberReference
private String transformReturnString()
{
- return FunctionUtils.transformReturnString(getContext(), getComment());
+ return FunctionUtils.transformReturnString(getContext(),
+ getContext().getComment());
}
private String toPrameterString()
{
- return FunctionUtils.toPrameterString(getContext(), getComment(),
- paramNode);
+ return FunctionUtils.toPrameterString(getContext(),
+ getContext().getComment(), paramNode);
}
public boolean isOverride()
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java
index b4ea9dd..229953f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java
@@ -61,6 +61,11 @@ public class ReferenceModel
return configuration;
}
+ public ClassReference getObjectReference()
+ {
+ return classes.get("Object");
+ }
+
public Collection<String> getNamespaces()
{
return namespaces;
@@ -96,6 +101,14 @@ public class ReferenceModel
return classes.get(qualifiedName);
}
+ public ClassReference getInterfaceReference(String qualifiedName)
+ {
+ ClassReference reference = classes.get(qualifiedName);
+ if (reference != null && reference.isInterface())
+ return reference;
+ return null;
+ }
+
public void addNamespace(Node node, String qualifiedName)
{
if (namespaces.contains(qualifiedName))
@@ -118,7 +131,6 @@ public class ReferenceModel
}
log("Model.addClass(" + qualifiedName + ")");
-
ClassReference reference = new ClassReference(this, node, qualifiedName);
classes.put(qualifiedName, reference);
}
@@ -306,4 +318,5 @@ public class ReferenceModel
{
DebugLogUtils.err(message);
}
+
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java
index e6a8a39..6a21cd4 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java
@@ -63,7 +63,7 @@ public class FunctionUtils
{
int index = 0;
int len = comment.getParameterCount();
-
+ //int childCount = paramNode.getChildCount();
if (len == 0)
{
len = paramNode.getChildCount();
@@ -79,6 +79,20 @@ public class FunctionUtils
}
}
}
+ // else if (len != childCount)
+ // {
+ // // XXX Match up existing @param tags with parameters
+ // if (childCount > 0)
+ // {
+ // for (Node param : paramNode.children())
+ // {
+ // sb.append(param.getString() + ":Object");
+ // if (index < childCount - 1)
+ // sb.append(", ");
+ // index++;
+ // }
+ // }
+ // }
else
{
for (String paramName : comment.getParameterNames())
@@ -101,13 +115,16 @@ public class FunctionUtils
public static String toParameter(BaseReference reference,
JSDocInfo comment, String paramName, JSTypeExpression parameterType)
{
+ StringBuilder sb = new StringBuilder();
+
if (parameterType == null)
{
- return "Object /* TODO is this correct? */";
+ sb.append(paramName);
+ sb.append(":");
+ sb.append("Object /* TODO is this correct? */");
+ return sb.toString();
}
- StringBuilder sb = new StringBuilder();
-
//JSTypeExpression parameterType = comment.getParameterType(paramName);
ImmutableList<String> names = comment.getTemplateTypeNames();