A massive organize imports and formatting of the sources using default Eclipse code...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / codemanipulation / StubUtility.java
index 4e0f8f8..10b0b08 100644 (file)
@@ -43,1027 +43,1262 @@ import org.eclipse.jface.text.templates.TemplateVariable;
 import org.eclipse.swt.SWT;
 
 public class StubUtility {
-       
-       
+
        public static class GenStubSettings extends CodeGenerationSettings {
-               
-                       public boolean callSuper;
-                       public boolean methodOverwrites;
-                       public boolean noBody;
-                       public int methodModifiers;
-                       
-                       public GenStubSettings(CodeGenerationSettings settings) {
-                               settings.setSettings(this);
-                               methodModifiers= -1;    
-                       }
-                       
-               }
-                       
-               private static final String[] EMPTY= new String[0];
-               
-               /**
-                * Generates a method stub including the method comment. Given a template
-                * method, a stub with the same signature will be constructed so it can be
-                * added to a type. The method body will be empty or contain a return or
-                * super call.
-                * @param destTypeName The name of the type to which the method will be
-                * added to
-                * @param method A method template (method belongs to different type than the parent)
-                * @param definingType The type that defines the method.
-                * @param settings Options as defined above (<code>GenStubSettings</code>)
-                * @param imports Imports required by the stub are added to the imports structure. If imports structure is <code>null</code>
-                * all type names are qualified.
-                * @throws JavaModelException
-                */
-               public static String genStub(ICompilationUnit cu, String destTypeName, IMethod method, IType definingType, GenStubSettings settings) throws CoreException { 
-                 //IImportsStructure imports) throws CoreException {
-                       String methName= method.getElementName();
-                       String[] paramNames= suggestArgumentNames(method.getJavaProject(), method.getParameterNames());
-                       String returnType= method.isConstructor() ? null : method.getReturnType();
-                       String lineDelimiter= String.valueOf('\n'); // reformatting required
-                       
-                       
-                       StringBuffer buf= new StringBuffer();
-                       // add method comment
-                       if (settings.createComments && cu != null) {
-                               IMethod overridden= null;
-                               if (settings.methodOverwrites && returnType != null) {
-                                       overridden= JavaModelUtil.findMethod(methName, method.getParameterTypes(), false, definingType.getMethods());
-                               }
-                               String comment= getMethodComment(cu, destTypeName, methName, paramNames, method.getExceptionTypes(), returnType, overridden, lineDelimiter);
-                               if (comment != null) {
-                                       buf.append(comment);
-                               } else {
-                                       buf.append("/**").append(lineDelimiter); //$NON-NLS-1$
-                                       buf.append(" *").append(lineDelimiter); //$NON-NLS-1$
-                                       buf.append(" */").append(lineDelimiter); //$NON-NLS-1$                                                  
-                               }
-                               buf.append(lineDelimiter);
-                       }
-                       // add method declaration
-                       String bodyContent= null;
-                       if (!settings.noBody) {
-                               String bodyStatement= getDefaultMethodBodyStatement(methName, paramNames, returnType, settings.callSuper);
-                               bodyContent= getMethodBodyContent(returnType == null, method.getJavaProject(), destTypeName, methName, bodyStatement, lineDelimiter);
-                               if (bodyContent == null) {
-                                       bodyContent= ""; //$NON-NLS-1$
-                               }
-                       }
-                       int flags= settings.methodModifiers;
-                       if (flags == -1) {
-                               flags= method.getFlags();
-                       }
-                       
-                       genMethodDeclaration(destTypeName, method, flags, bodyContent, buf); // imports, buf);
-                       return buf.toString();
-               }
 
-               /**
-                * Generates a method stub not including the method comment. Given a
-                * template method and the body content, a stub with the same signature will
-                * be constructed so it can be added to a type.
-                * @param destTypeName The name of the type to which the method will be
-                * added to
-                * @param method A method template (method belongs to different type than the parent)
-                * @param bodyContent Content of the body
-                * @param imports Imports required by the stub are added to the imports
-                * structure. If imports structure is <code>null</code> all type names are
-                * qualified.
-                * @param buf The buffer to append the gerenated code.
-                * @throws JavaModelException
-                */
-               public static void genMethodDeclaration(String destTypeName, IMethod method, String bodyContent, StringBuffer buf) throws CoreException { // IImportsStructure imports, StringBuffer buf) throws CoreException {
-                       genMethodDeclaration(destTypeName, method, method.getFlags(), bodyContent, buf);
+               public boolean callSuper;
+
+               public boolean methodOverwrites;
+
+               public boolean noBody;
+
+               public int methodModifiers;
+
+               public GenStubSettings(CodeGenerationSettings settings) {
+                       settings.setSettings(this);
+                       methodModifiers = -1;
                }
-               
-               /**
-                * Generates a method stub not including the method comment. Given a
-                * template method and the body content, a stub with the same signature will
-                * be constructed so it can be added to a type.
-                * @param destTypeName The name of the type to which the method will be
-                * added to
-                * @param method A method template (method belongs to different type than the parent)
-                * @param bodyContent Content of the body
-                * @param imports Imports required by the stub are added to the imports
-                * structure. If imports structure is <code>null</code> all type names are
-                * qualified.
-                * @param buf The buffer to append the gerenated code.
-                * @throws JavaModelException
-                */
-               public static void genMethodDeclaration(String destTypeName, IMethod method, int flags, String bodyContent, StringBuffer buf) throws CoreException {
-                 //IImportsStructure imports, StringBuffer buf) throws CoreException {
-                       IType parentType= method.getDeclaringType();    
-                       String methodName= method.getElementName();
-                       String[] paramTypes= method.getParameterTypes();
-                       String[] paramNames= suggestArgumentNames(parentType.getJavaProject(), method.getParameterNames());
-
-                       String[] excTypes= method.getExceptionTypes();
-
-                       boolean isConstructor= method.isConstructor();
-                       String retTypeSig= isConstructor ? null : method.getReturnType();
-                       
-                       int lastParam= paramTypes.length -1;
-                       
-                       if (Flags.isPublic(flags) || (parentType.isInterface() && bodyContent != null)) {
-                               buf.append("public "); //$NON-NLS-1$
-                       } else if (Flags.isProtected(flags)) {
-                               buf.append("protected "); //$NON-NLS-1$
-                       } else if (Flags.isPrivate(flags)) {
-                               buf.append("private "); //$NON-NLS-1$
+
+       }
+
+       private static final String[] EMPTY = new String[0];
+
+       /**
+        * Generates a method stub including the method comment. Given a template
+        * method, a stub with the same signature will be constructed so it can be
+        * added to a type. The method body will be empty or contain a return or
+        * super call.
+        * 
+        * @param destTypeName
+        *            The name of the type to which the method will be added to
+        * @param method
+        *            A method template (method belongs to different type than the
+        *            parent)
+        * @param definingType
+        *            The type that defines the method.
+        * @param settings
+        *            Options as defined above (<code>GenStubSettings</code>)
+        * @param imports
+        *            Imports required by the stub are added to the imports
+        *            structure. If imports structure is <code>null</code> all
+        *            type names are qualified.
+        * @throws JavaModelException
+        */
+       public static String genStub(ICompilationUnit cu, String destTypeName,
+                       IMethod method, IType definingType, GenStubSettings settings)
+                       throws CoreException {
+               // IImportsStructure imports) throws CoreException {
+               String methName = method.getElementName();
+               String[] paramNames = suggestArgumentNames(method.getJavaProject(),
+                               method.getParameterNames());
+               String returnType = method.isConstructor() ? null : method
+                               .getReturnType();
+               String lineDelimiter = String.valueOf('\n'); // reformatting required
+
+               StringBuffer buf = new StringBuffer();
+               // add method comment
+               if (settings.createComments && cu != null) {
+                       IMethod overridden = null;
+                       if (settings.methodOverwrites && returnType != null) {
+                               overridden = JavaModelUtil.findMethod(methName, method
+                                               .getParameterTypes(), false, definingType.getMethods());
                        }
-//                     if (Flags.isSynchronized(flags)) {
-//                             buf.append("synchronized "); //$NON-NLS-1$
-//                     }               
-//                     if (Flags.isVolatile(flags)) {
-//                             buf.append("volatile "); //$NON-NLS-1$
-//                     }
-//                     if (Flags.isStrictfp(flags)) {
-//                             buf.append("strictfp "); //$NON-NLS-1$
-//                     }
-                       if (Flags.isStatic(flags)) {
-                               buf.append("static "); //$NON-NLS-1$
-                       }               
-                               
-                       if (isConstructor) {
-                               buf.append(destTypeName);
+                       String comment = getMethodComment(cu, destTypeName, methName,
+                                       paramNames, method.getExceptionTypes(), returnType,
+                                       overridden, lineDelimiter);
+                       if (comment != null) {
+                               buf.append(comment);
                        } else {
-                               String retTypeFrm;
-                               if (!isPrimitiveType(retTypeSig)) {
-                                       retTypeFrm= resolveAndAdd(retTypeSig, parentType);
-                               } else {
-                                       retTypeFrm= Signature.toString(retTypeSig);
-                               }
-                               buf.append(retTypeFrm);
-                               buf.append(' ');
-                               buf.append(methodName);
-                       }
-                       buf.append('(');
-                       for (int i= 0; i <= lastParam; i++) {
-                               String paramTypeSig= paramTypes[i];
-                               String paramTypeFrm;
-                               
-                               if (!isPrimitiveType(paramTypeSig)) {
-                                       paramTypeFrm= resolveAndAdd(paramTypeSig, parentType);
-                               } else {
-                                       paramTypeFrm= Signature.toString(paramTypeSig);
-                               }
-                               buf.append(paramTypeFrm);
-                               buf.append(' ');
-                               buf.append(paramNames[i]);
-                               if (i < lastParam) {
-                                       buf.append(", "); //$NON-NLS-1$
-                               }
-                       }
-                       buf.append(')');
-                       
-                       int lastExc= excTypes.length - 1;
-                       if (lastExc >= 0) {
-                               buf.append(" throws "); //$NON-NLS-1$
-                               for (int i= 0; i <= lastExc; i++) {
-                                       String excTypeSig= excTypes[i];
-                                       String excTypeFrm= resolveAndAdd(excTypeSig, parentType);
-                                       buf.append(excTypeFrm);
-                                       if (i < lastExc) {
-                                               buf.append(", "); //$NON-NLS-1$
-                                       }
-                               }
+                               buf.append("/**").append(lineDelimiter); //$NON-NLS-1$
+                               buf.append(" *").append(lineDelimiter); //$NON-NLS-1$
+                               buf.append(" */").append(lineDelimiter); //$NON-NLS-1$                                                  
                        }
+                       buf.append(lineDelimiter);
+               }
+               // add method declaration
+               String bodyContent = null;
+               if (!settings.noBody) {
+                       String bodyStatement = getDefaultMethodBodyStatement(methName,
+                                       paramNames, returnType, settings.callSuper);
+                       bodyContent = getMethodBodyContent(returnType == null, method
+                                       .getJavaProject(), destTypeName, methName, bodyStatement,
+                                       lineDelimiter);
                        if (bodyContent == null) {
-                               buf.append(";\n\n"); //$NON-NLS-1$
-                       } else {
-                               buf.append(" {\n\t"); //$NON-NLS-1$
-                               if ((bodyContent != null) && (bodyContent.length() > 0)) {
-                                       buf.append(bodyContent);
-                                       buf.append('\n');
-                               }
-                               buf.append("}\n");                       //$NON-NLS-1$
+                               bodyContent = ""; //$NON-NLS-1$
                        }
                }
-               
-               public static String getDefaultMethodBodyStatement(String methodName, String[] paramNames, String retTypeSig, boolean callSuper) {
-                       StringBuffer buf= new StringBuffer();
-                       if (callSuper) {
-                               if (retTypeSig != null) {
-                                       if (!Signature.SIG_VOID.equals(retTypeSig)) {
-                                               buf.append("return "); //$NON-NLS-1$
-                                       }
-                                       buf.append("super."); //$NON-NLS-1$
-                                       buf.append(methodName);
-                               } else {
-                                       buf.append("super"); //$NON-NLS-1$
-                               }
-                               buf.append('(');                        
-                               for (int i= 0; i < paramNames.length; i++) {
-                                       if (i > 0) {
-                                               buf.append(", "); //$NON-NLS-1$
-                                       }
-                                       buf.append(paramNames[i]);
-                               }
-                               buf.append(");"); //$NON-NLS-1$
-                       } else {
-                               if (retTypeSig != null && !retTypeSig.equals(Signature.SIG_VOID)) {
-                                       if (!isPrimitiveType(retTypeSig) || Signature.getArrayCount(retTypeSig) > 0) {
-                                               buf.append("return null;"); //$NON-NLS-1$
-                                       } else if (retTypeSig.equals(Signature.SIG_BOOLEAN)) {
-                                               buf.append("return false;"); //$NON-NLS-1$
-                                       } else {
-                                               buf.append("return 0;"); //$NON-NLS-1$
-                                       }
-                               }                       
-                       }
-                       return buf.toString();
-               }       
+               int flags = settings.methodModifiers;
+               if (flags == -1) {
+                       flags = method.getFlags();
+               }
 
-               public static String getMethodBodyContent(boolean isConstructor, IJavaProject project, String destTypeName, String methodName, String bodyStatement, String lineDelimiter) throws CoreException {
-                       String templateName= isConstructor ? CodeTemplateContextType.CONSTRUCTORSTUB : CodeTemplateContextType.METHODSTUB;
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-                       if (template == null) {
-                               return bodyStatement;
-                       }
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), project, lineDelimiter);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, methodName);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, destTypeName);
-                       context.setVariable(CodeTemplateContextType.BODY_STATEMENT, bodyStatement);
-                       String str= evaluateTemplate(context, template);
-                       if (str == null && !Strings.containsOnlyWhitespaces(bodyStatement)) {
-                               return bodyStatement;
-                       }
-                       return str;
+               genMethodDeclaration(destTypeName, method, flags, bodyContent, buf); // imports,
+                                                                                                                                                               // buf);
+               return buf.toString();
+       }
+
+       /**
+        * Generates a method stub not including the method comment. Given a
+        * template method and the body content, a stub with the same signature will
+        * be constructed so it can be added to a type.
+        * 
+        * @param destTypeName
+        *            The name of the type to which the method will be added to
+        * @param method
+        *            A method template (method belongs to different type than the
+        *            parent)
+        * @param bodyContent
+        *            Content of the body
+        * @param imports
+        *            Imports required by the stub are added to the imports
+        *            structure. If imports structure is <code>null</code> all
+        *            type names are qualified.
+        * @param buf
+        *            The buffer to append the gerenated code.
+        * @throws JavaModelException
+        */
+       public static void genMethodDeclaration(String destTypeName,
+                       IMethod method, String bodyContent, StringBuffer buf)
+                       throws CoreException { // IImportsStructure imports, StringBuffer
+                                                                       // buf) throws CoreException {
+               genMethodDeclaration(destTypeName, method, method.getFlags(),
+                               bodyContent, buf);
+       }
+
+       /**
+        * Generates a method stub not including the method comment. Given a
+        * template method and the body content, a stub with the same signature will
+        * be constructed so it can be added to a type.
+        * 
+        * @param destTypeName
+        *            The name of the type to which the method will be added to
+        * @param method
+        *            A method template (method belongs to different type than the
+        *            parent)
+        * @param bodyContent
+        *            Content of the body
+        * @param imports
+        *            Imports required by the stub are added to the imports
+        *            structure. If imports structure is <code>null</code> all
+        *            type names are qualified.
+        * @param buf
+        *            The buffer to append the gerenated code.
+        * @throws JavaModelException
+        */
+       public static void genMethodDeclaration(String destTypeName,
+                       IMethod method, int flags, String bodyContent, StringBuffer buf)
+                       throws CoreException {
+               // IImportsStructure imports, StringBuffer buf) throws CoreException {
+               IType parentType = method.getDeclaringType();
+               String methodName = method.getElementName();
+               String[] paramTypes = method.getParameterTypes();
+               String[] paramNames = suggestArgumentNames(parentType.getJavaProject(),
+                               method.getParameterNames());
+
+               String[] excTypes = method.getExceptionTypes();
+
+               boolean isConstructor = method.isConstructor();
+               String retTypeSig = isConstructor ? null : method.getReturnType();
+
+               int lastParam = paramTypes.length - 1;
+
+               if (Flags.isPublic(flags)
+                               || (parentType.isInterface() && bodyContent != null)) {
+                       buf.append("public "); //$NON-NLS-1$
+               } else if (Flags.isProtected(flags)) {
+                       buf.append("protected "); //$NON-NLS-1$
+               } else if (Flags.isPrivate(flags)) {
+                       buf.append("private "); //$NON-NLS-1$
                }
-               
-               public static String getGetterMethodBodyContent(IJavaProject project, String destTypeName, String methodName, String fieldName, String lineDelimiter) throws CoreException {
-                       String templateName= CodeTemplateContextType.GETTERSTUB;
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-                       if (template == null) {
-                               return null;
-                       }
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), project, lineDelimiter);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, methodName);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, destTypeName);
-                       context.setVariable(CodeTemplateContextType.FIELD, fieldName);
-                       
-                       return evaluateTemplate(context, template);
+               // if (Flags.isSynchronized(flags)) {
+               // buf.append("synchronized "); //$NON-NLS-1$
+               // }
+               // if (Flags.isVolatile(flags)) {
+               // buf.append("volatile "); //$NON-NLS-1$
+               // }
+               // if (Flags.isStrictfp(flags)) {
+               // buf.append("strictfp "); //$NON-NLS-1$
+               // }
+               if (Flags.isStatic(flags)) {
+                       buf.append("static "); //$NON-NLS-1$
                }
