Package org.eclipse.jdt.core.dom

Examples of org.eclipse.jdt.core.dom.AST


    return declaration;
  }

  @Override
  public void writeTo(CompilationUnit compilationUnit) {
    AST ast = compilationUnit.getAST();

    PackageDeclaration declaration = ast.newPackageDeclaration();
    Name theName = ast.newName(name);
    declaration.setName(theName);

    compilationUnit.setPackage(declaration);
  }
View Full Code Here


    return AstReader.readerOf(compilationUnit)
        .toSourceFileInfo();
  }

  public static CompilationUnitWriter newCompilationUnitWriter() {
    AST ast = AST.newAST(AST.JLS8);
    return new CompilationUnitWriter(ast);
  }
View Full Code Here

   * method does).
   */
  private RefactoringStatus insertNewEnumType(IProgressMonitor monitor)
      throws CoreException {
    final RefactoringStatus status = new RefactoringStatus();
    final AST ast = AST.newAST(AST.JLS3);
    for (final Iterator it = this.computer.getEnumerizationForest()
        .iterator(); it.hasNext();) {
      final Collection col = (Collection) it.next();

      if (col.isEmpty())
        continue;

      final Collection constants = this.extractConstants(col);
      final Map newEnumConstantToOldConstantFieldMap = new HashMap();
      final EnumConstantComparator comparator = new EnumConstantComparator(
          newEnumConstantToOldConstantFieldMap);
      final SortedSet enumConstantDeclarationCollection = new TreeSet(
          comparator);

      final Map annotationToQualifiedNameMap = new HashMap();

      for (final Iterator cit = constants.iterator(); cit.hasNext();) {
        final IField constantField = (IField) cit.next();
        final FieldDeclaration originalFieldDeclaration = (FieldDeclaration) this.removedFieldNodes
            .get(constantField);

        // Get annotations.
        final Collection annotationCollection = new LinkedHashSet();
        for (final Iterator mit = originalFieldDeclaration.modifiers()
            .iterator(); mit.hasNext();) {
          final Object o = mit.next();
          if (o instanceof Annotation) {
            final Annotation oldAnnotation = (Annotation) o;
            final Annotation newAnnotation = (Annotation) ASTNode
                .copySubtree(ast, oldAnnotation);
            annotationToQualifiedNameMap.put(newAnnotation,
                oldAnnotation.resolveTypeBinding()
                    .getQualifiedName());
            annotationCollection.add(newAnnotation);
          }
        }

        // Get the javadoc.
        final Javadoc originalJavadoc = originalFieldDeclaration
            .getJavadoc();
        final Javadoc newJavadoc = (Javadoc) ASTNode.copySubtree(ast,
            originalJavadoc);

        final EnumConstantDeclaration constDecl = createNewEnumConstantDeclarataion(
            ast, ast.newSimpleName(constantField.getElementName()),
            newJavadoc, annotationCollection);

        newEnumConstantToOldConstantFieldMap.put(constDecl, constantField);
        enumConstantDeclarationCollection.add(constDecl);
      }

      // Get the consistent access modifier of the enum constants.
      final int flag = Util.getConsistentVisibility(constants);
      /*******************************************************************
       * * TODO: Need condition check here: 1. If enum is in its own file
       * then only public and package default are allowed. 2. Else, if
       * enum is embedded in another type, then all visibilities are
       * allowed, but may need more checking here for private!.
       ******************************************************************/
      if (!(Flags.isPublic(flag) || Flags.isPackageDefault(flag)))
        status
            .addFatalError(Messages.ConvertConstantsToEnumRefactoring_EnumTypeMustHaveCorrectVisibility);

      EnumDeclaration newEnumDeclaration = null;
      // only add modifier if it is not package default.
      if (!Flags.isPackageDefault(flag)) {
        final Modifier newModifier = ast
            .newModifier(Modifier.ModifierKeyword
                .fromFlagValue(flag));

        newEnumDeclaration = createNewEnumDeclaration(ast, ast
            .newSimpleName((String) this.simpleTypeNames.get(col)),
            enumConstantDeclarationCollection,
            new Object[] { newModifier });
      } else
        newEnumDeclaration = createNewEnumDeclaration(ast, ast
            .newSimpleName((String) this.simpleTypeNames.get(col)),
            enumConstantDeclarationCollection, new Object[] {});

      // TODO [bm] pretty dirty hack to workaround 16: Refactoring should not use UI components for code changes
      //       http://code.google.com/p/constants-to-enum-eclipse-plugin/issues/detail?id=16
      final NewEnumWizardPage[] result = new NewEnumWizardPage[1];
      Display.getDefault().syncExec(new Runnable() {
        public void run() {
          result[0]= new NewEnumWizardPage();
        }
      });
      NewEnumWizardPage page = result[0];
      page.setTypeName((String) this.simpleTypeNames.get(col), false);

      final IPackageFragmentRoot root = this.getPackageFragmentRoot();
      page.setPackageFragmentRoot(root, false);

      final IPackageFragment pack = this.getPackageFragment(
          (String) this.packageNames.get(col), monitor);
      page.setPackageFragment(pack, false);

      /*******************************************************************
       * * TODO: This is somewhat of a dirty workaround. Basically, I am
       * creating a new Enum type only to replace the root AST node. If
       * you have any better ideas please let me know!
       ******************************************************************/
      /*******************************************************************
       * TODO: Need a way of inserting this new type such that it appears
       * in the text changes for rollback purposes, etc.
       ******************************************************************/
      try {
        page.createType(monitor);
      } catch (final InterruptedException E) {
        status.addFatalError(E.getMessage());
      }

      // Modify the newly created enum type.
      final IType newEnumType = page.getCreatedType();
      final CompilationUnit node = (CompilationUnit) Util.getASTNode(
          newEnumType, monitor);

      final ASTRewrite astRewrite = ASTRewrite.create(node.getAST());
      final ImportRewrite importRewrite = ImportRewrite
          .create(node, true);

      final EnumDeclaration oldEnumDeclaration = (EnumDeclaration) node
          .types().get(0);

      // Add imports for annotations to the enum constants.
      for (final Iterator eit = newEnumDeclaration.enumConstants()
          .iterator(); eit.hasNext();) {
        final Object obj = eit.next();
        final EnumConstantDeclaration ecd = (EnumConstantDeclaration) obj;
        for (final Iterator emit = ecd.modifiers().iterator(); emit
            .hasNext();) {
          final Object o = emit.next();
          if (o instanceof Annotation) {
            final Annotation anno = (Annotation) o;
            final String newName = importRewrite
                .addImport((String) annotationToQualifiedNameMap
                    .get(anno));
            anno.setTypeName(ast.newName(newName));
          }
        }
      }
      /*
       * TODO: Need to remove resulting unused imports, but I am unsure of
View Full Code Here

  private RefactoringStatus rewriteFieldDeclaration(ASTRewrite astRewrite,
      ImportRewrite importRewrite, FieldDeclaration oldFieldDeclaration,
      String fullyQualifiedTypeName) {
    final RefactoringStatus status = new RefactoringStatus();
    final AST ast = oldFieldDeclaration.getAST();
    final String typeName = importRewrite.addImport(fullyQualifiedTypeName);
    final Type newType = getNewType(ast, typeName);
    final Type oldType = oldFieldDeclaration.getType();
    astRewrite.replace(oldType, newType, null);
    return status;
View Full Code Here

      SingleVariableDeclaration oldFormalParameterDeclaration,
      String fullyQualifiedTypeName) {

    final RefactoringStatus status = new RefactoringStatus();
    final String typeName = importRewrite.addImport(fullyQualifiedTypeName);
    final AST ast = oldFormalParameterDeclaration.getAST();
    final Type newType = getNewType(ast, typeName);
    final Type oldType = oldFormalParameterDeclaration.getType();
    astRewrite.replace(oldType, newType, null);
    return status;
  }
View Full Code Here

  private RefactoringStatus rewriteInfixExpression(ASTRewrite astRewrite,
      ImportRewrite importRewrite, InfixExpression ie,
      String fullyQualifiedTypeName) {
    final RefactoringStatus status = new RefactoringStatus();
    final AST ast = ie.getAST();

    final Expression leftExpCopy = (Expression) ASTNode.copySubtree(ast, ie
        .getLeftOperand());
    final Expression rightExpCopy = (Expression) ASTNode.copySubtree(ast,
        ie.getRightOperand());

    final NumberLiteral zero = ast.newNumberLiteral();
    astRewrite.replace(ie.getRightOperand(), zero, null);

    final MethodInvocation newInvocation = ast.newMethodInvocation();
    newInvocation.setExpression(leftExpCopy);
    newInvocation.setName(ast.newSimpleName("compareTo")); //$NON-NLS-1$
    newInvocation.arguments().add(rightExpCopy);

    astRewrite.replace(ie.getLeftOperand(), newInvocation, null);

    if (((ASTNode) newInvocation.arguments().get(0)).getNodeType() == ASTNode.SIMPLE_NAME
View Full Code Here

      ASTRewrite astRewrite, ImportRewrite importRewrite,
      VariableDeclarationStatement oldVariableDeclaration,
      String fullyQualifiedTypeName) {

    final RefactoringStatus status = new RefactoringStatus();
    final AST ast = oldVariableDeclaration.getAST();
    final String typeName = importRewrite.addImport(fullyQualifiedTypeName);
    final Type newType = getNewType(ast, typeName);
    final Type oldType = oldVariableDeclaration.getType();
    astRewrite.replace(oldType, newType, null);
    return status;
View Full Code Here

      ImportRewrite importRewrite,
      MethodDeclaration oldMethodDeclaration,
      String fullyQualifiedTypeName) {

    final RefactoringStatus status = new RefactoringStatus();
    final AST ast = oldMethodDeclaration.getAST();
    final String typeName = importRewrite.addImport(fullyQualifiedTypeName);
    final Type newType = getNewType(ast, typeName);
    final Type oldType = oldMethodDeclaration.getReturnType2();
    astRewrite.replace(oldType, newType, null);
    return status;
View Full Code Here

        astRewrite.replace(nodeToReplace, name, null);
      return status;
    }

    // Make a copy of the simple name.
    final AST ast = name.getAST();
    final SimpleName nameCopy = (SimpleName) ASTNode.copySubtree(ast, name);

    final String typeName = importRewrite.addImport(fullyQualifiedTypeName);
    final QualifiedName newNameNode = ast.newQualifiedName(ast
        .newName(typeName), nameCopy);

    astRewrite.replace(nodeToReplace, newNameNode, null);
    return status;
  }
View Full Code Here

      throws Exception {
    IJavaProject javaProject = serviceUnit.getJavaProject();
    // parse service unit
    CompilationUnit serviceRoot = Utils.parseUnit(serviceUnit);
    // prepare AST and start modifications recording
    AST ast = serviceRoot.getAST();
    serviceRoot.recordModifications();
    // modify imports (-com.google.gwt.*, -*Exception, +AsyncCallback)
    {
      List<ImportDeclaration> imports = DomGenerics.imports(serviceRoot);
      // remove useless imports
      for (Iterator<ImportDeclaration> I = imports.iterator(); I.hasNext();) {
        ImportDeclaration importDeclaration = I.next();
        String importName = importDeclaration.getName().getFullyQualifiedName();
        if (importName.startsWith("com.google.gwt.user.client.rpc.")
            || importName.equals("com.google.gwt.core.client.GWT")
            || importName.endsWith("Exception")) {
          I.remove();
        }
      }
    }
    // add Async to the name
    TypeDeclaration serviceType = (TypeDeclaration) serviceRoot.types().get(0);
    String remoteServiceAsyncName = serviceType.getName().getIdentifier() + "Async";
    serviceType.setName(serviceRoot.getAST().newSimpleName(remoteServiceAsyncName));
    // update interfaces
    updateInterfacesOfAsync(javaProject, serviceRoot, serviceType);
    // change methods, fields and inner classes
    {
      List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(serviceType);
      for (Iterator<BodyDeclaration> I = bodyDeclarations.iterator(); I.hasNext();) {
        BodyDeclaration bodyDeclaration = I.next();
        if (bodyDeclaration instanceof MethodDeclaration) {
          MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration;
          // make return type void
          Type returnType;
          {
            returnType = methodDeclaration.getReturnType2();
            methodDeclaration.setReturnType2(ast.newPrimitiveType(PrimitiveType.VOID));
          }
          // process JavaDoc
          {
            Javadoc javadoc = methodDeclaration.getJavadoc();
            if (javadoc != null) {
              List<TagElement> tags = DomGenerics.tags(javadoc);
              for (Iterator<TagElement> tagIter = tags.iterator(); tagIter.hasNext();) {
                TagElement tag = tagIter.next();
                if ("@gwt.typeArgs".equals(tag.getTagName())) {
                  tagIter.remove();
                } else if ("@return".equals(tag.getTagName())) {
                  if (!tag.fragments().isEmpty()) {
                    tag.setTagName("@param callback the callback to return");
                  } else {
                    tagIter.remove();
                  }
                } else if ("@wbp.gwt.Request".equals(tag.getTagName())) {
                  tagIter.remove();
                  addImport(serviceRoot, "com.google.gwt.http.client.Request");
                  methodDeclaration.setReturnType2(ast.newSimpleType(ast.newName("Request")));
                }
              }
              // remove empty JavaDoc
              if (tags.isEmpty()) {
                methodDeclaration.setJavadoc(null);
              }
            }
          }
          // add AsyncCallback parameter
          {
            addImport(serviceRoot, "com.google.gwt.user.client.rpc.AsyncCallback");
            // prepare "callback" type
            Type callbackType;
            {
              callbackType = ast.newSimpleType(ast.newName("AsyncCallback"));
              Type objectReturnType = getObjectType(returnType);
              ParameterizedType parameterizedType = ast.newParameterizedType(callbackType);
              DomGenerics.typeArguments(parameterizedType).add(objectReturnType);
              callbackType = parameterizedType;
            }
            // prepare "callback" parameter
            SingleVariableDeclaration asyncCallback = ast.newSingleVariableDeclaration();
            asyncCallback.setType(callbackType);
            asyncCallback.setName(ast.newSimpleName("callback"));
            // add "callback" parameter
            DomGenerics.parameters(methodDeclaration).add(asyncCallback);
          }
          // remove throws
          methodDeclaration.thrownExceptions().clear();
View Full Code Here

TOP

Related Classes of org.eclipse.jdt.core.dom.AST

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.