1- using System . Collections . Generic ;
2- using System . Linq ;
3- using com . github . javaparser . ast ;
1+ using com . github . javaparser . ast ;
42using com . github . javaparser . ast . body ;
53using com . github . javaparser . ast . expr ;
64using com . github . javaparser . ast . type ;
7- using com . sun . org . apache . bcel . @internal . classfile ;
85using JavaToCSharp . Expressions ;
96using Microsoft . CodeAnalysis . CSharp ;
107using Microsoft . CodeAnalysis . CSharp . Syntax ;
@@ -14,35 +11,46 @@ namespace JavaToCSharp.Declarations;
1411public class FieldDeclarationVisitor : BodyDeclarationVisitor < FieldDeclaration >
1512{
1613 public override MemberDeclarationSyntax VisitForClass (
17- ConversionContext context ,
18- ClassDeclarationSyntax ? classSyntax ,
14+ ConversionContext context ,
15+ ClassDeclarationSyntax ? classSyntax ,
1916 FieldDeclaration fieldDecl ,
2017 IReadOnlyList < ClassOrInterfaceType > extends ,
2118 IReadOnlyList < ClassOrInterfaceType > implements )
2219 {
2320 var variables = new List < VariableDeclaratorSyntax > ( ) ;
2421
25- string typeName = fieldDecl . getCommonType ( ) . toString ( ) ;
22+ var commonType = fieldDecl . getCommonType ( ) ;
23+ int ? arrayRank = null ;
24+
25+ var variableDeclarators = fieldDecl . getVariables ( ) ? . ToList < VariableDeclarator > ( ) ?? [ ] ;
2626
27- var variableDeclarators = fieldDecl . getVariables ( ) ? . ToList < VariableDeclarator > ( ) ?? new List < VariableDeclarator > ( ) ;
2827 foreach ( var item in variableDeclarators )
2928 {
3029 var type = item . getType ( ) ;
30+
31+ if ( arrayRank is not null && type . getArrayLevel ( ) != arrayRank )
32+ {
33+ throw new InvalidOperationException ( "Different array levels in the same field declaration are not yet supported" ) ;
34+ }
35+
36+ arrayRank ??= type . getArrayLevel ( ) ;
37+
3138 string name = item . getNameAsString ( ) ;
3239
3340 if ( type . getArrayLevel ( ) > 0 )
3441 {
35- if ( ! typeName . EndsWith ( "[]" ) )
36- typeName += "[]" ;
37- if ( name . EndsWith ( "[]" ) )
42+ while ( name . EndsWith ( "[]" ) )
43+ {
3844 name = name [ ..^ 2 ] ;
45+ }
3946 }
4047
4148 var initExpr = item . getInitializer ( ) . FromOptional < Expression > ( ) ;
4249
4350 if ( initExpr != null )
4451 {
4552 var initSyntax = ExpressionVisitor . VisitExpression ( context , initExpr ) ;
53+
4654 if ( initSyntax is not null )
4755 {
4856 var varDeclarationSyntax = SyntaxFactory . VariableDeclarator ( name ) . WithInitializer ( SyntaxFactory . EqualsValueClause ( initSyntax ) ) ;
@@ -53,11 +61,11 @@ public override MemberDeclarationSyntax VisitForClass(
5361 variables . Add ( SyntaxFactory . VariableDeclarator ( name ) ) ;
5462 }
5563
56- typeName = TypeHelper . ConvertType ( typeName ) ;
64+ var typeSyntax = TypeHelper . ConvertTypeSyntax ( commonType , arrayRank ?? 0 ) ;
5765
5866 var fieldSyntax = SyntaxFactory . FieldDeclaration (
5967 SyntaxFactory . VariableDeclaration (
60- SyntaxFactory . ParseTypeName ( typeName ) ,
68+ typeSyntax ,
6169 SyntaxFactory . SeparatedList ( variables , Enumerable . Repeat ( SyntaxFactory . Token ( SyntaxKind . CommaToken ) , variables . Count - 1 ) ) ) ) ;
6270
6371 var mods = fieldDecl . getModifiers ( ) . ToModifierKeywordSet ( ) ;
0 commit comments