-               
-               public static String getSetterMethodBodyContent(IJavaProject project, String destTypeName, String methodName, String fieldName, String paramName, String lineDelimiter) throws CoreException {
-                       String templateName= CodeTemplateContextType.SETTERSTUB;
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-                       if (template == null) {
-                               return null;
+
+               if (isConstructor) {
+                       buf.append(destTypeName);
+               } else {
+                       String retTypeFrm;
+                       if (!isPrimitiveType(retTypeSig)) {
+                               retTypeFrm = resolveAndAdd(retTypeSig, parentType);
+                       } else {
+                               retTypeFrm = Signature.toString(retTypeSig);
                        }
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), project, lineDelimiter);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, methodName);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, destTypeName);
-                       context.setVariable(CodeTemplateContextType.FIELD, fieldName);
-                       context.setVariable(CodeTemplateContextType.FIELD_TYPE, fieldName);
-                       context.setVariable(CodeTemplateContextType.PARAM, paramName);
-                       
-                       return evaluateTemplate(context, template);
+                       buf.append(retTypeFrm);
+                       buf.append(' ');
+                       buf.append(methodName);
                }
-               
-               public static String getCatchBodyContent(ICompilationUnit cu, String exceptionType, String variableName, String lineDelimiter) throws CoreException {
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(CodeTemplateContextType.CATCHBLOCK);
-                       if (template == null) {
-                               return null;
-                       }
+               buf.append('(');
+               for (int i = 0; i <= lastParam; i++) {
+                       String paramTypeSig = paramTypes[i];
+                       String paramTypeFrm;
 
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelimiter);
-                       context.setVariable(CodeTemplateContextType.EXCEPTION_TYPE, exceptionType);
-                       context.setVariable(CodeTemplateContextType.EXCEPTION_VAR, variableName); //$NON-NLS-1$
-                       return evaluateTemplate(context, template);
-               }               
-               
-               /**
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getTypeComment(ICompilationUnit, String, String)
-                */     
-               public static String getCompilationUnitContent(ICompilationUnit cu, String typeComment, String typeContent, String lineDelimiter) throws CoreException {
-                       IPackageFragment pack= (IPackageFragment) cu.getParent();
-                       String packDecl= pack.isDefaultPackage() ? "" : "package " + pack.getElementName() + ';'; //$NON-NLS-1$ //$NON-NLS-2$
-
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(CodeTemplateContextType.NEWTYPE);
-                       if (template == null) {
-                               return null;
+                       if (!isPrimitiveType(paramTypeSig)) {
+                               paramTypeFrm = resolveAndAdd(paramTypeSig, parentType);
+                       } else {
+                               paramTypeFrm = Signature.toString(paramTypeSig);
                        }
-                       
-                       IJavaProject project= cu.getJavaProject();
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), project, lineDelimiter);
-                       context.setCompilationUnitVariables(cu);
-                       context.setVariable(CodeTemplateContextType.PACKAGE_DECLARATION, packDecl);
-                       context.setVariable(CodeTemplateContextType.TYPE_COMMENT, typeComment != null ? typeComment : ""); //$NON-NLS-1$
-                       context.setVariable(CodeTemplateContextType.TYPE_DECLARATION, typeContent);
-                       context.setVariable(CodeTemplateContextType.TYPENAME, Signature.getQualifier(cu.getElementName()));
-                       return evaluateTemplate(context, template);
-               }               
-
-               /*
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getTypeComment(ICompilationUnit, String, String)
-                */             
-               public static String getTypeComment(ICompilationUnit cu, String typeQualifiedName, String lineDelim) throws CoreException {
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(CodeTemplateContextType.TYPECOMMENT);
-                       if (template == null) {
-                               return null;
+                       buf.append(paramTypeFrm);
+                       buf.append(' ');
+                       buf.append(paramNames[i]);
+                       if (i < lastParam) {
+                               buf.append(", "); //$NON-NLS-1$
                        }
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelim);
-                       context.setCompilationUnitVariables(cu);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, Signature.getQualifier(typeQualifiedName));
-                       context.setVariable(CodeTemplateContextType.TYPENAME, Signature.getSimpleName(typeQualifiedName));
-                       return evaluateTemplate(context, template);
                }
+               buf.append(')');
 
