typescript-generator icon indicating copy to clipboard operation
typescript-generator copied to clipboard

Direct invocation with Java and Error:Multiple classes are mapped to the same name

Open jovicheng opened this issue 2 years ago • 0 comments

Hi,i am a front end developer, trying to use this tool to develop a tool, but I don't know much about java.

I spent a day writing the following code, when i run this code, something wrong happened

package com.mycompany.app;

import groovy.lang.GroovyClassLoader;
import cz.habarta.typescript.generator.Settings;
import cz.habarta.typescript.generator.TypeScriptGenerator;
import cz.habarta.typescript.generator.TypeScriptOutputKind;
import cz.habarta.typescript.generator.JsonLibrary;
import cz.habarta.typescript.generator.Input;

import java.util.Map;
import org.codehaus.groovy.control.CompilerConfiguration;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;

/**
 * Hello world!
 *
 */
public class App {
    static Settings settings() {
        final Settings settings = new Settings();
        settings.outputKind = TypeScriptOutputKind.global;
        settings.jsonLibrary = JsonLibrary.jackson2;
        // settings.customTypeNaming = Map(org.company.Product$Type:ProductType)
        // settings.noFileComment = true;
        // settings.newline = "\n";
        return settings;
    }

    static CompilerConfiguration config = new CompilerConfiguration();

    static GroovyClassLoader groovyClassLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(),
            config);

    public static void main(String[] args) {

        String str = "package com.test.generator;\n\nimport com.fasterxml.jackson.annotation.JsonPropertyDescription;\n\npublic class SampleModel {\n    @JsonPropertyDescription(\"Sample String\")\n    public String someString;\n\n    @JsonPropertyDescription(\"Sample boolean\")\n    public boolean someFlag;\n\n    @JsonPropertyDescription(\"Sample integer\")\n    public int someInteger;\n}";

        Class<?> Klass = groovyClassLoader.parseClass(str);

        System.out.println("-----");
        System.out.println(Klass);
        System.out.println("-----");
        final String output = new TypeScriptGenerator(settings())
                .generateTypeScript(Input.from(Klass));
        System.out.println(output);
        // return String.format("Hello %s.", name);
    }
}
Parsing 'org.codehaus.groovy.control.messages.SimpleMessage' used in 'LocatedMessage.<superClass>'
Warning: Multiple classes are mapped to 'Parameter' name. Conflicting classes: [class org.codehaus.groovy.ast.Parameter, class java.lang.reflect.Parameter]
[WARNING] 
cz.habarta.typescript.generator.compiler.SymbolTable$NameConflictException: Multiple classes are mapped to the same name. You can use 'customTypeNaming' or 'customTypeNamingFunction' settings to resolve conflicts or exclude conflicting class if it was added accidentally.
    at cz.habarta.typescript.generator.compiler.SymbolTable.reportConflicts (SymbolTable.java:115)
    at cz.habarta.typescript.generator.compiler.SymbolTable.resolveSymbolNames (SymbolTable.java:101)
    at cz.habarta.typescript.generator.compiler.ModelCompiler.javaToTypeScript (ModelCompiler.java:191)

I've tried for a long time and can't solve it, please help!

jovicheng avatar Jun 28 '22 14:06 jovicheng