All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.devonfw.cobigen.javaplugin.inputreader.JavaParserUtil Maven / Gradle / Ivy

package com.devonfw.cobigen.javaplugin.inputreader;

import java.io.Reader;

import com.devonfw.cobigen.javaplugin.merger.libextension.ModifyableClassLibraryBuilder;
import com.devonfw.cobigen.javaplugin.merger.libextension.ModifyableJavaClass;
import com.thoughtworks.qdox.library.ClassLibraryBuilder;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaSource;

/** The {@link JavaParserUtil} class provides helper functions for generating parsed inputs */
public class JavaParserUtil {

    /**
     * Returns the first {@link JavaClass} parsed by the given {@link Reader}, all upcoming parsed java files
     * will be added to the class library
     *
     * @param reader
     *            {@link Reader}s which contents should be parsed
     * @return the parsed {@link JavaClass}
     */
    public static JavaClass getFirstJavaClass(Reader... reader) {
        ClassLibraryBuilder classLibraryBuilder = new ModifyableClassLibraryBuilder();
        classLibraryBuilder.appendDefaultClassLoaders();
        return getFirstJavaClass(classLibraryBuilder, reader);
    }

    /**
     * Returns the first {@link JavaClass} parsed by the given {@link Reader}, all upcoming parsed java files
     * will be added to the class library. By passing a {@link ClassLoader}, you can take impact on the class
     * name resolving
     *
     * @param classLoader
     *            which should be used for class name resolving
     * @param reader
     *            {@link Reader}s which contents should be parsed
     * @return the parsed {@link JavaClass}
     */
    public static JavaClass getFirstJavaClass(ClassLoader classLoader, Reader... reader) {
        ClassLibraryBuilder classLibraryBuilder = new ModifyableClassLibraryBuilder();
        classLibraryBuilder.appendClassLoader(classLoader);
        return getFirstJavaClass(classLibraryBuilder, reader);
    }

    /**
     * Returns the first {@link JavaClass} parsed by the given {@link Reader}, all upcoming parsed java files
     * will be added to the class library. Furthermore, a pre-built {@link ClassLibraryBuilder} should be
     * passed, which should be previously enriched by all necessary {@link ClassLoader}s.
     *
     * @param classLibraryBuilder
     *            {@link ClassLibraryBuilder} to build the sources with
     * @param reader
     *            {@link Reader}s which contents should be parsed
     * @return the parsed {@link JavaClass}
     */
    private static JavaClass getFirstJavaClass(ClassLibraryBuilder classLibraryBuilder, Reader... reader) {
        JavaSource source = null;
        ModifyableJavaClass targetClass = null;
        for (Reader r : reader) {
            source = classLibraryBuilder.addSource(r);
            if (targetClass == null) {
                targetClass = (ModifyableJavaClass) source.getClasses().get(0);
            }
        }
        return targetClass;
    }

    /**
     * Converts the String representation of a canonical type into a String which represents the simple type.
     * E.g.:
     * 
    *
  • java.lang.String is converted into String
  • *
  • java.util.List<java.lang.String> is converted into * List<String>
  • *
* * @param canonicalType * the String representation of the canonical type to be resolved * @return the resolved simple type as String representation. */ public static String resolveToSimpleType(String canonicalType) { String simpleType = new String(canonicalType).replaceAll("(([\\w]+\\.))", ""); return simpleType; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy