Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: tools/nixysa/nixysa/java_utils.py

Issue 2043006: WTF NPAPI extension. Early draft. Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/nixysa/nixysa/idl_parser.py ('k') | tools/nixysa/nixysa/js_header_generator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/nixysa/nixysa/java_utils.py
===================================================================
--- tools/nixysa/nixysa/java_utils.py (revision 0)
+++ tools/nixysa/nixysa/java_utils.py (revision 0)
@@ -0,0 +1,139 @@
+#!/usr/bin/python2.4
+#
+# Copyright 2008 Google Inc.
+#
+# Licensed 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.
+
+"""Utilities for Java code generation.
+
+This module contains a few utilities for Javascripty-C++ code generation.
+"""
+
+import cpp_utils
+import naming
+
+
+def GetScopePrefix(scope, type_defn):
+ """Gets the prefix string to reference a type from a given scope.
+
+ This function returns a concatenation of C++ scope operators such as, in the
+ context of the given scope, when prefixing the name of the given type, it
+ will reference exactly that type.
+
+ For example, given:
+ namespace A {
+ namespace B {
+ class C;
+ }
+ namespace D {
+ void F();
+ }
+ }
+ To access C from F, one needs to refer to it by B.C. This function will
+ return the 'B.' part.
+
+ Args:
+ scope: the Definition for the scope from which the type must be accessed.
+ type_defn: the Definition for the type which must be accessed.
+
+ Returns:
+ the prefix string.
+ """
+ type_stack = type_defn.GetParentScopeStack()
+ scope_stack = scope.GetParentScopeStack() + [scope]
+ common_prefix = cpp_utils.GetCommonPrefixLength(
+ [scope.name for scope in scope_stack],
+ [scope.name for scope in type_stack])
+ return '.'.join([s.name for s in type_stack[common_prefix:]] + [''])
+
+
+def GetScopedName(scope, type_defn):
+ """Gets the prefix string to reference a type from a given scope.
+
+ This function returns a concatenation of C++ scope operators such as, in the
+ context of the given scope, when prefixing the name of the given type, it
+ will reference exactly that type.
+
+ For example, given:
+ namespace A {
+ namespace B {
+ class C;
+ }
+ namespace D {
+ void F();
+ }
+ }
+ To access C from F, one needs to refer to it by B.C. This function will
+ return exactly that.
+
+ Args:
+ scope: the Definition for the scope from which the type must be accessed.
+ type_defn: the Definition for the type which must be accessed.
+
+ Returns:
+ the scoped reference string.
+ """
+ return GetScopePrefix(scope, type_defn) + type_defn.name
+
+
+def GetFunctionParamPrototype(scope, param):
+ """Gets the string needed to declare a parameter in a function prototype.
+
+ Args:
+ scope: the scope of the prototype.
+ param: the Function.Param to declare
+
+ Returns:
+ a string that is the declaration of the parameter in the prototype.
+ """
+ bm = param.type_defn.binding_model
+ if param.mutable:
+ text = bm.JavaMemberString(scope, param.type_defn)
+ else:
+ text = bm.JavaMemberString(scope, param.type_defn)
+ return '%s %s' % (text, param.name)
+
+
+def GetFunctionPrototype(scope, obj):
+ """Gets the string needed to declare a function prototype.
+
+ Args:
+ scope: the scope of the prototype.
+ obj: the function to declare.
+
+ Returns:
+ a string that is the prototype.
+ """
+ # For creator functions matching class name, should be capitalized
+ if not obj.type_defn:
+ func_name = naming.Normalize(obj.name, naming.Capitalized)
+ else:
+ func_name = naming.Normalize(obj.name, naming.Java)
+ param_strings = []
+ for p in obj.params:
+ param_string = GetFunctionParamPrototype(scope, p)
+ param_strings += [param_string]
+ param_string = ', '.join(param_strings)
+
+ static = ''
+ if 'static' in obj.attributes:
+ static = 'static'
+
+ if obj.type_defn:
+ bm = obj.type_defn.binding_model
+ return_value = bm.JavaMemberString(scope, obj.type_defn)
+ prototype = '%s %s %s(%s)' % (static, return_value, func_name, param_string)
+ else:
+ prototype = '%s %s(%s)' % (static, func_name, param_string)
+
+ return prototype
Property changes on: tools/nixysa/nixysa/java_utils.py
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « tools/nixysa/nixysa/idl_parser.py ('k') | tools/nixysa/nixysa/js_header_generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698