package sharpen.core.framework; import org.eclipse.jdt.core.dom.*; import sharpen.core.CSharpBuilder; import sharpen.core.Configuration.MemberMapping; import sharpen.core.csharp.ast.*; public interface CSharpDriver { interface IBuilderDelegate<T extends CSNode> { T create(); void map(T member); void document(T member); void fixup(T member); } CSTypeDeclaration processTypeDeclaration(CSharpBuilder builder, CSTypeContainer parent, TypeDeclaration node, ITypeBuilderDelegate delegate); interface ITypeBuilderDelegate extends IBuilderDelegate<CSTypeDeclaration> { void mapMembers(CSTypeDeclaration type, IMemberFilter filter); } CSMethodBase processMethodDeclaration(CSharpBuilder builder, CSTypeDeclaration parent, MethodDeclaration node, IMethodBuilderDelegate delegate); interface IMethodBuilderDelegate extends IBuilderDelegate<CSMethodBase> { ITypeBinding getDeclaringType(); IMethodBinding getBaseMethod(boolean overrideOnly, boolean allowStatic); void mapBody(CSMethodBase method); void fixup(CSTypeDeclaration parent, CSMethodBase method); } CSField processFieldDeclaration(CSharpBuilder builder, CSTypeDeclaration parent, FieldDeclaration node, VariableDeclarationFragment fragment, IFieldBuilderDelegate delegate); interface IFieldBuilderDelegate extends IBuilderDelegate<CSField> { } CSProperty processPropertyDeclaration(CSharpBuilder builder, CSTypeDeclaration parent, MethodDeclaration node, String name, CSProperty property, IPropertyBuilderDelegate delegate); interface IPropertyBuilderDelegate extends IBuilderDelegate<CSProperty> { boolean isGetter(); void mapBody(CSProperty property); } CSEnum processEnumDeclaration(CSharpBuilder builder, CSTypeContainer parent, EnumDeclaration node, IEnumBuilderDelegate delegate); interface IEnumBuilderDelegate extends IBuilderDelegate<CSEnum> { } CSTypeDeclaration processExtractedEnumDeclaration(CSharpBuilder builder, CSTypeContainer parent, EnumDeclaration node, ITypeBuilderDelegate delegate); interface IMemberFilter { boolean includeMember(ASTNode member); } CSAnonymousClass processAnonymousClass(CSharpBuilder builder, CSTypeContainer parent, AnonymousClassDeclaration node, IAnonymousClassBuilderDelegate delegate); interface IAnonymousClassBuilderDelegate extends IBuilderDelegate<CSAnonymousClass> { } String mappedTypeName(CSharpBuilder builder, ITypeBinding binding); CSTypeReferenceExpression mappedTypeReference(CSharpBuilder builder, ITypeBinding binding); CSExpression mappedMethodInvocation(CSharpBuilder builder, MethodInvocation node); CSExpression mappedMethodInvocationArgument(CSharpBuilder builder, MethodInvocation node, int index, Expression arg); CSExpression mappedEnumAccess(CSharpBuilder builder, Expression expr, IVariableBinding binding); String mappedVariableName(IVariableBinding binding); CSExpression mappedNullPointer(Expression expr); CSExpression mappedNullPointer(IVariableBinding binding); CSTypeReferenceExpression mappedVariableType(IVariableBinding binding); MemberMapping mappedMethod(IMethodBinding binding); CSExpression castIfNeeded(CSharpBuilder builder, ITypeBinding expectedType, ITypeBinding actualType, CSExpression expression); CSVisibility mapVisibility(ITypeBinding binding); CSVisibility mapVisibility(IMethodBinding binding); CSVisibility mapVisibility(IVariableBinding binding); }