// Path: src/main/java/com/pidanic/saral/domain/block/Argument.java
// public class Argument {
//     private final Type type;
//     private final String name;
// 
//     public Argument(String name, Type type) {
//         this.name = name;
//         this.type = type;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Type getType() {
//         return type;
//     }
// 
//     public void accept(SimpleStatementGenerator expressionGenerator, String localVariableName) {
//         expressionGenerator.generate(this, localVariableName);
//     }
// 
//     public void accept(ExpressionGenerator expressionGenerator, String localVariableName) {
//         expressionGenerator.generate(this, localVariableName);
//     }
// 
// }
// 
// Path: src/main/java/com/pidanic/saral/domain/block/Function.java
// public class Function extends CallableStatement {
//     private String name;
//     private List<Argument> arguments;
//     private List<Statement> statements;
//     private ReturnStatement retStatement;
//     private Type returnType;
// 
//     public Function(Scope scope, String name, List<Argument> arguments, List<Statement> statements, Type returnType, ReturnStatement retStatement) {
//         super(scope);
//         this.name = name;
//         this.arguments = new ArrayList<>(arguments);
//         this.statements = new ArrayList<>(statements);
//         this.returnType = returnType;
//         this.retStatement = retStatement;
//     }
// 
//     Function(Scope scope, String name, List<Argument> arguments, List<Statement> statements, Type returnType) {
//         this(scope, name, arguments, statements, returnType, null);
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public List<Argument> getArguments() {
//         return Collections.unmodifiableList(arguments);
//     }
// 
//     public List<Statement> getStatements() {
//         return Collections.unmodifiableList(statements);
//     }
// 
//     @Override
//     public void accept(StatementGenerator generator) {
//         ((CallableStatementGenerator) generator).generate(this);
//     }
// 
//     public Type getReturnType() {
//         return returnType;
//     }
// 
//     public Optional<ReturnStatement> getReturnStatement() {
//         return Optional.ofNullable(retStatement);
//     }
// 
//     public void setStatements(List<Statement> newStatements) {
//         this.statements = newStatements;
//     }
// 
//     public void setRetStatement(ReturnStatement newStatements) {
//         this.retStatement = newStatements;
//     }
// }
// 
// Path: src/main/java/com/pidanic/saral/domain/block/Procedure.java
// public class Procedure extends Function {
// 
//     public Procedure(Scope scope, String name, List<Argument> arguments, List<Statement> statements) {
//         super(scope, name, arguments, statements, BuiltInType.VOID);
//     }
// }


import com.pidanic.saral.domain.block.Argument;
import com.pidanic.saral.domain.block.Function;
import com.pidanic.saral.domain.block.Procedure;
import java.util.Collection;
import java.util.stream.Collectors;
package com.pidanic.saral.util;



public class DescriptorFactory {
    public static String getMethodDescriptor(Procedure procedure) {
        Collection<Argument> arguments = procedure.getArguments();
        Type returnType = BuiltInType.VOID;
        return getMethodDescriptor(arguments, returnType);
    }

// Path: src/main/java/com/pidanic/saral/domain/block/Argument.java
// public class Argument {
//     private final Type type;
//     private final String name;
// 
//     public Argument(String name, Type type) {
//         this.name = name;
//         this.type = type;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Type getType() {
//         return type;
//     }
// 
//     public void accept(SimpleStatementGenerator expressionGenerator, String localVariableName) {
//         expressionGenerator.generate(this, localVariableName);
//     }
// 
//     public void accept(ExpressionGenerator expressionGenerator, String localVariableName) {
//         expressionGenerator.generate(this, localVariableName);
//     }
// 
// }
// 
// Path: src/main/java/com/pidanic/saral/domain/block/Function.java
// public class Function extends CallableStatement {
//     private String name;
//     private List<Argument> arguments;
//     private List<Statement> statements;
//     private ReturnStatement retStatement;
//     private Type returnType;
// 
//     public Function(Scope scope, String name, List<Argument> arguments, List<Statement> statements, Type returnType, ReturnStatement retStatement) {
//         super(scope);
//         this.name = name;
//         this.arguments = new ArrayList<>(arguments);
//         this.statements = new ArrayList<>(statements);
//         this.returnType = returnType;
//         this.retStatement = retStatement;
//     }
// 
//     Function(Scope scope, String name, List<Argument> arguments, List<Statement> statements, Type returnType) {
//         this(scope, name, arguments, statements, returnType, null);
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public List<Argument> getArguments() {
//         return Collections.unmodifiableList(arguments);
//     }
// 
//     public List<Statement> getStatements() {
//         return Collections.unmodifiableList(statements);
//     }
// 
//     @Override
//     public void accept(StatementGenerator generator) {
//         ((CallableStatementGenerator) generator).generate(this);
//     }
// 
//     public Type getReturnType() {
//         return returnType;
//     }
// 
//     public Optional<ReturnStatement> getReturnStatement() {
//         return Optional.ofNullable(retStatement);
//     }
// 
//     public void setStatements(List<Statement> newStatements) {
//         this.statements = newStatements;
//     }
// 
//     public void setRetStatement(ReturnStatement newStatements) {
//         this.retStatement = newStatements;
//     }
// }
// 
// Path: src/main/java/com/pidanic/saral/domain/block/Procedure.java
// public class Procedure extends Function {
// 
//     public Procedure(Scope scope, String name, List<Argument> arguments, List<Statement> statements) {
//         super(scope, name, arguments, statements, BuiltInType.VOID);
//     }
// }


// Path: src/main/java/com/pidanic/saral/util/DescriptorFactory.java
import com.pidanic.saral.domain.block.Argument;
import com.pidanic.saral.domain.block.Function;
import com.pidanic.saral.domain.block.Procedure;
import java.util.Collection;
import java.util.stream.Collectors;

package com.pidanic.saral.util;



public class DescriptorFactory {
    public static String getMethodDescriptor(Procedure procedure) {
        Collection<Argument> arguments = procedure.getArguments();
        Type returnType = BuiltInType.VOID;
        return getMethodDescriptor(arguments, returnType);
    }

    public static String getMethodDescriptor(Function function) {