-//             private static String[] getParameterTypesQualifiedNames(IMethodBinding binding) {
-//                     ITypeBinding[] typeBindings= binding.getParameterTypes();
-//                     String[] result= new String[typeBindings.length];
-//                     for (int i= 0; i < result.length; i++) {
-//                             result[i]= typeBindings[i].getQualifiedName();
-//                     }
-//                     return result;
-//             }
-
-               private static String getSeeTag(String declaringClassQualifiedName, String methodName, String[] parameterTypesQualifiedNames) {
-                       StringBuffer buf= new StringBuffer();
-                       buf.append("@see "); //$NON-NLS-1$
-                       buf.append(declaringClassQualifiedName);
-                       buf.append('#'); 
-                       buf.append(methodName);
-                       buf.append('(');
-                       for (int i= 0; i < parameterTypesQualifiedNames.length; i++) {
-                               if (i > 0) {
+               int lastExc = excTypes.length - 1;
+               if (lastExc >= 0) {
+                       buf.append(" throws "); //$NON-NLS-1$
+                       for (int i = 0; i <= lastExc; i++) {
+                               String excTypeSig = excTypes[i];
+                               String excTypeFrm = resolveAndAdd(excTypeSig, parentType);
+                               buf.append(excTypeFrm);
+                               if (i < lastExc) {
                                        buf.append(", "); //$NON-NLS-1$
                                }
-                               buf.append(parameterTypesQualifiedNames[i]);
                        }
-                       buf.append(')');
-                       return buf.toString();
                }
-               
-               private static String getSeeTag(IMethod overridden) throws JavaModelException {
-                       IType declaringType= overridden.getDeclaringType();
-                       StringBuffer buf= new StringBuffer();
-                       buf.append("@see "); //$NON-NLS-1$
-                       buf.append(declaringType.getFullyQualifiedName('.'));
-                       buf.append('#'); 
-                       buf.append(overridden.getElementName());
+               if (bodyContent == null) {
+                       buf.append(";\n\n"); //$NON-NLS-1$
+               } else {
+                       buf.append(" {\n\t"); //$NON-NLS-1$
+                       if ((bodyContent != null) && (bodyContent.length() > 0)) {
+                               buf.append(bodyContent);
+                               buf.append('\n');
+                       }
+                       buf.append("}\n"); //$NON-NLS-1$
+               }
+       }
+
+       public static String getDefaultMethodBodyStatement(String methodName,
+                       String[] paramNames, String retTypeSig, boolean callSuper) {
+               StringBuffer buf = new StringBuffer();
+               if (callSuper) {
+                       if (retTypeSig != null) {
+                               if (!Signature.SIG_VOID.equals(retTypeSig)) {
+                                       buf.append("return "); //$NON-NLS-1$
+                               }
+                               buf.append("super."); //$NON-NLS-1$
+                               buf.append(methodName);
+                       } else {
+                               buf.append("super"); //$NON-NLS-1$
+                       }
                        buf.append('(');
-                       String[] paramTypes= overridden.getParameterTypes();
-                       for (int i= 0; i < paramTypes.length; i++) {
+                       for (int i = 0; i < paramNames.length; i++) {
                                if (i > 0) {
                                        buf.append(", "); //$NON-NLS-1$
                                }
-                               String curr= paramTypes[i];
-                               buf.append(JavaModelUtil.getResolvedTypeName(curr, declaringType));
-                               int arrayCount= Signature.getArrayCount(curr);
-                               while (arrayCount > 0) {
-                                       buf.append("[]"); //$NON-NLS-1$
-                                       arrayCount--;
+                               buf.append(paramNames[i]);
+                       }
+                       buf.append(");"); //$NON-NLS-1$
+               } else {
+                       if (retTypeSig != null && !retTypeSig.equals(Signature.SIG_VOID)) {
+                               if (!isPrimitiveType(retTypeSig)
+                                               || Signature.getArrayCount(retTypeSig) > 0) {
+                                       buf.append("return null;"); //$NON-NLS-1$
+                               } else if (retTypeSig.equals(Signature.SIG_BOOLEAN)) {
+                                       buf.append("return false;"); //$NON-NLS-1$
+                               } else {
+                                       buf.append("return 0;"); //$NON-NLS-1$
                                }
                        }
-                       buf.append(')');
-                       return buf.toString();
                }
-               
-               /**
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(IMethod,IMethod,String)
-                */
-               public static String getMethodComment(IMethod method, IMethod overridden, String lineDelimiter) throws CoreException {
-                       String retType= method.isConstructor() ? null : method.getReturnType();
-                       String[] paramNames= method.getParameterNames();
-                       
-                       return getMethodComment(method.getCompilationUnit(), method.getDeclaringType().getElementName(),
-                               method.getElementName(), paramNames, method.getExceptionTypes(), retType, overridden, lineDelimiter);
+               return buf.toString();
+       }
+
+       public static String getMethodBodyContent(boolean isConstructor,
+                       IJavaProject project, String destTypeName, String methodName,
+                       String bodyStatement, String lineDelimiter) throws CoreException {
+               String templateName = isConstructor ? CodeTemplateContextType.CONSTRUCTORSTUB
+                               : CodeTemplateContextType.METHODSTUB;
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(templateName);
+               if (template == null) {
+                       return bodyStatement;
                }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), project, lineDelimiter);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+                               methodName);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE,
+                               destTypeName);
+               context.setVariable(CodeTemplateContextType.BODY_STATEMENT,
+                               bodyStatement);
+               String str = evaluateTemplate(context, template);
+               if (str == null && !Strings.containsOnlyWhitespaces(bodyStatement)) {
+                       return bodyStatement;
+               }
+               return str;
+       }
 
-               /**
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(ICompilationUnit, String, String, String[], String[], String, IMethod, String)
-                */
-               public static String getMethodComment(ICompilationUnit cu, String typeName, String methodName, String[] paramNames, String[] excTypeSig, String retTypeSig, IMethod overridden, String lineDelimiter) throws CoreException {
-                       String templateName= CodeTemplateContextType.METHODCOMMENT;
-                       if (retTypeSig == null) {
-                               templateName= CodeTemplateContextType.CONSTRUCTORCOMMENT;
-                       } else if (overridden != null) {
-                               templateName= CodeTemplateContextType.OVERRIDECOMMENT;
-                       }
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-                       if (template == null) {
-                               return null;
-                       }               
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelimiter);
-                       context.setCompilationUnitVariables(cu);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, methodName);
-                                       
-                       if (retTypeSig != null) {
-                               context.setVariable(CodeTemplateContextType.RETURN_TYPE, Signature.toString(retTypeSig));
-                       }
-                       if (overridden != null) {
-                               context.setVariable(CodeTemplateContextType.SEE_TAG, getSeeTag(overridden));
-                       }
-                       TemplateBuffer buffer;
-                       try {
-                               buffer= context.evaluate(template);
-                       } catch (BadLocationException e) {
-                               throw new CoreException(Status.CANCEL_STATUS);
-                       } catch (TemplateException e) {
-                               throw new CoreException(Status.CANCEL_STATUS);
-                       }
-                       if (buffer == null) {
-                               return null;
-                       }
-                       
-                       String str= buffer.getString();
-                       if (Strings.containsOnlyWhitespaces(str)) {
-                               return null;
-                       }
-                       TemplateVariable position= findTagVariable(buffer); // look if Javadoc tags have to be added
-                       if (position == null) {
-                               return str;
-                       }
-                               
-                       IDocument textBuffer= new Document(str);
-                       String[] exceptionNames= new String[excTypeSig.length];
-                       for (int i= 0; i < excTypeSig.length; i++) {
-                               exceptionNames[i]= Signature.toString(excTypeSig[i]);
-                       }
-                       String returnType= retTypeSig != null ? Signature.toString(retTypeSig) : null;
-                       int[] tagOffsets= position.getOffsets();
-                       for (int i= tagOffsets.length - 1; i >= 0; i--) { // from last to first
-                               try {
-                                       insertTag(textBuffer, tagOffsets[i], position.getLength(), paramNames, exceptionNames, returnType, false, lineDelimiter);
-                               } catch (BadLocationException e) {
-                                       throw new CoreException(PHPUIStatus.createError(IStatus.ERROR, e));
-                               }
+       public static String getGetterMethodBodyContent(IJavaProject project,
+                       String destTypeName, String methodName, String fieldName,
+                       String lineDelimiter) throws CoreException {
+               String templateName = CodeTemplateContextType.GETTERSTUB;
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(templateName);
+               if (template == null) {
+                       return null;
+               }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), project, lineDelimiter);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+                               methodName);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE,
+                               destTypeName);
+               context.setVariable(CodeTemplateContextType.FIELD, fieldName);
+
+               return evaluateTemplate(context, template);
+       }
+
+       public static String getSetterMethodBodyContent(IJavaProject project,
+                       String destTypeName, String methodName, String fieldName,
+                       String paramName, String lineDelimiter) throws CoreException {
+               String templateName = CodeTemplateContextType.SETTERSTUB;
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(templateName);
+               if (template == null) {
+                       return null;
+               }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), project, lineDelimiter);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+                               methodName);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE,
+                               destTypeName);
+               context.setVariable(CodeTemplateContextType.FIELD, fieldName);
+               context.setVariable(CodeTemplateContextType.FIELD_TYPE, fieldName);
+               context.setVariable(CodeTemplateContextType.PARAM, paramName);
+
+               return evaluateTemplate(context, template);
+       }
+
+       public static String getCatchBodyContent(ICompilationUnit cu,
+                       String exceptionType, String variableName, String lineDelimiter)
+                       throws CoreException {
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(
+                                               CodeTemplateContextType.CATCHBLOCK);
+               if (template == null) {
+                       return null;
+               }
+
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), cu.getJavaProject(), lineDelimiter);
+               context.setVariable(CodeTemplateContextType.EXCEPTION_TYPE,
+                               exceptionType);
+               context
+                               .setVariable(CodeTemplateContextType.EXCEPTION_VAR,
+                                               variableName); //$NON-NLS-1$
+               return evaluateTemplate(context, template);
+       }
+
+       /**
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getTypeComment(ICompilationUnit,
+        *      String, String)
+        */
+       public static String getCompilationUnitContent(ICompilationUnit cu,
+                       String typeComment, String typeContent, String lineDelimiter)
+                       throws CoreException {
+               IPackageFragment pack = (IPackageFragment) cu.getParent();
+               String packDecl = pack.isDefaultPackage() ? "" : "package " + pack.getElementName() + ';'; //$NON-NLS-1$ //$NON-NLS-2$
+
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(
+                                               CodeTemplateContextType.NEWTYPE);
+               if (template == null) {
+                       return null;
+               }
+
+               IJavaProject project = cu.getJavaProject();
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), project, lineDelimiter);
+               context.setCompilationUnitVariables(cu);
+               context.setVariable(CodeTemplateContextType.PACKAGE_DECLARATION,
+                               packDecl);
+               context.setVariable(CodeTemplateContextType.TYPE_COMMENT,
+                               typeComment != null ? typeComment : ""); //$NON-NLS-1$
+               context.setVariable(CodeTemplateContextType.TYPE_DECLARATION,
+                               typeContent);
+               context.setVariable(CodeTemplateContextType.TYPENAME, Signature
+                               .getQualifier(cu.getElementName()));
+               return evaluateTemplate(context, template);
+       }
+
+       /*
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getTypeComment(ICompilationUnit,
+        *      String, String)
+        */
+       public static String getTypeComment(ICompilationUnit cu,
+                       String typeQualifiedName, String lineDelim) throws CoreException {
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(
+                                               CodeTemplateContextType.TYPECOMMENT);
+               if (template == null) {
+                       return null;
+               }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), cu.getJavaProject(), lineDelim);
+               context.setCompilationUnitVariables(cu);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, Signature
+                               .getQualifier(typeQualifiedName));
+               context.setVariable(CodeTemplateContextType.TYPENAME, Signature
+                               .getSimpleName(typeQualifiedName));
+               return evaluateTemplate(context, template);
+       }
+
+       // private static String[] getParameterTypesQualifiedNames(IMethodBinding
+       // binding) {
+       // ITypeBinding[] typeBindings= binding.getParameterTypes();
+       // String[] result= new String[typeBindings.length];
+       // for (int i= 0; i < result.length; i++) {
+       // result[i]= typeBindings[i].getQualifiedName();
+       // }
+       // return result;
+       // }
+
+       private static String getSeeTag(String declaringClassQualifiedName,
+                       String methodName, String[] parameterTypesQualifiedNames) {
+               StringBuffer buf = new StringBuffer();
+               buf.append("@see "); //$NON-NLS-1$
+               buf.append(declaringClassQualifiedName);
+               buf.append('#');
+               buf.append(methodName);
+               buf.append('(');
+               for (int i = 0; i < parameterTypesQualifiedNames.length; i++) {
+                       if (i > 0) {
+                               buf.append(", "); //$NON-NLS-1$
                        }
-                       return textBuffer.get();
+                       buf.append(parameterTypesQualifiedNames[i]);
                }
+               buf.append(')');
+               return buf.toString();
+       }
 
-               public static String getFieldComment(ICompilationUnit cu, String typeName, String fieldName, String lineDelimiter) throws CoreException {
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(CodeTemplateContextType.FIELDCOMMENT);
-                       if (template == null) {
-                               return null;
+       private static String getSeeTag(IMethod overridden)
+                       throws JavaModelException {
+               IType declaringType = overridden.getDeclaringType();
+               StringBuffer buf = new StringBuffer();
+               buf.append("@see "); //$NON-NLS-1$
+               buf.append(declaringType.getFullyQualifiedName('.'));
+               buf.append('#');
+               buf.append(overridden.getElementName());
+               buf.append('(');
+               String[] paramTypes = overridden.getParameterTypes();
+               for (int i = 0; i < paramTypes.length; i++) {
+                       if (i > 0) {
+                               buf.append(", "); //$NON-NLS-1$
                        }
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelimiter);
-                       context.setCompilationUnitVariables(cu);
-                       context.setVariable(CodeTemplateContextType.FIELD_TYPE, typeName);
-                       context.setVariable(CodeTemplateContextType.FIELD, fieldName);
-                       
-                       return evaluateTemplate(context, template);
-               }       
-               
-               
-               /**
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getSetterComment(ICompilationUnit, String, String, String, String, String, String, String)
-                */
-               public static String getSetterComment(ICompilationUnit cu, String typeName, String methodName, String fieldName, String fieldType, String paramName, String bareFieldName, String lineDelimiter) throws CoreException {
-                       String templateName= CodeTemplateContextType.SETTERCOMMENT;
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-                       if (template == null) {
-                               return null;
+                       String curr = paramTypes[i];
+                       buf.append(JavaModelUtil.getResolvedTypeName(curr, declaringType));
+                       int arrayCount = Signature.getArrayCount(curr);
+                       while (arrayCount > 0) {
+                               buf.append("[]"); //$NON-NLS-1$
+                               arrayCount--;
                        }
-                       
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelimiter);
-                       context.setCompilationUnitVariables(cu);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, methodName);
-                       context.setVariable(CodeTemplateContextType.FIELD, fieldName);
-                       context.setVariable(CodeTemplateContextType.FIELD_TYPE, fieldType);
-                       context.setVariable(CodeTemplateContextType.BARE_FIELD_NAME, bareFieldName);
-                       context.setVariable(CodeTemplateContextType.PARAM, paramName);
-
-                       return evaluateTemplate(context, template);
-               }       
-               
-               /**
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getGetterComment(ICompilationUnit, String, String, String, String, String, String)
-                */
-               public static String getGetterComment(ICompilationUnit cu, String typeName, String methodName, String fieldName, String fieldType, String bareFieldName, String lineDelimiter) throws CoreException {
-                       String templateName= CodeTemplateContextType.GETTERCOMMENT;
-                       Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-                       if (template == null) {
-                               return null;
-                       }               
-                       CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelimiter);
-                       context.setCompilationUnitVariables(cu);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
-                       context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, methodName);
-                       context.setVariable(CodeTemplateContextType.FIELD, fieldName);
-                       context.setVariable(CodeTemplateContextType.FIELD_TYPE, fieldType);
-                       context.setVariable(CodeTemplateContextType.BARE_FIELD_NAME, bareFieldName);
-
-                       return evaluateTemplate(context, template);
                }
