<s> package org . eclipse . jdt . internal . core ; import org . eclipse . core . runtime . IStatus ; import org . eclipse . jdt . core . ICompilationUnit ; import org . eclipse . jdt . core . IImportDeclaration ; import org . eclipse . jdt . core . IJavaElement ; import org . eclipse . jdt . core . IJavaModelStatus ; import org . eclipse . jdt . core . IJavaModelStatusConstants ; import org . eclipse . jdt . core . IJavaProject ; import org . eclipse . jdt . core . IType ; import org . eclipse . jdt . core . JavaConventions ; import org . eclipse . jdt . core . JavaCore ; import org . eclipse . jdt . core . JavaModelException ; import org . eclipse . jdt . core . dom . AST ; import org . eclipse . jdt . core . dom . ASTNode ; import org . eclipse . jdt . core . dom . CompilationUnit ; import org . eclipse . jdt . core . dom . Name ; import org . eclipse . jdt . core . dom . PackageDeclaration ; import org . eclipse . jdt . core . dom . StructuralPropertyDescriptor ; import org . eclipse . jdt . core . dom . rewrite . ASTRewrite ; import org . eclipse . jdt . internal . core . util . Messages ; public class CreatePackageDeclarationOperation extends CreateElementInCUOperation { protected String name = null ; public CreatePackageDeclarationOperation ( String name , ICompilationUnit parentElement ) { super ( parentElement ) ; this . name = name ; } protected StructuralPropertyDescriptor getChildPropertyDescriptor ( ASTNode parent ) { return CompilationUnit . PACKAGE_PROPERTY ; } protected ASTNode generateElementAST ( ASTRewrite rewriter , ICompilationUnit cu ) throws JavaModelException { IJavaElement [ ] children = getCompilationUnit ( ) . getChildren ( ) ; for ( int i = 0 ; i < children . length ; i ++ ) { if ( children [ i ] . getElementType ( ) == IJavaElement . PACKAGE_DECLARATION && this . name . equals ( children [ i ] . getElementName ( ) ) ) { this . creationOccurred = false ; return null ; } } AST ast = this . cuAST . getAST ( ) ; PackageDeclaration pkgDeclaration = ast . newPackageDeclaration ( ) ; Name astName = ast . newName ( this . name ) ; pkgDeclaration . setName ( astName ) ; return pkgDeclaration ; } protected IJavaElement generateResultHandle ( ) { return getCompilationUnit ( ) . getPackageDeclaration ( this . name ) ; } public String getMainTaskName ( ) { return Messages . operation_createPackageProgress ; } protected void initializeDefaultPosition ( ) { try { ICompilationUnit cu = getCompilationUnit ( ) ; IImportDeclaration [ ] imports = cu . getImports ( ) ; if ( imports . length > 0 ) { createBefore ( imports [ 0 ] ) ; return ; } IType [ ] types = cu . getTypes ( ) ; if ( types . length > 0 ) { createBefore ( types [ 0 ] ) ; return ; } } catch ( JavaModelException e ) { } } public IJavaModelStatus verify ( ) { IJavaModelStatus status = super . verify ( ) ; if ( ! status . isOK ( ) ) { return status ; } IJavaProject project = getParentElement ( ) . getJavaProject ( ) ; if ( JavaConventions . validatePackageName ( this . name , project . getOption ( JavaCore . COMPILER_SOURCE , true ) , project . getOption ( JavaCore . COMPILER_COMPLIANCE , true ) ) . getSeverity ( ) == IStatus . ERROR ) { return new JavaModelStatus ( IJavaModelStatusConstants . INVALID_NAME , this . name ) ; } return JavaModelStatus . VERIFIED_OK ; } } </s>