private void addGetValueMethod( SrcClass srcClass, FqnCacheNode<String> node ) { srcClass.addMethod( new SrcMethod( srcClass ) .name( "getValue" ) .modifiers( Modifier.PUBLIC | (isRootProperty( node ) ? Modifier.STATIC : 0) ) .returns( new SrcType( "String" ) ) .body( new SrcStatementBlock() .addStatement( new SrcReturnStatement( String.class, node.getUserData() ) ) ) ); }
public SrcMethod( SrcClass srcClass, boolean isCtor ) { super( srcClass ); setConstructor( isCtor ); if( !isCtor ) { returns( "void" ); } else { name( srcClass.getSimpleName() ); } } }
private void delegateCall( AbstractSrcMethod method, boolean isInstanceExtensionMethod, SrcMethod srcMethod ) { StringBuilder call = new StringBuilder(); SrcType returnType = srcMethod.getReturnType(); if( returnType != null && !returnType.getName().equals( void.class.getName() ) ) { call.append( "return " ); } String extClassName = ((SrcClass)method.getOwner()).getName(); call.append( extClassName ).append( '.' ).append( srcMethod.getSimpleName() ).append( '(' ); if( isInstanceExtensionMethod ) { call.append( "this" ); } for( SrcParameter param : srcMethod.getParameters() ) { if( call.charAt( call.length()-1 ) != '(' ) { call.append( ", " ); } call.append( param.getSimpleName() ); } call.append( ");\n" ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( call.toString() ) ) ); }
SrcMethod srcMethod = new SrcMethod( extendedType ); long modifiers = method.getModifiers(); if( extendedType.isInterface() && isInstanceExtensionMethod ) srcMethod.modifiers( modifiers ); srcMethod.addAnnotation( new SrcAnnotationExpression( ExtensionMethod.class ) .addArgument( "extensionClass", String.class, ((SrcClass)method.getOwner()).getName() ) srcMethod.returns( method.getReturnType() ); srcMethod.name( name ); List typeParams = method.getTypeVariables(); srcMethod.addTypeVar( typeVar ); srcMethod.addParam( param.getSimpleName(), param.getType() ); srcMethod.addThrowType( (SrcType)throwType ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement()
private void addMethod( IModule module, SrcClass srcClass, Symbol.MethodSymbol method, BasicJavacTask javacTask ) SrcMethod srcMethod = new SrcMethod( srcClass, name.equals( "<init>" ) ); addAnnotations( srcMethod, method ); srcMethod.modifiers( method.getModifiers() ); if( (method.flags() & Flags.VARARGS) != 0 ) srcMethod.modifiers( srcMethod.getModifiers() | 0x00000080 ); // Modifier.VARARGS if( !srcMethod.isConstructor() ) srcMethod.name( name ); srcMethod.returns( makeSrcType( method.getReturnType(), method, TargetType.METHOD_RETURN, -1 ) ); srcMethod.addTypeVar( makeTypeVarType( typeVar ) ); srcMethod.addParam( srcParam ); addAnnotations( srcParam, param ); srcMethod.addThrowType( makeSrcType( throwType, method, TargetType.THROWS, i ) ); if( srcMethod.isConstructor() && !srcClass.isEnum() ) srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement()
SrcMethod srcMethod = new SrcMethod( extendedType ); long modifiers = method.getModifiers(); if( extendedType.isInterface() && isInstanceExtensionMethod ) srcMethod.modifiers( modifiers ); srcMethod.addAnnotation( new SrcAnnotationExpression( ExtensionMethod.class ) .addArgument( "extensionClass", String.class, ((SrcClass)method.getOwner()).getName() ) srcMethod.returns( method.getReturnType() ); srcMethod.name( name ); List typeParams = method.getTypeVariables(); srcMethod.addTypeVar( typeVar ); srcMethod.addParam( param.getSimpleName(), param.getType() ); srcMethod.addThrowType( (SrcType)throwType ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement()
private void delegateCall( AbstractSrcMethod method, boolean isInstanceExtensionMethod, SrcMethod srcMethod ) { StringBuilder call = new StringBuilder(); SrcType returnType = srcMethod.getReturnType(); if( returnType != null && !returnType.getName().equals( void.class.getName() ) ) { call.append( "return " ); } String extClassName = ((SrcClass)method.getOwner()).getName(); call.append( extClassName ).append( '.' ).append( srcMethod.getSimpleName() ).append( '(' ); if( isInstanceExtensionMethod ) { call.append( "this" ); } for( SrcParameter param : srcMethod.getParameters() ) { if( call.charAt( call.length()-1 ) != '(' ) { call.append( ", " ); } call.append( param.getSimpleName() ); } call.append( ");\n" ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( call.toString() ) ) ); }
private void addGetValueMethod( SrcClass srcClass, FqnCacheNode<String> node ) { srcClass.addMethod( new SrcMethod( srcClass ) .name( "getValue" ) .modifiers( Modifier.PUBLIC | (isRootProperty( node ) ? Modifier.STATIC : 0) ) .returns( new SrcType( "String" ) ) .body( new SrcStatementBlock() .addStatement( new SrcReturnStatement( String.class, node.getUserData() ) ) ) ); }
private void addToString( SrcClass srcClass ) { srcClass.addMethod( new SrcMethod( srcClass ) .name( "toString" ) .modifiers( Modifier.PUBLIC ) .returns( new SrcType( "String" ) ) .body( new SrcStatementBlock() .addStatement( new SrcReturnStatement( new SrcMethodCallExpression( "getValue" ) ) ) ) ); }
private void addToString( SrcClass srcClass ) { srcClass.addMethod( new SrcMethod( srcClass ) .name( "toString" ) .modifiers( Modifier.PUBLIC ) .returns( new SrcType( "String" ) ) .body( new SrcStatementBlock() .addStatement( new SrcReturnStatement( new SrcMethodCallExpression( "getValue" ) ) ) ) ); }
private void addGetValueByNameMethod( SrcClass srcClass, FqnCacheNode<String> node ) { srcClass.addMethod( new SrcMethod( srcClass ) .name( "getValueByName" ) .modifiers( Modifier.PUBLIC | (isRootProperty( node ) ? Modifier.STATIC : 0) ) .returns( new SrcType( "String" ) ) .addParam( new SrcParameter( "propertyName" ).type( "String" ) ) .body( new SrcStatementBlock() .addStatement( makeGetValueBynameSwitch( node ) ) .addStatement( new SrcReturnStatement( String.class, null ) ) ) ); }
private static void addUtilityMethods( SrcClass clazz, ClassNode classNode, String fqn ) { long timestamp = incUid(); SrcMethod m = new SrcMethod() .name( "getEngine" ) .modifiers( Modifier.PRIVATE | Modifier.STATIC ) .returns( ScriptEngine.class ) .body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( "if( " + timestamp + "L != TIMESTAMP ) {\n" + " synchronized( " + classNode.getName() + ".class ) {\n" + " if( " + timestamp + "L != TIMESTAMP ) {\n" + " TIMESTAMP = " + timestamp + "L;\n" + " ENGINE = JavascriptClass.init(\"" + fqn + "\");\n" + " }\n" + " }\n" + " }\n" + " return ENGINE;" ) ) ); clazz.addMethod( m ); }
private void addGetValueByNameMethod( SrcClass srcClass, FqnCacheNode<String> node ) { srcClass.addMethod( new SrcMethod( srcClass ) .name( "getValueByName" ) .modifiers( Modifier.PUBLIC | (isRootProperty( node ) ? Modifier.STATIC : 0) ) .returns( new SrcType( "String" ) ) .addParam( new SrcParameter( "propertyName" ).type( "String" ) ) .body( new SrcStatementBlock() .addStatement( makeGetValueBynameSwitch( node ) ) .addStatement( new SrcReturnStatement( String.class, null ) ) ) ); }
private static void addUtilityMethods( SrcClass clazz, ClassNode classNode, String fqn ) { long timestamp = incUid(); SrcMethod m = new SrcMethod() .name( "getEngine" ) .modifiers( Modifier.PRIVATE | Modifier.STATIC ) .returns( ScriptEngine.class ) .body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( "if( " + timestamp + "L != TIMESTAMP ) {\n" + " synchronized( " + classNode.getName() + ".class ) {\n" + " if( " + timestamp + "L != TIMESTAMP ) {\n" + " TIMESTAMP = " + timestamp + "L;\n" + " ENGINE = JavascriptClass.init(\"" + fqn + "\");\n" + " }\n" + " }\n" + " }\n" + " return ENGINE;" ) ) ); clazz.addMethod( m ); }
SrcMethod method = new SrcMethod() .modifiers( Modifier.PUBLIC | Modifier.STATIC ) .name( "favorite" + entry.getKey() ) .addParam( new SrcParameter( "thiz", deriveExtendedClassFrom( extensionClassFqn ) ) .addAnnotation( new SrcAnnotationExpression( This.class ) ) ) .returns( String.class ) .body( new SrcStatementBlock() .addStatement( new SrcReturnStatement( String.class, entry.getValue()._value.toString() ) ) ); method.addAnnotation( makeSourcePositionAnnotation( entry.getKey() ) ); srcClass.addMethod( method );
SrcMethod method = new SrcMethod() .modifiers( Modifier.PUBLIC | Modifier.STATIC ) .name( "favorite" + entry.getKey() ) .addParam( new SrcParameter( "thiz", deriveExtendedClassFrom( extensionClassFqn ) ) .addAnnotation( new SrcAnnotationExpression( This.class ) ) ) .returns( String.class ) .body( new SrcStatementBlock() .addStatement( new SrcReturnStatement( String.class, entry.getValue()._value.toString() ) ) ); method.addAnnotation( makeSourcePositionAnnotation( entry.getKey() ) ); srcClass.addMethod( method );
public static SrcClass genClass( String fqn, JSTNode jstNode ) { SrcClass clazz = new SrcClass( fqn, SrcClass.Kind.Class ); clazz.addField( new SrcField( "TEMPLATE_NODE", JSTNode.class ) .modifiers( Modifier.STATIC ) .initializer( new SrcRawExpression( ("manifold.js.JavascriptTemplate.initNode(\"" + fqn + "\")") ) ) ); clazz.addField( new SrcField( "ENGINE", ScriptEngine.class ) .modifiers( Modifier.STATIC ) .initializer( new SrcRawExpression( ("manifold.js.JavascriptTemplate.initEngine(TEMPLATE_NODE)") ) ) ); AbstractSrcMethod<SrcMethod> srcMethod = new SrcMethod() .name( "renderToString" ) .modifiers( Modifier.PUBLIC | Modifier.STATIC ) .returns( String.class ); List<SrcParameter> srcParameters = makeSrcParameters( jstNode, srcMethod ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( "return manifold.js.JavascriptTemplate.renderToStringImpl(ENGINE, TEMPLATE_NODE" + generateArgList( srcParameters ) + ");" ) ) ); clazz.addMethod( srcMethod ); return clazz; }
public static SrcClass genClass( String fqn, JSTNode jstNode ) { SrcClass clazz = new SrcClass( fqn, SrcClass.Kind.Class ); clazz.addField( new SrcField( "TEMPLATE_NODE", JSTNode.class ) .modifiers( Modifier.STATIC ) .initializer( new SrcRawExpression( ("manifold.js.JavascriptTemplate.initNode(\"" + fqn + "\")") ) ) ); clazz.addField( new SrcField( "ENGINE", ScriptEngine.class ) .modifiers( Modifier.STATIC ) .initializer( new SrcRawExpression( ("manifold.js.JavascriptTemplate.initEngine(TEMPLATE_NODE)") ) ) ); AbstractSrcMethod<SrcMethod> srcMethod = new SrcMethod() .name( "renderToString" ) .modifiers( Modifier.PUBLIC | Modifier.STATIC ) .returns( String.class ); List<SrcParameter> srcParameters = makeSrcParameters( jstNode, srcMethod ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( "return manifold.js.JavascriptTemplate.renderToStringImpl(ENGINE, TEMPLATE_NODE" + generateArgList( srcParameters ) + ");" ) ) ); clazz.addMethod( srcMethod ); return clazz; }
static SrcClass genProgram( String fqn, ProgramNode programNode ) { SrcClass clazz = new SrcClass( fqn, SrcClass.Kind.Class ).superClass( JavascriptProgram.class ) .imports( SourcePosition.class ); clazz.addField( new SrcField( "ENGINE", ScriptEngine.class ) .modifiers( Modifier.STATIC ) .initializer( new SrcRawExpression( ("init(\"" + fqn + "\")") ) ) ); clazz.addConstructor( new SrcConstructor().modifiers( Modifier.PRIVATE ).body( new SrcStatementBlock() ) ); for( FunctionNode node : programNode.getChildren( FunctionNode.class ) ) { AbstractSrcMethod<SrcMethod> srcMethod = new SrcMethod() .name( node.getName() ) .modifiers( Modifier.STATIC | Modifier.PUBLIC ) .returns( node.getReturnType() ); List<SrcParameter> srcParameters = makeSrcParameters( node, srcMethod ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( "return invoke(ENGINE, \"" + node.getName() + "\"" + generateArgList( srcParameters ) + ");" ) ) ); clazz.addMethod( srcMethod ); } return clazz; }
static SrcClass genProgram( String fqn, ProgramNode programNode ) { SrcClass clazz = new SrcClass( fqn, SrcClass.Kind.Class ).superClass( JavascriptProgram.class ) .imports( SourcePosition.class ); clazz.addField( new SrcField( "ENGINE", ScriptEngine.class ) .modifiers( Modifier.STATIC ) .initializer( new SrcRawExpression( ("init(\"" + fqn + "\")") ) ) ); clazz.addConstructor( new SrcConstructor().modifiers( Modifier.PRIVATE ).body( new SrcStatementBlock() ) ); for( FunctionNode node : programNode.getChildren( FunctionNode.class ) ) { AbstractSrcMethod<SrcMethod> srcMethod = new SrcMethod() .name( node.getName() ) .modifiers( Modifier.STATIC | Modifier.PUBLIC ) .returns( node.getReturnType() ); List<SrcParameter> srcParameters = makeSrcParameters( node, srcMethod ); srcMethod.body( new SrcStatementBlock() .addStatement( new SrcRawStatement() .rawText( "return invoke(ENGINE, \"" + node.getName() + "\"" + generateArgList( srcParameters ) + ");" ) ) ); clazz.addMethod( srcMethod ); } return clazz; }