-               
-               public static String evaluateTemplate(CodeTemplateContext context, Template template) throws CoreException {
-                       TemplateBuffer buffer;
+               buf.append(')');
+               return buf.toString();
+       }
+
+       /**
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(IMethod,IMethod,String)
+        */
+       public static String getMethodComment(IMethod method, IMethod overridden,
+                       String lineDelimiter) throws CoreException {
+               String retType = method.isConstructor() ? null : method.getReturnType();
+               String[] paramNames = method.getParameterNames();
+
+               return getMethodComment(method.getCompilationUnit(), method
+                               .getDeclaringType().getElementName(), method.getElementName(),
+                               paramNames, method.getExceptionTypes(), retType, overridden,
+                               lineDelimiter);
+       }
+
+       /**
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(ICompilationUnit,
+        *      String, String, String[], String[], String, IMethod, String)
+        */
+       public static String getMethodComment(ICompilationUnit cu, String typeName,
+                       String methodName, String[] paramNames, String[] excTypeSig,
+                       String retTypeSig, IMethod overridden, String lineDelimiter)
+                       throws CoreException {
+               String templateName = CodeTemplateContextType.METHODCOMMENT;
+               if (retTypeSig == null) {
+                       templateName = CodeTemplateContextType.CONSTRUCTORCOMMENT;
+               } else if (overridden != null) {
+                       templateName = CodeTemplateContextType.OVERRIDECOMMENT;
+               }
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(templateName);
+               if (template == null) {
+                       return null;
+               }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), cu.getJavaProject(), lineDelimiter);
+               context.setCompilationUnitVariables(cu);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+                               methodName);
+
+               if (retTypeSig != null) {
+                       context.setVariable(CodeTemplateContextType.RETURN_TYPE, Signature
+                                       .toString(retTypeSig));
+               }
+               if (overridden != null) {
+                       context.setVariable(CodeTemplateContextType.SEE_TAG,
+                                       getSeeTag(overridden));
+               }
+               TemplateBuffer buffer;
+               try {
+                       buffer = context.evaluate(template);
+               } catch (BadLocationException e) {
+                       throw new CoreException(Status.CANCEL_STATUS);
+               } catch (TemplateException e) {
+                       throw new CoreException(Status.CANCEL_STATUS);
+               }
+               if (buffer == null) {
+                       return null;
+               }
+
+               String str = buffer.getString();
+               if (Strings.containsOnlyWhitespaces(str)) {
+                       return null;
+               }
+               TemplateVariable position = findTagVariable(buffer); // look if
+                                                                                                                               // Javadoc tags
+                                                                                                                               // have to be
+                                                                                                                               // added
+               if (position == null) {
+                       return str;
+               }
+
+               IDocument textBuffer = new Document(str);
+               String[] exceptionNames = new String[excTypeSig.length];
+               for (int i = 0; i < excTypeSig.length; i++) {
+                       exceptionNames[i] = Signature.toString(excTypeSig[i]);
+               }
+               String returnType = retTypeSig != null ? Signature.toString(retTypeSig)
+                               : null;
+               int[] tagOffsets = position.getOffsets();
+               for (int i = tagOffsets.length - 1; i >= 0; i--) { // from last to
+                                                                                                                       // first
                        try {
-                               buffer= context.evaluate(template);
+                               insertTag(textBuffer, tagOffsets[i], position.getLength(),
+                                               paramNames, exceptionNames, returnType, false,
+                                               lineDelimiter);
                        } catch (BadLocationException e) {
-                               throw new CoreException(Status.CANCEL_STATUS);
-                       } catch (TemplateException e) {
-                               throw new CoreException(Status.CANCEL_STATUS);
+                               throw new CoreException(PHPUIStatus.createError(IStatus.ERROR,
+                                               e));
                        }
-                       if (buffer == null)
-                               return null;
-                       String str= buffer.getString();
-                       if (Strings.containsOnlyWhitespaces(str)) {
-                               return null;
-                       }
-                       return str;
                }
+               return textBuffer.get();
+       }
 
