![JAR search and dependency download from the Maven repository](/logo.png)
com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator Maven / Gradle / Ivy
/*
* XDEV Application Framework - XDEV Application Framework
* Copyright © 2003 XDEV Software (https://xdev.software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
package com.xdev.jadoth.codegen.java.codeobjects;
import com.xdev.jadoth.codegen.CodeGenException;
/**
* @author Thomas Muenz
*
*/
public interface JavaCodeGenerator
{
public String generateCode(JavaCompilationUnit compilationUnit);
public void assembleJavaCompilationUnitMember (StringBuilder sb, JavaCompilationUnitMember member);
public void assembleJavaPackageDefinition (StringBuilder sb, JavaPackageDefinition member);
public void assembleJavaImportDefinition (StringBuilder sb, JavaImportDefinition member);
public void assembleJavaImportStaticDefinition(StringBuilder sb, JavaImportStaticDefinition member);
public void assembleJavaComment (StringBuilder sb, JavaComment comment);
public void assembleJavaCommentLine (StringBuilder sb, JavaCommentLine commentLine);
public void assembleJavaCommentLineGroup(StringBuilder sb, JavaCommentLineGroup commentLineGroup);
public void assembleJavaCommentBlock (StringBuilder sb, JavaCommentBlock commentBlock);
public void assembleJavaDocBlock (StringBuilder sb, JavaDocBlock javaDocBlock);
public void assembleJavaTypeDefinition (StringBuilder sb, JavaTypeDefinition type);
public void assembleJavaClassDefinition (StringBuilder sb, JavaClassDefinition javaClass);
public void assembleJavaInterfaceDefinition(StringBuilder sb, JavaInterfaceDefinition javaInterface);
public void assembleJavaTypeMemberDefinition (StringBuilder sb, JavaTypeMemberDefinition member);
public void assembleJavaClassMemberDefinition(StringBuilder sb, JavaClassMemberDefinition member);
public void assembleJavaFieldDefinition (StringBuilder sb, JavaFieldDefinition field);
public void assembleJavaMethodDefinition (StringBuilder sb, JavaMethodDefinition method);
public void assembleJavaConstructorDefinition(StringBuilder sb, JavaConstructorDefinition constructor);
public void assembleJavaInitializer (StringBuilder sb, JavaInitializer initializer);
public void assembleJavaStaticInitializer (StringBuilder sb, JavaStaticInitializer staticInitializer);
public class Implementation implements JavaCodeGenerator
{
private static final char _ = ' ';
private static final char sc = ';';
private static final char n = '\n';
private static final char d = '.';
private static final char sl = '/';
private static final char star = '*';
private static final char indentation = '\t';
private static final StringBuilder indent(final StringBuilder sb, int indentationLevel)
{
while(indentationLevel --> 0){
sb.append(indentation);
}
return sb;
}
private static final StringBuilder indentCommentBlock(final StringBuilder sb, int indentationLevel)
{
while(indentationLevel --> 0){
sb.append(indentation);
}
return sb.append(_).append(star).append(_);
}
/**
* @param compilationUnit
* @return
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#generateCode(com.xdev.jadoth.codegen.java.codeobjects.JavaCompilationUnit)
*/
@Override
public String generateCode(final JavaCompilationUnit compilationUnit)
{
final StringBuilder sb = new StringBuilder(100*1024);
final JavaPackageDefinition javaPackageDefinition = compilationUnit.getPackageDefinition();
if(javaPackageDefinition != null){
this.assembleJavaPackageDefinition(sb, javaPackageDefinition);
sb.append(n).append(n);
}
boolean hasImports = false;
for(final JavaImportDefinition javaImportDefinition : compilationUnit.iterateImports()) {
hasImports = true;
this.assembleJavaImportDefinition(sb, javaImportDefinition);
}
if(hasImports){
sb.append(n);
}
boolean hasStaticImports = false;
for(final JavaImportStaticDefinition javaImportStaticDefinition : compilationUnit.iterateStaticImports()) {
hasStaticImports = true;
this.assembleJavaImportStaticDefinition(sb, javaImportStaticDefinition);
}
if(hasStaticImports){
sb.append(n);
}
sb.append(n);
for(final JavaCompilationUnitMember member : compilationUnit.iterateBodyMembers()) {
this.assembleJavaCompilationUnitMember(sb, member);
}
return sb.toString();
}
/**
*
* @param sb
* @param member
* @throws CodeGenException
*/
public void assembleJavaCompilationUnitMember(
final StringBuilder sb, final JavaCompilationUnitMember member
)
throws CodeGenException
{
final JavaDocBlock memberJavaDoc = member.getJavaDoc();
if(memberJavaDoc != null){
this.assembleJavaDocBlock(sb, memberJavaDoc);
}
final JavaCommentBlock memberComment = member.getAssociatedComment();
if(memberComment != null){
this.assembleJavaCommentBlock(sb, memberComment);
}
member.assemble(sb, this);
}
/**
*
* @param sb
* @param member
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaPackageDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaPackageDefinition)
*/
public void assembleJavaPackageDefinition(final StringBuilder sb, final JavaPackageDefinition member)
{
sb
.append(member.getKeyword()).append(_)
.append(member.getPackage())
.append(sc).append(n)
;
}
/**
*
* @param sb
* @param member
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaImportDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaImportDefinition)
*/
public void assembleJavaImportDefinition(final StringBuilder sb, final JavaImportDefinition member)
{
sb
.append(member.getName()).append(_)
.append(member.getImportedType().getCanonicalName())
.append(sc).append(n)
;
}
/**
*
* @param sb
* @param type
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaTypeDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaTypeDefinition)
*/
public void assembleJavaTypeDefinition(final StringBuilder sb, final JavaTypeDefinition type)
{
type.assemble(sb, this);
}
/**
*
* @param sb
* @param comment
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaComment(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaComment)
*/
public void assembleJavaComment(final StringBuilder sb, final JavaComment comment)
{
comment.assemble(sb, this);
}
/**
* @param sb
* @param javaClass
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaClassDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaClassDefinition)
*/
@Override
public void assembleJavaClassDefinition(final StringBuilder sb, final JavaClassDefinition javaClass)
{
sb
.append(javaClass.getKeyword()).append(_).append(javaClass.getName());
}
/**
* @param sb
* @param javaInterface
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaInterfaceDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaInterfaceDefinition)
*/
@Override
public void assembleJavaInterfaceDefinition(final StringBuilder sb, final JavaInterfaceDefinition javaInterface)
{
}
/**
* @param sb
* @param member
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaImportStaticDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaImportStaticDefinition)
*/
@Override
public void assembleJavaImportStaticDefinition(
final StringBuilder sb, final JavaImportStaticDefinition staticImport
)
{
final JavaTypeMemberDescription member = staticImport.getStaticImportedMember();
sb
.append(staticImport.getName()).append(_)
.append(member.getOwnerType().getCanonicalName()).append(d).append(member.getName())
.append(sc).append(n)
;
}
/**
* @param sb
* @param field
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaClassMemberDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaClassMemberDefinition)
*/
@Override
public void assembleJavaClassMemberDefinition(final StringBuilder sb, final JavaClassMemberDefinition member)
{
member.assemble(sb, this);
}
/**
* @param sb
* @param commentBlock
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaCommentBlock(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaCommentBlock)
*/
@Override
public void assembleJavaCommentBlock(final StringBuilder sb, final JavaCommentBlock commentBlock)
{
final int nestingLevel = commentBlock.getNestingLevel();
indent(sb, nestingLevel).append(sl).append(star).append(n);
indentCommentBlock(sb, nestingLevel);
for(final char c : commentBlock.getCommentString().toCharArray()){
sb.append(c);
if(c == n){
indentCommentBlock(sb, nestingLevel);
}
}
indent(sb, nestingLevel).append(_).append(star).append(sl).append(n);
}
/**
* @param sb
* @param commentLine
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaCommentLine(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaCommentLine)
*/
@Override
public void assembleJavaCommentLine(final StringBuilder sb, final JavaCommentLine commentLine)
{
sb.append(sl).append(sl).append(commentLine.getCommentString()).append(n);
}
/**
* @param sb
* @param commentLineGroup
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaCommentLineGroup(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaCommentLineGroup)
*/
@Override
public void assembleJavaCommentLineGroup(final StringBuilder sb, final JavaCommentLineGroup commentLineGroup)
{
for(final JavaCommentLine javaCommentLine : commentLineGroup) {
this.assembleJavaCommentLine(sb, javaCommentLine);
}
}
/**
* @param sb
* @param constructor
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaConstructorDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaConstructorDefinition)
*/
@Override
public void assembleJavaConstructorDefinition(final StringBuilder sb, final JavaConstructorDefinition constructor)
{
}
/**
* @param sb
* @param javaDocBlock
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaDocBlock(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaDocBlock)
*/
@Override
public void assembleJavaDocBlock(final StringBuilder sb, final JavaDocBlock javaDocBlock)
{
}
/**
* @param sb
* @param field
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaFieldDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaFieldDefinition)
*/
@Override
public void assembleJavaFieldDefinition(final StringBuilder sb, final JavaFieldDefinition field)
{
}
/**
* @param sb
* @param initializer
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaInitializer(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaInitializer)
*/
@Override
public void assembleJavaInitializer(final StringBuilder sb, final JavaInitializer initializer)
{
}
/**
* @param sb
* @param method
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaMethodDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaMethodDefinition)
*/
@Override
public void assembleJavaMethodDefinition(final StringBuilder sb, final JavaMethodDefinition method)
{
}
/**
* @param sb
* @param staticInitializer
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaStaticInitializer(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaStaticInitializer)
*/
@Override
public void assembleJavaStaticInitializer(final StringBuilder sb, final JavaStaticInitializer staticInitializer)
{
}
/**
* @param sb
* @param member
* @see com.xdev.jadoth.codegen.java.codeobjects.JavaCodeGenerator#assembleJavaTypeMemberDefinition(java.lang.StringBuilder, com.xdev.jadoth.codegen.java.codeobjects.JavaTypeMemberDefinition)
*/
@Override
public void assembleJavaTypeMemberDefinition(final StringBuilder sb, final JavaTypeMemberDefinition member)
{
member.assemble(sb, this);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy