From 4b761a44104bb9c7dab98936459eb55ba00bb767 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Mon, 6 Dec 2010 10:18:23 +0100 Subject: [PATCH] method headers, elide virtual and override keywords --- .../antlr3/src/cs2j/CSharp/JavaMaker.g | 14 +++++++--- .../antlr3/src/cs2j/CSharp/JavaPrettyPrint.g | 26 ++++++++++++------- .../antlr3/src/cs2j/CSharp/NetMaker.g | 9 ++++--- CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g | 2 ++ .../src/cs2j/bin/Debug/templates/java.stg | 25 ++++++++++++++++-- 5 files changed, 57 insertions(+), 19 deletions(-) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g index b14d87f..e014dff 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g @@ -177,7 +177,7 @@ modifiers: modifier+ ; modifier: 'new' | 'public' | 'protected' | 'private' | 'internal' -> /* translate to package-private */| 'unsafe' -> | 'abstract' | 'sealed' -> FINAL["final"] | 'static' - | 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' | 'override'; + | 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' -> | 'override' -> /* not in Java,maybe convert to override annotation */; class_member_declaration: a=attributes? @@ -734,10 +734,16 @@ variable_declarator: method_declaration: method_header method_body ; method_header: - member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; + member_name type_parameter_list? '(' formal_parameter_list? ')' type_parameter_constraints_clauses? + -> ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list? formal_parameter_list?); method_body: block ; -member_name returns [string name, List tyargs]: +member_name : + type_or_generic ('.' type_or_generic)* + // keving [interface_type.identifier] | type_name '.' identifier + ; + +member_name_orig returns [string name, List tyargs]: qid { $name = $qid.name; $tyargs = $qid.tyargs; } ; // IInterface.Method logic added. /////////////////////////////////////////////////////// @@ -876,7 +882,7 @@ return_type: type | v='void' -> ^(TYPE[$v.token, "TYPE"] $v); formal_parameter_list: - formal_parameter (',' formal_parameter)* ; + formal_parameter (',' formal_parameter)* -> ^(PARAMS formal_parameter+); formal_parameter: attributes? (fixed_parameter | parameter_array) | '__arglist'; // __arglist is undocumented, see google diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g index 4384cfd..480b8a6 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g @@ -144,7 +144,7 @@ modifier class_member_declaration: ^(CONST attributes? modifiers? type constant_declarators) | ^(EVENT attributes? modifiers? event_declaration) - | ^(METHOD attributes? modifiers? type method_declaration) + | ^(METHOD attributes? modifiers? type method_declaration) -> method(modifiers={$modifiers.st}, type={$type.st}, method={$method_declaration.st}) | ^(INTERFACE attributes? modifiers? interface_declaration[$modifiers.st]) | ^(CLASS attributes? modifiers? class_declaration[$modifiers.st]) | ^(PROPERTY attributes? modifiers? type property_declaration) @@ -421,12 +421,12 @@ qid: // qualified_identifier v2 | qid_start -> { $qid_start.st } ; qid_start: - predefined_type - | (identifier generic_argument_list) => identifier generic_argument_list + predefined_type -> { $predefined_type.st } + | (identifier generic_argument_list) => identifier generic_argument_list -> template(id={ $identifier.st }, args={ $generic_argument_list.st }) "" // | 'this' // | 'base' - | identifier ('::' identifier)? - | literal + | i1=identifier ('::' i2=identifier)? -> identifier(id={ $i1.st }, id2={ $i2.st }) + | literal -> { $literal.st } ; // 0.ToString() is legal @@ -715,13 +715,19 @@ variable_declarator: /////////////////////////////////////////////////////// method_declaration: - method_header method_body ; + method_header method_body -> method_declaration(header={$method_header.st}, body={$method_body.st}) ; method_header: - member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; + ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list[$type_parameter_constraints_clauses.tpConstraints]? formal_parameter_list?) + -> method_header(name={ $member_name.st }, typeparams = { $type_parameter_constraints_clauses.st }, params={ $formal_parameter_list.st }); method_body: - block ; + block -> { $block.st }; member_name: - qid ; // IInterface.Method logic added. + t+=type_or_generic ('.' t+=type_or_generic)* -> template(items = { $t }) "" + ; + // keving: missing interface_type.identifier +// identifier -> { $identifier.st }; // IInterface.Method logic added. +//member_name: +// qid -> { $qid.st }; // IInterface.Method logic added. /////////////////////////////////////////////////////// property_declaration: @@ -811,7 +817,7 @@ type_variable_name: return_type: type -> { $type.st } ; formal_parameter_list: - formal_parameter (',' formal_parameter)* ; + ^(PARAMS formal_parameter+) ; formal_parameter: attributes? (fixed_parameter | parameter_array) | '__arglist'; // __arglist is undocumented, see google diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g index 910365b..4449603 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g @@ -597,11 +597,14 @@ variable_declarator: method_declaration: method_header method_body ; method_header: - member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; + ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list? formal_parameter_list?); method_body: block ; member_name: - qid ; // IInterface.Method logic added. + type_or_generic ('.' type_or_generic)* + ; + // keving: missing interface_type.identifier + //identifier ; // IInterface.Method logic added. /////////////////////////////////////////////////////// property_declaration: @@ -682,7 +685,7 @@ constructor_constraint: return_type: type ; formal_parameter_list: - formal_parameter (',' formal_parameter)* ; + ^(PARAMS formal_parameter+) ; formal_parameter: attributes? (fixed_parameter | parameter_array) | '__arglist'; // __arglist is undocumented, see google diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g index 859a322..7df53f5 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g @@ -27,6 +27,8 @@ tokens { CONVERSION_OPERATOR; CONSTRUCTOR; DESTRUCTOR; + METHOD_HEADER; + PARAMS; MONOPLUS; MONOMINUS; diff --git a/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg b/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg index 8748a36..ef6440d 100644 --- a/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg +++ b/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg @@ -53,7 +53,26 @@ class_member(comments, member) ::= << >> -field(modifiers, type, field, comments, init) ::= " = ;" +method(modifiers, type, field, comments) ::= " " + +method_header(name, typeparams, params, exception="Throwable") ::= << +() throws +>> + +method_declaration(header, body) ::= << +
{; + +} +>> + +method_body(body) ::= << +{ + +} +>> + +field(modifiers, type, field, comments, init) ::= " ;" + variable_declarators(varinits) ::= "" variable_declarator(typename,init) ::= " = " @@ -61,6 +80,8 @@ primary_expression_start_parts(start,follows) ::= "" type_param_constraint(param, constraints) ::= " extends " +identifier(id, id2) ::= "::" + // ******* ENUMS *********** enum(modifiers,comments, attributes, name, body) ::= << @@ -95,4 +116,4 @@ string(payload) ::= "" verbatim_string(payload) ::= << "" ->> \ No newline at end of file +>>