-               /**
-                * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(ICompilationUnit, String, MethodDeclaration, IMethodBinding, String)
-                */
-//             public static String getMethodComment(ICompilationUnit cu, String typeName, IMethodBinding overridden, String lineDelimiter) throws CoreException {
-//                     if (overridden != null) {
-//                             String declaringClassQualifiedName= overridden.getDeclaringClass().getQualifiedName();
-//                             String[] parameterTypesQualifiedNames= getParameterTypesQualifiedNames(overridden);                     
-//                             return getMethodComment(cu, typeName, decl, true, overridden.isDeprecated(), declaringClassQualifiedName, parameterTypesQualifiedNames, lineDelimiter);
-//                     } else {
-//                             return getMethodComment(cu, typeName, decl, false, false, null, null, lineDelimiter);
-//                     }
-//             }
-               
-               /**
-                * Returns the comment for a method using the comment code templates.
-                * <code>null</code> is returned if the template is empty.
-                * @param cu The compilation unit to which the method belongs
-                * @param typeName Name of the type to which the method belongs.
-                * @param decl The AST MethodDeclaration node that will be added as new
-                * method.
-                * @param isOverridden <code>true</code> iff decl overrides another method
-                * @param isDeprecated <code>true</code> iff the method that decl overrides is deprecated.
-                * Note: it must not be <code>true</code> if isOverridden is <code>false</code>.
-                * @param declaringClassQualifiedName Fully qualified name of the type in which the overriddden 
-                * method (if any exists) in declared. If isOverridden is <code>false</code>, this is ignored.
-                * @param parameterTypesQualifiedNames Fully qualified names of parameter types of the type in which the overriddden 
-                * method (if any exists) in declared. If isOverridden is <code>false</code>, this is ignored.
-                * @return String Returns the method comment or <code>null</code> if the
-                * configured template is empty. 
-                * (formatting required)
-                * @throws CoreException
-                */
-//             public static String getMethodComment(ICompilationUnit cu, String typeName, MethodDeclaration decl, boolean isOverridden, boolean isDeprecated, String declaringClassQualifiedName, String[] parameterTypesQualifiedNames, String lineDelimiter) throws CoreException {
-//                     String templateName= CodeTemplateContextType.METHODCOMMENT;
-//                     if (decl.isConstructor()) {
-//                             templateName= CodeTemplateContextType.CONSTRUCTORCOMMENT;
-//                     } else if (isOverridden) {
-//                             templateName= CodeTemplateContextType.OVERRIDECOMMENT;
-//                     }
-//                     Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
-//                     if (template == null) {
-//                             return null;
-//                     }               
-//                     CodeTemplateContext context= new CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(), lineDelimiter);
-//                     context.setCompilationUnitVariables(cu);
-//                     context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
-//                     context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD, decl.getName().getIdentifier());
-//                     if (!decl.isConstructor()) {
-//                             context.setVariable(CodeTemplateContextType.RETURN_TYPE, ASTNodes.asString(decl.getReturnType()));
-//                     }
-//                     if (isOverridden) {
-//                             String methodName= decl.getName().getIdentifier();
-//                             context.setVariable(CodeTemplateContextType.SEE_TAG, getSeeTag(declaringClassQualifiedName, methodName, parameterTypesQualifiedNames));
-//                     }
-//                     
-//                     TemplateBuffer buffer;
-//                     try {
-//                             buffer= context.evaluate(template);
-//                     } catch (BadLocationException e) {
-//                             throw new CoreException(Status.CANCEL_STATUS);
-//                     } catch (TemplateException e) {
-//                             throw new CoreException(Status.CANCEL_STATUS);
-//                     }
-//                     if (buffer == null)
-//                             return null;
-//                     String str= buffer.getString();
-//                     if (Strings.containsOnlyWhitespaces(str)) {
-//                             return null;
-//                     }
-//                     TemplateVariable position= findTagVariable(buffer);  // look if Javadoc tags have to be added
-//                     if (position == null) {
-//                             return str;
-//                     }
-//                             
-//                     IDocument textBuffer= new Document(str);
-//                     List params= decl.parameters();
-//                     String[] paramNames= new String[params.size()];
-//                     for (int i= 0; i < params.size(); i++) {
-//                             SingleVariableDeclaration elem= (SingleVariableDeclaration) params.get(i);
-//                             paramNames[i]= elem.getName().getIdentifier();
-//                     }
-//                     List exceptions= decl.thrownExceptions();
-//                     String[] exceptionNames= new String[exceptions.size()];
-//                     for (int i= 0; i < exceptions.size(); i++) {
-//                             exceptionNames[i]= ASTNodes.getSimpleNameIdentifier((Name) exceptions.get(i));
-//                     }
-//                     String returnType= !decl.isConstructor() ? ASTNodes.asString(decl.getReturnType()) : null;
-//                     int[] tagOffsets= position.getOffsets();
-//                     for (int i= tagOffsets.length - 1; i >= 0; i--) { // from last to first
-//                             try {
-//                                     insertTag(textBuffer, tagOffsets[i], position.getLength(), paramNames, exceptionNames, returnType, isDeprecated, lineDelimiter);
-//                             } catch (BadLocationException e) {
-//                                     throw new CoreException(PHPUIStatus.createError(IStatus.ERROR, e));
-//                             }
-//                     }
-//                     return textBuffer.get();
-//             }
-               
-               private static TemplateVariable findTagVariable(TemplateBuffer buffer) {
-                       TemplateVariable[] positions= buffer.getVariables();
-                       for (int i= 0; i < positions.length; i++) {
-                               TemplateVariable curr= positions[i];
-                               if (CodeTemplateContextType.TAGS.equals(curr.getType())) {
-                                       return curr;
-                               }
-                       }
-                       return null;            
-               }       
-               
-               private static void insertTag(IDocument textBuffer, int offset, int length, String[] paramNames, String[] exceptionNames, String returnType, boolean isDeprecated, String lineDelimiter) throws BadLocationException {
-                       IRegion region= textBuffer.getLineInformationOfOffset(offset);
-                       if (region == null) {
-                               return;
+       public static String getFieldComment(ICompilationUnit cu, String typeName,
+                       String fieldName, String lineDelimiter) throws CoreException {
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(
+                                               CodeTemplateContextType.FIELDCOMMENT);
+               if (template == null) {
+                       return null;
+               }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), cu.getJavaProject(), lineDelimiter);
+               context.setCompilationUnitVariables(cu);
+               context.setVariable(CodeTemplateContextType.FIELD_TYPE, typeName);
+               context.setVariable(CodeTemplateContextType.FIELD, fieldName);
+
+               return evaluateTemplate(context, template);
+       }
+
+       /**
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getSetterComment(ICompilationUnit,
+        *      String, String, String, String, String, String, String)
+        */
+       public static String getSetterComment(ICompilationUnit cu, String typeName,
+                       String methodName, String fieldName, String fieldType,
+                       String paramName, String bareFieldName, String lineDelimiter)
+                       throws CoreException {
+               String templateName = CodeTemplateContextType.SETTERCOMMENT;
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(templateName);
+               if (template == null) {
+                       return null;
+               }
+
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), cu.getJavaProject(), lineDelimiter);
+               context.setCompilationUnitVariables(cu);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+                               methodName);
+               context.setVariable(CodeTemplateContextType.FIELD, fieldName);
+               context.setVariable(CodeTemplateContextType.FIELD_TYPE, fieldType);
+               context.setVariable(CodeTemplateContextType.BARE_FIELD_NAME,
+                               bareFieldName);
+               context.setVariable(CodeTemplateContextType.PARAM, paramName);
+
+               return evaluateTemplate(context, template);
+       }
+
+       /**
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getGetterComment(ICompilationUnit,
+        *      String, String, String, String, String, String)
+        */
+       public static String getGetterComment(ICompilationUnit cu, String typeName,
+                       String methodName, String fieldName, String fieldType,
+                       String bareFieldName, String lineDelimiter) throws CoreException {
+               String templateName = CodeTemplateContextType.GETTERCOMMENT;
+               Template template = PHPeclipsePlugin.getDefault()
+                               .getCodeTemplateStore().findTemplate(templateName);
+               if (template == null) {
+                       return null;
+               }
+               CodeTemplateContext context = new CodeTemplateContext(template
+                               .getContextTypeId(), cu.getJavaProject(), lineDelimiter);
+               context.setCompilationUnitVariables(cu);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
+               context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+                               methodName);
+               context.setVariable(CodeTemplateContextType.FIELD, fieldName);
+               context.setVariable(CodeTemplateContextType.FIELD_TYPE, fieldType);
+               context.setVariable(CodeTemplateContextType.BARE_FIELD_NAME,
+                               bareFieldName);
+
+               return evaluateTemplate(context, template);
+       }
+
+       public static String evaluateTemplate(CodeTemplateContext context,
+                       Template template) throws CoreException {
+               TemplateBuffer buffer;
+               try {
+                       buffer = context.evaluate(template);
+               } catch (BadLocationException e) {
+                       throw new CoreException(Status.CANCEL_STATUS);
+               } catch (TemplateException e) {
+                       throw new CoreException(Status.CANCEL_STATUS);
+               }
+               if (buffer == null)
+                       return null;
+               String str = buffer.getString();
+               if (Strings.containsOnlyWhitespaces(str)) {
+                       return null;
+               }
+               return str;
+       }
+
+       /**
+        * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(ICompilationUnit,
+        *      String, MethodDeclaration, IMethodBinding, String)
+        */
+       // public static String getMethodComment(ICompilationUnit cu, String
+       // typeName, IMethodBinding overridden, String lineDelimiter) throws
+       // CoreException {
+       // if (overridden != null) {
+       // String declaringClassQualifiedName=
+       // overridden.getDeclaringClass().getQualifiedName();
+       // String[] parameterTypesQualifiedNames=
+       // getParameterTypesQualifiedNames(overridden);
+       // return getMethodComment(cu, typeName, decl, true,
+       // overridden.isDeprecated(), declaringClassQualifiedName,
+       // parameterTypesQualifiedNames, lineDelimiter);
+       // } else {
+       // return getMethodComment(cu, typeName, decl, false, false, null, null,
+       // lineDelimiter);
+       // }
+       // }
+       /**
+        * Returns the comment for a method using the comment code templates.
+        * <code>null</code> is returned if the template is empty.
+        * 
+        * @param cu
+        *            The compilation unit to which the method belongs
+        * @param typeName
+        *            Name of the type to which the method belongs.
+        * @param decl
+        *            The AST MethodDeclaration node that will be added as new
+        *            method.
+        * @param isOverridden
+        *            <code>true</code> iff decl overrides another method
+        * @param isDeprecated
+        *            <code>true</code> iff the method that decl overrides is
+        *            deprecated. Note: it must not be <code>true</code> if
+        *            isOverridden is <code>false</code>.
+        * @param declaringClassQualifiedName
+        *            Fully qualified name of the type in which the overriddden
+        *            method (if any exists) in declared. If isOverridden is
+        *            <code>false</code>, this is ignored.
+        * @param parameterTypesQualifiedNames
+        *            Fully qualified names of parameter types of the type in which
+        *            the overriddden method (if any exists) in declared. If
+        *            isOverridden is <code>false</code>, this is ignored.
+        * @return String Returns the method comment or <code>null</code> if the
+        *         configured template is empty. (formatting required)
+        * @throws CoreException
+        */
+       // public static String getMethodComment(ICompilationUnit cu, String
+       // typeName, MethodDeclaration decl, boolean isOverridden, boolean
+       // isDeprecated, String declaringClassQualifiedName, String[]
+       // parameterTypesQualifiedNames, String lineDelimiter) throws CoreException
+       // {
+       // String templateName= CodeTemplateContextType.METHODCOMMENT;
+       // if (decl.isConstructor()) {
+       // templateName= CodeTemplateContextType.CONSTRUCTORCOMMENT;
+       // } else if (isOverridden) {
+       // templateName= CodeTemplateContextType.OVERRIDECOMMENT;
+       // }
+       // Template template=
+       // PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(templateName);
+       // if (template == null) {
+       // return null;
+       // }
+       // CodeTemplateContext context= new
+       // CodeTemplateContext(template.getContextTypeId(), cu.getJavaProject(),
+       // lineDelimiter);
+       // context.setCompilationUnitVariables(cu);
+       // context.setVariable(CodeTemplateContextType.ENCLOSING_TYPE, typeName);
+       // context.setVariable(CodeTemplateContextType.ENCLOSING_METHOD,
+       // decl.getName().getIdentifier());
+       // if (!decl.isConstructor()) {
+       // context.setVariable(CodeTemplateContextType.RETURN_TYPE,
+       // ASTNodes.asString(decl.getReturnType()));
+       // }
+       // if (isOverridden) {
+       // String methodName= decl.getName().getIdentifier();
+       // context.setVariable(CodeTemplateContextType.SEE_TAG,
+       // getSeeTag(declaringClassQualifiedName, methodName,
+       // parameterTypesQualifiedNames));
+       // }
+       //                      
+       // TemplateBuffer buffer;
+       // try {
+       // buffer= context.evaluate(template);
+       // } catch (BadLocationException e) {
+       // throw new CoreException(Status.CANCEL_STATUS);
+       // } catch (TemplateException e) {
+       // throw new CoreException(Status.CANCEL_STATUS);
+       // }
+       // if (buffer == null)
+       // return null;
+       // String str= buffer.getString();
+       // if (Strings.containsOnlyWhitespaces(str)) {
+       // return null;
+       // }
+       // TemplateVariable position= findTagVariable(buffer); // look if Javadoc
+       // tags have to be added
+       // if (position == null) {
+       // return str;
+       // }
+       //                              
+       // IDocument textBuffer= new Document(str);
+       // List params= decl.parameters();
+       // String[] paramNames= new String[params.size()];
+       // for (int i= 0; i < params.size(); i++) {
+       // SingleVariableDeclaration elem= (SingleVariableDeclaration)
+       // params.get(i);
+       // paramNames[i]= elem.getName().getIdentifier();
+       // }
+       // List exceptions= decl.thrownExceptions();
+       // String[] exceptionNames= new String[exceptions.size()];
+       // for (int i= 0; i < exceptions.size(); i++) {
+       // exceptionNames[i]= ASTNodes.getSimpleNameIdentifier((Name)
+       // exceptions.get(i));
+       // }
+       // String returnType= !decl.isConstructor() ?
+       // ASTNodes.asString(decl.getReturnType()) : null;
+       // int[] tagOffsets= position.getOffsets();
+       // for (int i= tagOffsets.length - 1; i >= 0; i--) { // from last to first
+       // try {
+       // insertTag(textBuffer, tagOffsets[i], position.getLength(), paramNames,
+       // exceptionNames, returnType, isDeprecated, lineDelimiter);
+       // } catch (BadLocationException e) {
+       // throw new CoreException(PHPUIStatus.createError(IStatus.ERROR, e));
+       // }
+       // }
+       // return textBuffer.get();
+       // }
+       private static TemplateVariable findTagVariable(TemplateBuffer buffer) {
+               TemplateVariable[] positions = buffer.getVariables();
+               for (int i = 0; i < positions.length; i++) {
+                       TemplateVariable curr = positions[i];
+                       if (CodeTemplateContextType.TAGS.equals(curr.getType())) {
+                               return curr;
                        }
-                       String lineStart= textBuffer.get(region.getOffset(), offset - region.getOffset());
-                       
-                       StringBuffer buf= new StringBuffer();
-                       for (int i= 0; i < paramNames.length; i++) {
-                               if (buf.length() > 0) {
-                                       buf.append(lineDelimiter); buf.append(lineStart);
-                               }
-                               buf.append("@param "); buf.append(paramNames[i]); //$NON-NLS-1$
+               }
+               return null;
+       }
+
+       private static void insertTag(IDocument textBuffer, int offset, int length,
+                       String[] paramNames, String[] exceptionNames, String returnType,
+                       boolean isDeprecated, String lineDelimiter)
+                       throws BadLocationException {
+               IRegion region = textBuffer.getLineInformationOfOffset(offset);
+               if (region == null) {
+                       return;
+               }
+               String lineStart = textBuffer.get(region.getOffset(), offset
+                               - region.getOffset());
+
+               StringBuffer buf = new StringBuffer();
+               for (int i = 0; i < paramNames.length; i++) {
+                       if (buf.length() > 0) {
+                               buf.append(lineDelimiter);
+                               buf.append(lineStart);
                        }
-                       if (returnType != null && !returnType.equals("void")) { //$NON-NLS-1$
-                               if (buf.length() > 0) {
-                                       buf.append(lineDelimiter); buf.append(lineStart);
-                               }                       
-                               buf.append("@return"); //$NON-NLS-1$
+                       buf.append("@param ");buf.append(paramNames[i]); //$NON-NLS-1$
+               }
+               if (returnType != null && !returnType.equals("void")) { //$NON-NLS-1$
+                       if (buf.length() > 0) {
+                               buf.append(lineDelimiter);
+                               buf.append(lineStart);
                        }
-                       if (exceptionNames != null) {
-                               for (int i= 0; i < exceptionNames.length; i++) {
-                                       if (buf.length() > 0) {
-                                               buf.append(lineDelimiter); buf.append(lineStart);
-                                       }
-                                       buf.append("@throws "); buf.append(exceptionNames[i]); //$NON-NLS-1$
-                               }
-                       }               
-                       if (isDeprecated) {
+                       buf.append("@return"); //$NON-NLS-1$
+               }
+               if (exceptionNames != null) {
+                       for (int i = 0; i < exceptionNames.length; i++) {
                                if (buf.length() > 0) {
-                                       buf.append(lineDelimiter); buf.append(lineStart);
+                                       buf.append(lineDelimiter);
+                                       buf.append(lineStart);
                                }
-                               buf.append("@deprecated"); //$NON-NLS-1$
+                               buf.append("@throws ");buf.append(exceptionNames[i]); //$NON-NLS-1$
                        }
-                       textBuffer.replace(offset, length, buf.toString());
                }
-               
-               private static boolean isPrimitiveType(String typeName) {
-                       char first= Signature.getElementType(typeName).charAt(0);
-                       return (first != Signature.C_RESOLVED && first != Signature.C_UNRESOLVED);
+               if (isDeprecated) {
+                       if (buf.length() > 0) {
+                               buf.append(lineDelimiter);
+                               buf.append(lineStart);
+                       }
+                       buf.append("@deprecated"); //$NON-NLS-1$
                }
+               textBuffer.replace(offset, length, buf.toString());
+       }
 
-               private static String resolveAndAdd(String refTypeSig, IType declaringType) throws JavaModelException {//, IImportsStructure imports) throws JavaModelException {
-                       String resolvedTypeName= JavaModelUtil.getResolvedTypeName(refTypeSig, declaringType);
-                       if (resolvedTypeName != null) {
-                               StringBuffer buf= new StringBuffer();
-//                             if (imports != null) {
-//                                     buf.append(imports.addImport(resolvedTypeName));
-//                             } else {
-                                       buf.append(resolvedTypeName);
-//                             }
-                               int arrayCount= Signature.getArrayCount(refTypeSig);
-                               for (int i= 0; i < arrayCount; i++) {
-                                       buf.append("[]"); //$NON-NLS-1$
-                               }
-                               return buf.toString();
+       private static boolean isPrimitiveType(String typeName) {
+               char first = Signature.getElementType(typeName).charAt(0);
+               return (first != Signature.C_RESOLVED && first != Signature.C_UNRESOLVED);
+       }
+
+       private static String resolveAndAdd(String refTypeSig, IType declaringType)
+                       throws JavaModelException {// , IImportsStructure imports) throws
+                                                                               // JavaModelException {
+               String resolvedTypeName = JavaModelUtil.getResolvedTypeName(refTypeSig,
+                               declaringType);
+               if (resolvedTypeName != null) {
+                       StringBuffer buf = new StringBuffer();
+                       // if (imports != null) {
+                       // buf.append(imports.addImport(resolvedTypeName));
+                       // } else {
+                       buf.append(resolvedTypeName);
+                       // }
+                       int arrayCount = Signature.getArrayCount(refTypeSig);
+                       for (int i = 0; i < arrayCount; i++) {
+                               buf.append("[]"); //$NON-NLS-1$
                        }
-                       return Signature.toString(refTypeSig);
+                       return buf.toString();
                }
-                       
-               /**
-                * Finds a method in a list of methods.
-                * @return The found method or null, if nothing found
-                */
-               private static IMethod findMethod(IMethod method, List allMethods) throws JavaModelException {
-                       String name= method.getElementName();
-                       String[] paramTypes= method.getParameterTypes();
-                       boolean isConstructor= method.isConstructor();
-
-                       for (int i= allMethods.size() - 1; i >= 0; i--) {
-                               IMethod curr= (IMethod) allMethods.get(i);
-                               if (JavaModelUtil.isSameMethodSignature(name, paramTypes, isConstructor, curr)) {
-                                       return curr;
-                               }                       
+               return Signature.toString(refTypeSig);
+       }
+
+       /**
+        * Finds a method in a list of methods.
+        * 
+        * @return The found method or null, if nothing found
+        */
+       private static IMethod findMethod(IMethod method, List allMethods)
+                       throws JavaModelException {
+               String name = method.getElementName();
+               String[] paramTypes = method.getParameterTypes();
+               boolean isConstructor = method.isConstructor();
+
+               for (int i = allMethods.size() - 1; i >= 0; i--) {
+                       IMethod curr = (IMethod) allMethods.get(i);
+                       if (JavaModelUtil.isSameMethodSignature(name, paramTypes,
+                                       isConstructor, curr)) {
+                               return curr;
                        }
-                       return null;
                }
+               return null;
+       }
 
-               /**
-                * Creates needed constructors for a type.
-                * @param type The type to create constructors for
-                * @param supertype The type's super type
-                * @param settings Options for comment generation
-                * @param imports Required imports are added to the import structure. Structure can be <code>null</code>, types are qualified then.
-                * @return Returns the generated stubs or <code>null</code> if the creation has been canceled
-                */
-//             public static String[] evalConstructors(IType type, IType supertype, IImportsStructure imports) throws CoreException {
-//                     IMethod[] superMethods= supertype.getMethods();
-//                     String typeName= type.getElementName();
-//                     ICompilationUnit cu= type.getCompilationUnit();
-//                     IMethod[] methods= type.getMethods();
-//                     GenStubSettings genStubSettings= new GenStubSettings(settings);
-//                     genStubSettings.callSuper= true;
-//                     
-//                     ArrayList newMethods= new ArrayList(superMethods.length);
-//                     for (int i= 0; i < superMethods.length; i++) {
-//                             IMethod curr= superMethods[i];
-//                             if (curr.isConstructor() && (JavaModelUtil.isVisibleInHierarchy(curr, type.getPackageFragment()))) {
-//                                     if (JavaModelUtil.findMethod(typeName, curr.getParameterTypes(), true, methods) == null) {
-//                                             genStubSettings.methodModifiers= Flags.AccPublic | JdtFlags.clearAccessModifiers(curr.getFlags());
-//                                             String newStub= genStub(cu, typeName, curr, curr.getDeclaringType(), genStubSettings, imports);
-//                                             newMethods.add(newStub);
-//                                     }
-//                             }
-//                     }
-//                     return (String[]) newMethods.toArray(new String[newMethods.size()]);
-//             }
-               
-               /**
-                * Returns all unimplemented constructors of a type including root type default 
-                * constructors if there are no other superclass constructors unimplemented. 
-                * @param type The type to create constructors for
-                * @return Returns the generated stubs or <code>null</code> if the creation has been canceled
-                */
-//             public static IMethod[] getOverridableConstructors(IType type) throws CoreException {
-//                     List constructorMethods= new ArrayList();
-//                     ITypeHierarchy hierarchy= type.newSupertypeHierarchy(null);                             
-//                     IType supertype= hierarchy.getSuperclass(type);
-//                     if (supertype == null)
-//                             return (new IMethod[0]);
-//
-//                     IMethod[] superMethods= supertype.getMethods();
-//                     boolean constuctorFound= false;
-//                     String typeName= type.getElementName();
-//                     IMethod[] methods= type.getMethods();
-//                     for (int i= 0; i < superMethods.length; i++) {
-//                                     IMethod curr= superMethods[i];
-//                                     if (curr.isConstructor())  {
-//                                             constuctorFound= true;
-//                                             if (JavaModelUtil.isVisibleInHierarchy(curr, type.getPackageFragment()))
-//                                                     if (JavaModelUtil.findMethod(typeName, curr.getParameterTypes(), true, methods) == null)
-//                                                             constructorMethods.add(curr);
-//                     
-//                                     }
-//                     }
-//                     
-//                     // http://bugs.eclipse.org/bugs/show_bug.cgi?id=38487
-//                     if (!constuctorFound)  {
-//                             IType objectType= type.getJavaProject().findType("java.lang.Object"); //$NON-NLS-1$
-//                             IMethod curr= objectType.getMethod("Object", EMPTY);  //$NON-NLS-1$
-//                             if (JavaModelUtil.findMethod(typeName, curr.getParameterTypes(), true, methods) == null) {
-//                                     constructorMethods.add(curr);
-//                             }
-//                     }
-//                     return (IMethod[]) constructorMethods.toArray(new IMethod[constructorMethods.size()]);
-//             }
-
-               /**
-                * Returns all overridable methods of a type
-                * @param type The type to search the overridable methods for 
-                * @param hierarchy The type hierarchy of the type
-                * @param isSubType If set, the result can include methods of the passed type, if not only methods from super
-                * types are considered
-                * @return Returns the all methods that can be overridden
-                */
-//             public static IMethod[] getOverridableMethods(IType type, ITypeHierarchy hierarchy, boolean isSubType) throws JavaModelException {
-//                     List allMethods= new ArrayList();
-//
-//                     IMethod[] typeMethods= type.getMethods();
-//                     for (int i= 0; i < typeMethods.length; i++) {
-//                             IMethod curr= typeMethods[i];
-//                             if (!curr.isConstructor() && !Flags.isStatic(curr.getFlags()) && !Flags.isPrivate(curr.getFlags())) {
-//                                     allMethods.add(curr);
-//                             }
-//                     }
-//
-//                     IType[] superTypes= hierarchy.getAllSuperclasses(type);
-//                     for (int i= 0; i < superTypes.length; i++) {
-//                             IMethod[] methods= superTypes[i].getMethods();
-//                             for (int k= 0; k < methods.length; k++) {
-//                                     IMethod curr= methods[k];
-//                                     if (!curr.isConstructor() && !Flags.isStatic(curr.getFlags()) && !Flags.isPrivate(curr.getFlags())) {
-//                                             if (findMethod(curr, allMethods) == null) {
-//                                                     allMethods.add(curr);
-//                                             }
-//                                     }
-//                             }
-//                     }
-//
-//                     IType[] superInterfaces= hierarchy.getAllSuperInterfaces(type);
-//                     for (int i= 0; i < superInterfaces.length; i++) {
-//                             IMethod[] methods= superInterfaces[i].getMethods();
-//                             for (int k= 0; k < methods.length; k++) {
-//                                     IMethod curr= methods[k];
-//
-//                                     // binary interfaces can contain static initializers (variable intializations)
-//                                     // 1G4CKUS
-//                                     if (!Flags.isStatic(curr.getFlags())) {
-//                                             IMethod impl= findMethod(curr, allMethods);
-//                                             if (impl == null || !JavaModelUtil.isVisibleInHierarchy(impl, type.getPackageFragment()) || prefereInterfaceMethod(hierarchy, curr, impl)) {
-//                                                     if (impl != null) {
-//                                                             allMethods.remove(impl);
-//                                                     }
-//                                                     // implement an interface method when it does not exist in the hierarchy
-//                                                     // or when it throws less exceptions that the implemented
-//                                                     allMethods.add(curr);
-//                                             }
-//                                     }
-//                             }
-//                     }
-//                     if (!isSubType) {
-//                             allMethods.removeAll(Arrays.asList(typeMethods));
-//                     }
-//                     // remove finals
-//                     for (int i= allMethods.size() - 1; i >= 0; i--) {
-//                             IMethod curr= (IMethod) allMethods.get(i);
-//                             if (Flags.isFinal(curr.getFlags())) {
-//                                     allMethods.remove(i);
-//                             }
-//                     }
-//                     return (IMethod[]) allMethods.toArray(new IMethod[allMethods.size()]);
-//             }
-               
-//             private static boolean prefereInterfaceMethod(ITypeHierarchy hierarchy, IMethod interfaceMethod, IMethod curr) throws JavaModelException {
-//                     if (Flags.isFinal(curr.getFlags())) {
-//                             return false;
-//                     }
-//                     IType interfaceType= interfaceMethod.getDeclaringType();
-//                     IType[] interfaces= hierarchy.getAllSuperInterfaces(curr.getDeclaringType());
-//                     for (int i= 0; i < interfaces.length; i++) {
-//                             if (interfaces[i] == interfaceType) {
-//                                     return false;
-//                             }
-//                     }
-//                     return curr.getExceptionTypes().length > interfaceMethod.getExceptionTypes().length;
-//             }
-               
-               /**
-                * Generate method stubs for methods to overrride
-                * @param type The type to search the overridable methods for 
-                * @param hierarchy The type hierarchy of the type
-                * @param methodsToImplement Methods to override or implement
-                * @param settings Options for comment generation
-                * @param imports Required imports are added to the import structure. Structure can be <code>null</code>, types are qualified then.
-                * @return Returns the generated stubs
-                */
-//             public static String[] genOverrideStubs(IMethod[] methodsToImplement, IType type, ITypeHierarchy hierarchy, CodeGenerationSettings settings, IImportsStructure imports) throws CoreException {
-//                     GenStubSettings genStubSettings= new GenStubSettings(settings);
-//                     genStubSettings.methodOverwrites= true;
-//                     ICompilationUnit cu= type.getCompilationUnit();
-//                     String[] result= new String[methodsToImplement.length];
-//                     for (int i= 0; i < methodsToImplement.length; i++) {
-//                             IMethod curr= methodsToImplement[i];
-//                             IMethod overrides= JavaModelUtil.findMethodImplementationInHierarchy(hierarchy, type, curr.getElementName(), curr.getParameterTypes(), curr.isConstructor());
-//                             if (overrides != null) {
-//                                     genStubSettings.callSuper= true;
-//                                     curr= overrides;
-//                             }
-//                             genStubSettings.methodModifiers= curr.getFlags();
-//                             IMethod desc= JavaModelUtil.findMethodDeclarationInHierarchy(hierarchy, type, curr.getElementName(), curr.getParameterTypes(), curr.isConstructor());
-//                             if (desc == null) {
-//                                     desc= curr;
-//                             }
-//                             result[i]= genStub(cu, type.getElementName(), curr, desc.getDeclaringType(), genStubSettings, imports);
-//                     }
-//                     return result;
-//             }
-               /**
-                * Searches for unimplemented methods of a type.
-                * @param isSubType If set, the evaluation is for a subtype of the given type. If not set, the
-                * evaluation is for the type itself.
-                * @param settings Options for comment generation
-                * @param imports Required imports are added to the import structure. Structure can be <code>null</code>, types are qualified then.
-                * @return Returns the generated stubs or <code>null</code> if the creation has been canceled
-                */
-//             public static String[] evalUnimplementedMethods(IType type, ITypeHierarchy hierarchy, boolean isSubType, CodeGenerationSettings settings, 
-//                             IImportsStructure imports) throws CoreException {
-//                                             
-//                     IMethod[] inheritedMethods= getOverridableMethods(type, hierarchy, isSubType);
-//                     
-//                     List toImplement= new ArrayList();
-//                     for (int i= 0; i < inheritedMethods.length; i++) {
-//                             IMethod curr= inheritedMethods[i];
-//                             if (JdtFlags.isAbstract(curr)) {
-//                                     toImplement.add(curr);
-//                             }
-//                     }
-//                     IMethod[] toImplementArray= (IMethod[]) toImplement.toArray(new IMethod[toImplement.size()]);           
-//                     return genOverrideStubs(toImplementArray, type, hierarchy, settings, imports);
-//             }
-
-               /**
-                * Examines a string and returns the first line delimiter found.
-                */
-               public static String getLineDelimiterUsed(IJavaElement elem) throws JavaModelException {
-                       ICompilationUnit cu= (ICompilationUnit) elem.getAncestor(IJavaElement.COMPILATION_UNIT);
-                       if (cu != null && cu.exists()) {
-                               IBuffer buf= cu.getBuffer();
-                               int length= buf.getLength();
-                               for (int i= 0; i < length; i++) {
-                                       char ch= buf.getChar(i);
-                                       if (ch == SWT.CR) {
-                                               if (i + 1 < length) {
-                                                       if (buf.getChar(i + 1) == SWT.LF) {
-                                                               return "\r\n"; //$NON-NLS-1$
-                                                       }
+       /**
+        * Creates needed constructors for a type.
+        * 
+        * @param type
+        *            The type to create constructors for
+        * @param supertype
+        *            The type's super type
+        * @param settings
+        *            Options for comment generation
+        * @param imports
+        *            Required imports are added to the import structure. Structure
+        *            can be <code>null</code>, types are qualified then.
+        * @return Returns the generated stubs or <code>null</code> if the
+        *         creation has been canceled
+        */
+       // public static String[] evalConstructors(IType type, IType supertype,
+       // IImportsStructure imports) throws CoreException {
+       // IMethod[] superMethods= supertype.getMethods();
+       // String typeName= type.getElementName();
+       // ICompilationUnit cu= type.getCompilationUnit();
+       // IMethod[] methods= type.getMethods();
+       // GenStubSettings genStubSettings= new GenStubSettings(settings);
+       // genStubSettings.callSuper= true;
+       //                      
+       // ArrayList newMethods= new ArrayList(superMethods.length);
+       // for (int i= 0; i < superMethods.length; i++) {
+       // IMethod curr= superMethods[i];
+       // if (curr.isConstructor() && (JavaModelUtil.isVisibleInHierarchy(curr,
+       // type.getPackageFragment()))) {
+       // if (JavaModelUtil.findMethod(typeName, curr.getParameterTypes(), true,
+       // methods) == null) {
+       // genStubSettings.methodModifiers= Flags.AccPublic |
+       // JdtFlags.clearAccessModifiers(curr.getFlags());
+       // String newStub= genStub(cu, typeName, curr, curr.getDeclaringType(),
+       // genStubSettings, imports);
+       // newMethods.add(newStub);
+       // }
+       // }
+       // }
+       // return (String[]) newMethods.toArray(new String[newMethods.size()]);
+       // }
+       /**
+        * Returns all unimplemented constructors of a type including root type
+        * default constructors if there are no other superclass constructors
+        * unimplemented.
+        * 
+        * @param type
+        *            The type to create constructors for
+        * @return Returns the generated stubs or <code>null</code> if the
+        *         creation has been canceled
+        */
+       // public static IMethod[] getOverridableConstructors(IType type) throws
+       // CoreException {
+       // List constructorMethods= new ArrayList();
+       // ITypeHierarchy hierarchy= type.newSupertypeHierarchy(null);
+       // IType supertype= hierarchy.getSuperclass(type);
+       // if (supertype == null)
+       // return (new IMethod[0]);
+       //
+       // IMethod[] superMethods= supertype.getMethods();
+       // boolean constuctorFound= false;
+       // String typeName= type.getElementName();
+       // IMethod[] methods= type.getMethods();
+       // for (int i= 0; i < superMethods.length; i++) {
+       // IMethod curr= superMethods[i];
+       // if (curr.isConstructor()) {
+       // constuctorFound= true;
+       // if (JavaModelUtil.isVisibleInHierarchy(curr, type.getPackageFragment()))
+       // if (JavaModelUtil.findMethod(typeName, curr.getParameterTypes(), true,
+       // methods) == null)
+       // constructorMethods.add(curr);
+       //                      
+       // }
+       // }
+       //                      
+       // // http://bugs.eclipse.org/bugs/show_bug.cgi?id=38487
+       // if (!constuctorFound) {
+       // IType objectType= type.getJavaProject().findType("java.lang.Object");
+       // //$NON-NLS-1$
+       // IMethod curr= objectType.getMethod("Object", EMPTY); //$NON-NLS-1$
+       // if (JavaModelUtil.findMethod(typeName, curr.getParameterTypes(), true,
+       // methods) == null) {
+       // constructorMethods.add(curr);
+       // }
+       // }
+       // return (IMethod[]) constructorMethods.toArray(new
+       // IMethod[constructorMethods.size()]);
+       // }
+       /**
+        * Returns all overridable methods of a type
+        * 
+        * @param type
+        *            The type to search the overridable methods for
+        * @param hierarchy
+        *            The type hierarchy of the type
+        * @param isSubType
+        *            If set, the result can include methods of the passed type, if
+        *            not only methods from super types are considered
+        * @return Returns the all methods that can be overridden
+        */
+       // public static IMethod[] getOverridableMethods(IType type, ITypeHierarchy
+       // hierarchy, boolean isSubType) throws JavaModelException {
+       // List allMethods= new ArrayList();
+       //
+       // IMethod[] typeMethods= type.getMethods();
+       // for (int i= 0; i < typeMethods.length; i++) {
+       // IMethod curr= typeMethods[i];
+       // if (!curr.isConstructor() && !Flags.isStatic(curr.getFlags()) &&
+       // !Flags.isPrivate(curr.getFlags())) {
+       // allMethods.add(curr);
+       // }
+       // }
+       //
+       // IType[] superTypes= hierarchy.getAllSuperclasses(type);
+       // for (int i= 0; i < superTypes.length; i++) {
+       // IMethod[] methods= superTypes[i].getMethods();
+       // for (int k= 0; k < methods.length; k++) {
+       // IMethod curr= methods[k];
+       // if (!curr.isConstructor() && !Flags.isStatic(curr.getFlags()) &&
+       // !Flags.isPrivate(curr.getFlags())) {
+       // if (findMethod(curr, allMethods) == null) {
+       // allMethods.add(curr);
+       // }
+       // }
+       // }
+       // }
+       //
+       // IType[] superInterfaces= hierarchy.getAllSuperInterfaces(type);
+       // for (int i= 0; i < superInterfaces.length; i++) {
+       // IMethod[] methods= superInterfaces[i].getMethods();
+       // for (int k= 0; k < methods.length; k++) {
+       // IMethod curr= methods[k];
+       //
+       // // binary interfaces can contain static initializers (variable
+       // intializations)
+       // // 1G4CKUS
+       // if (!Flags.isStatic(curr.getFlags())) {
+       // IMethod impl= findMethod(curr, allMethods);
+       // if (impl == null || !JavaModelUtil.isVisibleInHierarchy(impl,
+       // type.getPackageFragment()) || prefereInterfaceMethod(hierarchy, curr,
+       // impl)) {
+       // if (impl != null) {
+       // allMethods.remove(impl);
+       // }
+       // // implement an interface method when it does not exist in the hierarchy
+       // // or when it throws less exceptions that the implemented
+       // allMethods.add(curr);
+       // }
+       // }
+       // }
+       // }
+       // if (!isSubType) {
+       // allMethods.removeAll(Arrays.asList(typeMethods));
+       // }
+       // // remove finals
+       // for (int i= allMethods.size() - 1; i >= 0; i--) {
+       // IMethod curr= (IMethod) allMethods.get(i);
+       // if (Flags.isFinal(curr.getFlags())) {
+       // allMethods.remove(i);
+       // }
+       // }
+       // return (IMethod[]) allMethods.toArray(new IMethod[allMethods.size()]);
+       // }
+       // private static boolean prefereInterfaceMethod(ITypeHierarchy hierarchy,
+       // IMethod interfaceMethod, IMethod curr) throws JavaModelException {
+       // if (Flags.isFinal(curr.getFlags())) {
+       // return false;
+       // }
+       // IType interfaceType= interfaceMethod.getDeclaringType();
+       // IType[] interfaces=
+       // hierarchy.getAllSuperInterfaces(curr.getDeclaringType());
+       // for (int i= 0; i < interfaces.length; i++) {
+       // if (interfaces[i] == interfaceType) {
+       // return false;
+       // }
+       // }
+       // return curr.getExceptionTypes().length >
+       // interfaceMethod.getExceptionTypes().length;
+       // }
+       /**
+        * Generate method stubs for methods to overrride
+        * 
+        * @param type
+        *            The type to search the overridable methods for
+        * @param hierarchy
+        *            The type hierarchy of the type
+        * @param methodsToImplement
+        *            Methods to override or implement
+        * @param settings
+        *            Options for comment generation
+        * @param imports
+        *            Required imports are added to the import structure. Structure
+        *            can be <code>null</code>, types are qualified then.
+        * @return Returns the generated stubs
+        */
+       // public static String[] genOverrideStubs(IMethod[] methodsToImplement,
+       // IType type, ITypeHierarchy hierarchy, CodeGenerationSettings settings,
+       // IImportsStructure imports) throws CoreException {
+       // GenStubSettings genStubSettings= new GenStubSettings(settings);
+       // genStubSettings.methodOverwrites= true;
+       // ICompilationUnit cu= type.getCompilationUnit();
+       // String[] result= new String[methodsToImplement.length];
+       // for (int i= 0; i < methodsToImplement.length; i++) {
+       // IMethod curr= methodsToImplement[i];
+       // IMethod overrides=
+       // JavaModelUtil.findMethodImplementationInHierarchy(hierarchy, type,
+       // curr.getElementName(), curr.getParameterTypes(), curr.isConstructor());
+       // if (overrides != null) {
+       // genStubSettings.callSuper= true;
+       // curr= overrides;
+       // }
+       // genStubSettings.methodModifiers= curr.getFlags();
+       // IMethod desc= JavaModelUtil.findMethodDeclarationInHierarchy(hierarchy,
+       // type, curr.getElementName(), curr.getParameterTypes(),
+       // curr.isConstructor());
+       // if (desc == null) {
+       // desc= curr;
+       // }
+       // result[i]= genStub(cu, type.getElementName(), curr,
+       // desc.getDeclaringType(), genStubSettings, imports);
+       // }
+       // return result;
+       // }
+       /**
+        * Searches for unimplemented methods of a type.
+        * 
+        * @param isSubType
+        *            If set, the evaluation is for a subtype of the given type. If
+        *            not set, the evaluation is for the type itself.
+        * @param settings
+        *            Options for comment generation
+        * @param imports
+        *            Required imports are added to the import structure. Structure
+        *            can be <code>null</code>, types are qualified then.
+        * @return Returns the generated stubs or <code>null</code> if the
+        *         creation has been canceled
+        */
+       // public static String[] evalUnimplementedMethods(IType type,
+       // ITypeHierarchy hierarchy, boolean isSubType, CodeGenerationSettings
+       // settings,
+       // IImportsStructure imports) throws CoreException {
+       //                                              
+       // IMethod[] inheritedMethods= getOverridableMethods(type, hierarchy,
+       // isSubType);
+       //                      
+       // List toImplement= new ArrayList();
+       // for (int i= 0; i < inheritedMethods.length; i++) {
+       // IMethod curr= inheritedMethods[i];
+       // if (JdtFlags.isAbstract(curr)) {
+       // toImplement.add(curr);
+       // }
+       // }
+       // IMethod[] toImplementArray= (IMethod[]) toImplement.toArray(new
+       // IMethod[toImplement.size()]);
+       // return genOverrideStubs(toImplementArray, type, hierarchy, settings,
+       // imports);
+       // }
+       /**
+        * Examines a string and returns the first line delimiter found.
+        */
+       public static String getLineDelimiterUsed(IJavaElement elem)
+                       throws JavaModelException {
+               ICompilationUnit cu = (ICompilationUnit) elem
+                               .getAncestor(IJavaElement.COMPILATION_UNIT);
+               if (cu != null && cu.exists()) {
+                       IBuffer buf = cu.getBuffer();
+                       int length = buf.getLength();
+                       for (int i = 0; i < length; i++) {
+                               char ch = buf.getChar(i);
+                               if (ch == SWT.CR) {
+                                       if (i + 1 < length) {
+                                               if (buf.getChar(i + 1) == SWT.LF) {
+                                                       return "\r\n"; //$NON-NLS-1$
                                                }
-                                               return "\r"; //$NON-NLS-1$
-                                       } else if (ch == SWT.LF) {
-                                               return "\n"; //$NON-NLS-1$
                                        }
+                                       return "\r"; //$NON-NLS-1$
+                               } else if (ch == SWT.LF) {
+                                       return "\n"; //$NON-NLS-1$
                                }
                        }
-                       return System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
                }
-
+               return System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+       }
 
        /**
-        * Embodies the policy which line delimiter to use when inserting into
-        * a document.
-        */     
+        * Embodies the policy which line delimiter to use when inserting into a
+        * document.
+        */
        public static String getLineDelimiterFor(IDocument doc) {
-               // new for: 1GF5UU0: ITPJUI:WIN2000 - "Organize Imports" in php editor inserts lines in wrong format
-               String lineDelim= null;
+               // new for: 1GF5UU0: ITPJUI:WIN2000 - "Organize Imports" in php editor
+               // inserts lines in wrong format
+               String lineDelim = null;
                try {
-                       lineDelim= doc.getLineDelimiter(0);
+                       lineDelim = doc.getLineDelimiter(0);
                } catch (BadLocationException e) {
                }
                if (lineDelim == null) {
-                       String systemDelimiter= System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-                       String[] lineDelims= doc.getLegalLineDelimiters();
-                       for (int i= 0; i < lineDelims.length; i++) {
+                       String systemDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+                       String[] lineDelims = doc.getLegalLineDelimiters();
+                       for (int i = 0; i < lineDelims.length; i++) {
                                if (lineDelims[i].equals(systemDelimiter)) {
-                                       lineDelim= systemDelimiter;
+                                       lineDelim = systemDelimiter;
                                        break;
                                }
                        }
                        if (lineDelim == null) {
-                               lineDelim= lineDelims.length > 0 ? lineDelims[0] : systemDelimiter;
+                               lineDelim = lineDelims.length > 0 ? lineDelims[0]
+                                               : systemDelimiter;
                        }
                }
                return lineDelim;
        }
 
-
        /**
         * Evaluates the indention used by a Java element. (in tabulators)
-        */     
-//     public static int getIndentUsed(IJavaElement elem) throws JavaModelException {
-//             if (elem instanceof ISourceReference) {
-//                     ICompilationUnit cu= (ICompilationUnit) elem.getAncestor(IJavaElement.COMPILATION_UNIT);
-//                     if (cu != null) {
-//                             IBuffer buf= cu.getBuffer();
-//                             int offset= ((ISourceReference)elem).getSourceRange().getOffset();
-//                             int i= offset;
-//                             // find beginning of line
-//                             while (i > 0 && !Strings.isLineDelimiterChar(buf.getChar(i - 1)) ){
-//                                     i--;
-//                             }
-//                             return Strings.computeIndent(buf.getText(i, offset - i), CodeFormatterUtil.getTabWidth());
-//                     }
-//             }
-//             return 0;
-//     }
-       
-       public static String codeFormat(String sourceString, int initialIndentationLevel, String lineDelim) {
-               ICodeFormatter formatter= ToolFactory.createDefaultCodeFormatter(null);
-               return formatter.format(sourceString, initialIndentationLevel, null, lineDelim);
+        */
+       // public static int getIndentUsed(IJavaElement elem) throws
+       // JavaModelException {
+       // if (elem instanceof ISourceReference) {
+       // ICompilationUnit cu= (ICompilationUnit)
+       // elem.getAncestor(IJavaElement.COMPILATION_UNIT);
+       // if (cu != null) {
+       // IBuffer buf= cu.getBuffer();
+       // int offset= ((ISourceReference)elem).getSourceRange().getOffset();
+       // int i= offset;
+       // // find beginning of line
+       // while (i > 0 && !Strings.isLineDelimiterChar(buf.getChar(i - 1)) ){
+       // i--;
+       // }
+       // return Strings.computeIndent(buf.getText(i, offset - i),
+       // CodeFormatterUtil.getTabWidth());
+       // }
+       // }
+       // return 0;
+       // }
+       public static String codeFormat(String sourceString,
+                       int initialIndentationLevel, String lineDelim) {
+               ICodeFormatter formatter = ToolFactory.createDefaultCodeFormatter(null);
+               return formatter.format(sourceString, initialIndentationLevel, null,
+                               lineDelim);
        }
-       
+
        /**
         * Returns the element after the give element.
         */
-//     public static IJavaElement findNextSibling(IJavaElement member) throws JavaModelException {
-//             IJavaElement parent= member.getParent();
-//             if (parent instanceof IParent) {
-//                     IJavaElement[] elements= ((IParent)parent).getChildren();
-//                     for (int i= elements.length - 2; i >= 0 ; i--) {
-//                             if (member.equals(elements[i])) {
-//                                     return elements[i+1];
-//                             }
-//                     }
-//             }
-//             return null;
-//     }
-//     
+       // public static IJavaElement findNextSibling(IJavaElement member) throws
+       // JavaModelException {
+       // IJavaElement parent= member.getParent();
+       // if (parent instanceof IParent) {
+       // IJavaElement[] elements= ((IParent)parent).getChildren();
+       // for (int i= elements.length - 2; i >= 0 ; i--) {
+       // if (member.equals(elements[i])) {
+       // return elements[i+1];
+       // }
+       // }
+       // }
+       // return null;
+       // }
+       //      
        public static String getTodoTaskTag(IJavaProject project) {
-               String markers= null;
+               String markers = null;
                if (project == null) {
-                       markers= JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS);
+                       markers = JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS);
                } else {
-                       markers= project.getOption(JavaCore.COMPILER_TASK_TAGS, true);
+                       markers = project.getOption(JavaCore.COMPILER_TASK_TAGS, true);
                }
-               
+
                if (markers != null && markers.length() > 0) {
-                       int idx= markers.indexOf(',');  
+                       int idx = markers.indexOf(',');
                        if (idx == -1) {
                                return markers;
                        } else {
@@ -1072,27 +1307,33 @@ public class StubUtility {
                }
                return null;
        }
+
        /*
         * Workarounds for bug 38111
         */
-//     public static String[] getArgumentNameSuggestions(IJavaProject project, String baseName, int dimensions, String[] excluded) {
-//             String name= workaround38111(baseName);
-//             String[] res= NamingConventions.suggestArgumentNames(project, "", name, dimensions, excluded); //$NON-NLS-1$
-//             return sortByLength(res); // longest first
-//     }
-//              
-//     public static String[] getFieldNameSuggestions(IJavaProject project, String baseName, int dimensions, int modifiers, String[] excluded) {
-//             String name= workaround38111(baseName);
-//             String[] res= NamingConventions.suggestFieldNames(project, "", name, dimensions, modifiers, excluded); //$NON-NLS-1$
-//             return sortByLength(res); // longest first
-//     }
-//     
-//     public static String[] getLocalNameSuggestions(IJavaProject project, String baseName, int dimensions, String[] excluded) {
-//             String name= workaround38111(baseName);
-//             String[] res= NamingConventions.suggestLocalVariableNames(project, "", name, dimensions, excluded); //$NON-NLS-1$
-//             return sortByLength(res); // longest first
-//     }
-       
+       // public static String[] getArgumentNameSuggestions(IJavaProject project,
+       // String baseName, int dimensions, String[] excluded) {
+       // String name= workaround38111(baseName);
+       // String[] res= NamingConventions.suggestArgumentNames(project, "", name,
+       // dimensions, excluded); //$NON-NLS-1$
+       // return sortByLength(res); // longest first
+       // }
+       //               
+       // public static String[] getFieldNameSuggestions(IJavaProject project,
+       // String baseName, int dimensions, int modifiers, String[] excluded) {
+       // String name= workaround38111(baseName);
+       // String[] res= NamingConventions.suggestFieldNames(project, "", name,
+       // dimensions, modifiers, excluded); //$NON-NLS-1$
+       // return sortByLength(res); // longest first
+       // }
+       //      
+       // public static String[] getLocalNameSuggestions(IJavaProject project,
+       // String baseName, int dimensions, String[] excluded) {
+       // String name= workaround38111(baseName);
+       // String[] res= NamingConventions.suggestLocalVariableNames(project, "",
+       // name, dimensions, excluded); //$NON-NLS-1$
+       // return sortByLength(res); // longest first
+       // }
        private static String[] sortByLength(String[] proposals) {
                Arrays.sort(proposals, new Comparator() {
                        public int compare(Object o1, Object o2) {
@@ -1101,86 +1342,100 @@ public class StubUtility {
                });
                return proposals;
        }
-       
+
        private static String workaround38111(String baseName) {
                if (BASE_TYPES.contains(baseName))
                        return baseName;
-               return Character.toUpperCase(baseName.charAt(0)) + baseName.substring(1);
+               return Character.toUpperCase(baseName.charAt(0))
+                               + baseName.substring(1);
        }
-       
-       private static final List BASE_TYPES= Arrays.asList(
-                       new String[] {"boolean", "byte", "char", "double", "float", "int", "long", "short"});  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
-
-       public static String suggestArgumentName(IJavaProject project, String baseName, String[] excluded) {
-//             String[] argnames= getArgumentNameSuggestions(project, baseName, 0, excluded);
-//             if (argnames.length > 0) {
-//                     return argnames[0];
-//             }
+
+       private static final List BASE_TYPES = Arrays
+                       .asList(new String[] {
+                                       "boolean", "byte", "char", "double", "float", "int", "long", "short" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+
+       public static String suggestArgumentName(IJavaProject project,
+                       String baseName, String[] excluded) {
+               // String[] argnames= getArgumentNameSuggestions(project, baseName, 0,
+               // excluded);
+               // if (argnames.length > 0) {
+               // return argnames[0];
+               // }
                return baseName;
        }
-       
-       public static String[] suggestArgumentNames(IJavaProject project, String[] paramNames) {
-               String prefixes= project.getOption(JavaCore.CODEASSIST_ARGUMENT_PREFIXES, true);
-               String suffixes= project.getOption(JavaCore.CODEASSIST_ARGUMENT_SUFFIXES, true);
+
+       public static String[] suggestArgumentNames(IJavaProject project,
+                       String[] paramNames) {
+               String prefixes = project.getOption(
+                               JavaCore.CODEASSIST_ARGUMENT_PREFIXES, true);
+               String suffixes = project.getOption(
+                               JavaCore.CODEASSIST_ARGUMENT_SUFFIXES, true);
                if (prefixes.length() + suffixes.length() == 0) {
                        return paramNames;
                }
-               
-               String[] newNames= new String[paramNames.length];
+
+               String[] newNames = new String[paramNames.length];
                // Ensure that the codegeneration preferences are respected
-               for (int i= 0; i < paramNames.length; i++) {
-                       String curr= paramNames[i];
+               for (int i = 0; i < paramNames.length; i++) {
+                       String curr = paramNames[i];
                        if (!hasPrefixOrSuffix(prefixes, suffixes, curr)) {
-                               newNames[i]= suggestArgumentName(project, paramNames[i], null);
+                               newNames[i] = suggestArgumentName(project, paramNames[i], null);
                        } else {
-                               newNames[i]= curr;
+                               newNames[i] = curr;
                        }
                }
                return newNames;
        }
-       
+
        public static boolean hasFieldName(IJavaProject project, String name) {
-               String prefixes= project.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES, true);
-               String suffixes= project.getOption(JavaCore.CODEASSIST_FIELD_SUFFIXES, true);
-               String staticPrefixes= project.getOption(JavaCore.CODEASSIST_STATIC_FIELD_PREFIXES, true);
-               String staticSuffixes= project.getOption(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, true);
-               
-               
-               return hasPrefixOrSuffix(prefixes, suffixes, name) 
-                       || hasPrefixOrSuffix(staticPrefixes, staticSuffixes, name);
+               String prefixes = project.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES,
+                               true);
+               String suffixes = project.getOption(JavaCore.CODEASSIST_FIELD_SUFFIXES,
+                               true);
+               String staticPrefixes = project.getOption(
+                               JavaCore.CODEASSIST_STATIC_FIELD_PREFIXES, true);
+               String staticSuffixes = project.getOption(
+                               JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, true);
+
+               return hasPrefixOrSuffix(prefixes, suffixes, name)
+                               || hasPrefixOrSuffix(staticPrefixes, staticSuffixes, name);
        }
-       
+
        public static boolean hasParameterName(IJavaProject project, String name) {
-               String prefixes= project.getOption(JavaCore.CODEASSIST_ARGUMENT_PREFIXES, true);
-               String suffixes= project.getOption(JavaCore.CODEASSIST_ARGUMENT_SUFFIXES, true);
+               String prefixes = project.getOption(
+                               JavaCore.CODEASSIST_ARGUMENT_PREFIXES, true);
+               String suffixes = project.getOption(
+                               JavaCore.CODEASSIST_ARGUMENT_SUFFIXES, true);
                return hasPrefixOrSuffix(prefixes, suffixes, name);
        }
-       
+
        public static boolean hasLocalVariableName(IJavaProject project, String name) {
-               String prefixes= project.getOption(JavaCore.CODEASSIST_LOCAL_PREFIXES, true);
-               String suffixes= project.getOption(JavaCore.CODEASSIST_LOCAL_SUFFIXES, true);
+               String prefixes = project.getOption(JavaCore.CODEASSIST_LOCAL_PREFIXES,
+                               true);
+               String suffixes = project.getOption(JavaCore.CODEASSIST_LOCAL_SUFFIXES,
+                               true);
                return hasPrefixOrSuffix(prefixes, suffixes, name);
        }
-       
+
        public static boolean hasConstantName(String name) {
                return Character.isUpperCase(name.charAt(0));
        }
-       
-       
-       private static boolean hasPrefixOrSuffix(String prefixes, String suffixes, String name) {
-               final String listSeparartor= ","; //$NON-NLS-1$
 
-               StringTokenizer tok= new StringTokenizer(prefixes, listSeparartor);
+       private static boolean hasPrefixOrSuffix(String prefixes, String suffixes,
+                       String name) {
+               final String listSeparartor = ","; //$NON-NLS-1$
+
+               StringTokenizer tok = new StringTokenizer(prefixes, listSeparartor);
                while (tok.hasMoreTokens()) {
-                       String curr= tok.nextToken();
+                       String curr = tok.nextToken();
                        if (name.startsWith(curr)) {
                                return true;
                        }
                }
 
-               tok= new StringTokenizer(suffixes, listSeparartor);
+               tok = new StringTokenizer(suffixes, listSeparartor);
                while (tok.hasMoreTokens()) {
-                       String curr= tok.nextToken();
+                       String curr = tok.nextToken();
                        if (name.endsWith(curr)) {
                                return true;
                        }