@Override public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException { if (descriptor instanceof IntroduceParameterObjectDescriptor) { IntroduceParameterObjectProcessor processor= new IntroduceParameterObjectProcessor((IntroduceParameterObjectDescriptor) descriptor); return new ProcessorBasedRefactoring(processor); } return null; }
public IntroduceParameterObjectProcessor(IntroduceParameterObjectDescriptor descriptor) throws JavaModelException { super(descriptor.getMethod()); IMethod method= descriptor.getMethod(); Assert.isNotNull(method); initializeFields(method); setBodyUpdater(new RewriteParameterBody()); setDefaultValueAdvisor(new ParameterObjectCreator()); configureRefactoring(descriptor, this); }
public ICompilationUnit getCompilationUnit() { return getBaseCuRewrite().getCu(); }
private void createLocationInput(Composite parent) { Label l= new Label(parent, SWT.NONE); l.setText(RefactoringMessages.IntroduceParameterObjectWizard_destination_label); Composite composite= new Composite(parent, SWT.None); GridLayout gridLayout= new GridLayout(2, false); gridLayout.marginHeight= 0; gridLayout.marginWidth= 0; composite.setLayout(gridLayout); GridData gridData= new GridData(GridData.FILL_HORIZONTAL); composite.setLayoutData(gridData); final Button topLvlRadio= new Button(composite, SWT.RADIO); topLvlRadio.setText(RefactoringMessages.IntroduceParameterObjectWizard_createastoplevel_radio); topLvlRadio.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { boolean fAsTopLevel= topLvlRadio.getSelection(); fProcessor.setCreateAsTopLevel(fAsTopLevel); updateSignaturePreview(); validateRefactoring(); } }); Button nestedRadio= new Button(composite, SWT.RADIO); nestedRadio.setText(Messages.format(RefactoringMessages.IntroduceParameterObjectWizard_createasnestedclass_radio, BasicElementLabels.getJavaElementName(fProcessor.getContainingClass().getName()))); boolean createAsTopLevel= getBooleanSetting(CREATE_TOP_LEVEL_SETTING, fProcessor.isCreateAsTopLevel()); fProcessor.setCreateAsTopLevel(createAsTopLevel); topLvlRadio.setSelection(createAsTopLevel); nestedRadio.setSelection(!createAsTopLevel); }
@Override public JavaRefactoringDescriptor createDescriptor() { IntroduceParameterObjectDescriptor ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(); ipod.setMethod(getMethod()); ipod.setClassName(getClassName()); ipod.setDelegate(getDelegateUpdating()); ipod.setDeprecateDelegate(getDeprecateDelegates()); ipod.setGetters(isCreateGetter()); ipod.setSetters(isCreateSetter()); ipod.setPackageName(getPackage()); ipod.setParameterName(getParameterName()); ipod.setTopLevel(isCreateAsTopLevel()); List<ParameterInfo> pis= getParameterInfos(); for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) { ParameterInfo pi= iter.next(); String project= getCompilationUnit().getJavaProject().getElementName(); try { ipod.setComment(createComment(project).asString()); } catch (JavaModelException e) { JavaPlugin.log(e); ipod.setDescription(getProcessorName()); ipod.setFlags(getDescriptorFlags()); return ipod;
setErrorMessage(null); setPageComplete(true); IJavaProject project= fProcessor.getMethod().getJavaProject(); String sourceLevel= project.getOption(JavaCore.COMPILER_SOURCE, true); String compliance= project.getOption(JavaCore.COMPILER_COMPLIANCE, true); List<ParameterInfo> parameterInfos= fProcessor.getParameterInfos(); for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) { ParameterInfo pi= iter.next(); IStatus validateJavaTypeName= JavaConventions.validateJavaTypeName(fProcessor.getClassName(), sourceLevel, compliance); if (isErrorMessage(validateJavaTypeName)) return; if (fProcessor.getClassName().indexOf('.') != -1) { setErrorMessage(RefactoringMessages.IntroduceParameterObjectWizard_dot_not_allowed_error); setPageComplete(false); if (!"".equals(fProcessor.getPackage())) { //$NON-NLS-1$ IStatus validatePackageName= JavaConventions.validatePackageName(fProcessor.getPackage(), sourceLevel, compliance); if (isErrorMessage(validatePackageName)) return; IType type= project.findType(fProcessor.getNewTypeName()); if (type != null) { String packageLabel= JavaElementLabels.getElementLabel(type.getPackageFragment(), JavaElementLabels.ALL_DEFAULT); if (fProcessor.isCreateAsTopLevel()) { setErrorMessage(Messages.format(RefactoringMessages.IntroduceParameterObjectWizard_type_already_exists_in_package_info, new Object[] { BasicElementLabels.getJavaElementName(fProcessor.getClassName()), packageLabel })); setPageComplete(false); return;
if (status.hasFatalError()) return status; CompilationUnit astRoot= getBaseCuRewrite().getRoot(); ISourceRange nameRange= getMethod().getNameRange(); ASTNode selectedNode= NodeFinder.perform(astRoot, nameRange.getOffset(), nameRange.getLength()); if (selectedNode == null) { return mappingErrorFound(status, selectedNode); return mappingErrorFound(status, selectedNode); if (!processCompilerError(status, selectedNode)) status.addFatalError(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_error_cannot_resolve_type); return status; pi.setNewName(getFieldName(pi));
if (cuRewrite.getCu().equals(getCompilationUnit()) && !fParameterClassCreated) { createParameterClass(methodDeclaration, cuRewrite); fParameterClassCreated= true; final ASTRewrite rewriter= cuRewrite.getASTRewrite(); ListRewrite bodyStatements= rewriter.getListRewrite(body, Block.STATEMENTS_PROPERTY); List<ParameterInfo> managedParams= getParameterInfos(); for (Iterator<ParameterInfo> iter= managedParams.iterator(); iter.hasNext();) { final ParameterInfo pi= iter.next(); pi.setInlined(true); } else { ExpressionStatement initializer= fParameterObjectFactory.createInitializer(pi, getParameterName(), cuRewrite); bodyStatements.insertFirst(initializer, null);
@Override protected boolean shouldReport(IProblem problem, CompilationUnit cu) { if (!super.shouldReport(problem, cu)) return false; ASTNode node= ASTNodeSearchUtil.getAstNode(cu, problem.getSourceStart(), problem.getSourceEnd() - problem.getSourceStart() + 1); if (node instanceof Type) { Type type= (Type) node; if (problem.getID() == IProblem.UndefinedType && getClassName().equals(ASTNodes.getTypeName(type))) { return false; } } if (node instanceof Name) { Name name= (Name) node; if (problem.getID() == IProblem.ImportNotFound && getPackage().indexOf(name.getFullyQualifiedName()) != -1) return false; if (problem.getID() == IProblem.MissingTypeInMethod) { StructuralPropertyDescriptor locationInParent= name.getLocationInParent(); String[] arguments= problem.getArguments(); if ((locationInParent == MethodInvocation.NAME_PROPERTY || locationInParent == SuperMethodInvocation.NAME_PROPERTY) && arguments.length > 3 && arguments[3].endsWith(getClassName())) return false; } } return true; }
ipod.setMethod(method); IntroduceParameterObjectProcessor processor= new IntroduceParameterObjectProcessor(ipod); final RefactoringStatus status= processor.checkInitialConditions(new NullProgressMonitor()); if (status.hasFatalError()) { final RefactoringStatusEntry entry= status.getEntryMatchingSeverity(RefactoringStatus.FATAL); ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(); ipod.setMethod(superMethod); processor= new IntroduceParameterObjectProcessor(ipod);
public String getFieldName(ParameterInfo element) { IJavaProject javaProject= getCompilationUnit().getJavaProject(); String stripped= NamingConventions.getBaseName(NamingConventions.VK_PARAMETER, element.getOldName(), javaProject); int dim= element.getNewTypeBinding() != null ? element.getNewTypeBinding().getDimensions() : 0; return StubUtility.getVariableNameSuggestions(NamingConventions.VK_INSTANCE_FIELD, javaProject, stripped, dim, null, true)[0]; }
private void createClassNameInput(Composite result) { Label label= new Label(result, SWT.LEAD); label.setText(RefactoringMessages.IntroduceParameterObjectWizard_classnamefield_label); final Text text= new Text(result, SWT.SINGLE | SWT.BORDER); text.setText(fProcessor.getClassName()); text.selectAll(); text.setFocus(); text.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { fProcessor.setClassName(text.getText()); updateSignaturePreview(); validateRefactoring(); } }); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); }
@Override public JavaRefactoringDescriptor createDescriptor() { IntroduceParameterObjectDescriptor ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(); ipod.setMethod(getMethod()); ipod.setClassName(getClassName()); ipod.setDelegate(getDelegateUpdating()); ipod.setDeprecateDelegate(getDeprecateDelegates()); ipod.setGetters(isCreateGetter()); ipod.setSetters(isCreateSetter()); ipod.setPackageName(getPackage()); ipod.setParameterName(getParameterName()); ipod.setTopLevel(isCreateAsTopLevel()); List<ParameterInfo> pis= getParameterInfos(); for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) { ParameterInfo pi= iter.next(); String project= getCompilationUnit().getJavaProject().getElementName(); try { ipod.setComment(createComment(project).asString()); } catch (JavaModelException e) { JavaPlugin.log(e); ipod.setDescription(getProcessorName()); ipod.setFlags(getDescriptorFlags()); return ipod;
setErrorMessage(null); setPageComplete(true); IJavaProject project= fProcessor.getMethod().getJavaProject(); String sourceLevel= project.getOption(JavaCore.COMPILER_SOURCE, true); String compliance= project.getOption(JavaCore.COMPILER_COMPLIANCE, true); List<ParameterInfo> parameterInfos= fProcessor.getParameterInfos(); for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) { ParameterInfo pi= iter.next(); IStatus validateJavaTypeName= JavaConventions.validateJavaTypeName(fProcessor.getClassName(), sourceLevel, compliance); if (isErrorMessage(validateJavaTypeName)) return; if (fProcessor.getClassName().indexOf('.') != -1) { setErrorMessage(RefactoringMessages.IntroduceParameterObjectWizard_dot_not_allowed_error); setPageComplete(false); if (!"".equals(fProcessor.getPackage())) { //$NON-NLS-1$ IStatus validatePackageName= JavaConventions.validatePackageName(fProcessor.getPackage(), sourceLevel, compliance); if (isErrorMessage(validatePackageName)) return; IType type= project.findType(fProcessor.getNewTypeName()); if (type != null) { String packageLabel= JavaElementLabels.getElementLabel(type.getPackageFragment(), JavaElementLabels.ALL_DEFAULT); if (fProcessor.isCreateAsTopLevel()) { setErrorMessage(Messages.format(RefactoringMessages.IntroduceParameterObjectWizard_type_already_exists_in_package_info, new Object[] { BasicElementLabels.getJavaElementName(fProcessor.getClassName()), packageLabel })); setPageComplete(false); return;
if (status.hasFatalError()) return status; CompilationUnit astRoot= getBaseCuRewrite().getRoot(); ISourceRange nameRange= getMethod().getNameRange(); ASTNode selectedNode= NodeFinder.perform(astRoot, nameRange.getOffset(), nameRange.getLength()); if (selectedNode == null) { return mappingErrorFound(status, selectedNode); return mappingErrorFound(status, selectedNode); if (!processCompilerError(status, selectedNode)) status.addFatalError(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_error_cannot_resolve_type); return status; pi.setNewName(getFieldName(pi));
private void createLocationInput(Composite parent) { Label l= new Label(parent, SWT.NONE); l.setText(RefactoringMessages.IntroduceParameterObjectWizard_destination_label); Composite composite= new Composite(parent, SWT.None); GridLayout gridLayout= new GridLayout(2, false); gridLayout.marginHeight= 0; gridLayout.marginWidth= 0; composite.setLayout(gridLayout); GridData gridData= new GridData(GridData.FILL_HORIZONTAL); composite.setLayoutData(gridData); final Button topLvlRadio= new Button(composite, SWT.RADIO); topLvlRadio.setText(RefactoringMessages.IntroduceParameterObjectWizard_createastoplevel_radio); topLvlRadio.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { boolean fAsTopLevel= topLvlRadio.getSelection(); fProcessor.setCreateAsTopLevel(fAsTopLevel); updateSignaturePreview(); validateRefactoring(); } }); Button nestedRadio= new Button(composite, SWT.RADIO); nestedRadio.setText(Messages.format(RefactoringMessages.IntroduceParameterObjectWizard_createasnestedclass_radio, BasicElementLabels.getJavaElementName(fProcessor.getContainingClass().getName()))); boolean createAsTopLevel= getBooleanSetting(CREATE_TOP_LEVEL_SETTING, fProcessor.isCreateAsTopLevel()); fProcessor.setCreateAsTopLevel(createAsTopLevel); topLvlRadio.setSelection(createAsTopLevel); nestedRadio.setSelection(!createAsTopLevel); }
if (cuRewrite.getCu().equals(getCompilationUnit()) && !fParameterClassCreated) { createParameterClass(methodDeclaration, cuRewrite); fParameterClassCreated= true; final ASTRewrite rewriter= cuRewrite.getASTRewrite(); ListRewrite bodyStatements= rewriter.getListRewrite(body, Block.STATEMENTS_PROPERTY); List<ParameterInfo> managedParams= getParameterInfos(); ImportRewriteContext context=new ContextSensitiveImportRewriteContext(body, cuRewrite.getImportRewrite()); for (Iterator<ParameterInfo> iter= managedParams.iterator(); iter.hasNext();) { pi.setInlined(true); } else { ExpressionStatement initializer= fParameterObjectFactory.createInitializer(pi, getParameterName(), cuRewrite, context); bodyStatements.insertFirst(initializer, null);
@Override protected boolean shouldReport(IProblem problem, CompilationUnit cu) { if (!super.shouldReport(problem, cu)) return false; ASTNode node= ASTNodeSearchUtil.getAstNode(cu, problem.getSourceStart(), problem.getSourceEnd() - problem.getSourceStart() + 1); if (node instanceof Type) { Type type= (Type) node; if (problem.getID() == IProblem.UndefinedType && getClassName().equals(ASTNodes.getTypeName(type))) { return false; } } if (node instanceof Name) { Name name= (Name) node; if (problem.getID() == IProblem.ImportNotFound && getPackage().indexOf(name.getFullyQualifiedName()) != -1) return false; if (problem.getID() == IProblem.MissingTypeInMethod) { StructuralPropertyDescriptor locationInParent= name.getLocationInParent(); String[] arguments= problem.getArguments(); if ((locationInParent == MethodInvocation.NAME_PROPERTY || locationInParent == SuperMethodInvocation.NAME_PROPERTY) && arguments.length > 3 && arguments[3].endsWith(getClassName())) return false; } } return true; }
ipod.setMethod(method); IntroduceParameterObjectProcessor processor= new IntroduceParameterObjectProcessor(ipod); final RefactoringStatus status= processor.checkInitialConditions(new NullProgressMonitor()); if (status.hasFatalError()) { final RefactoringStatusEntry entry= status.getEntryMatchingSeverity(RefactoringStatus.FATAL); ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(); ipod.setMethod(superMethod); processor= new IntroduceParameterObjectProcessor(ipod);
public String getFieldName(ParameterInfo element) { IJavaProject javaProject= getCompilationUnit().getJavaProject(); String stripped= NamingConventions.getBaseName(NamingConventions.VK_PARAMETER, element.getOldName(), javaProject); int dim= element.getNewTypeBinding() != null ? element.getNewTypeBinding().getDimensions() : 0; return StubUtility.getVariableNameSuggestions(NamingConventions.VK_INSTANCE_FIELD, javaProject, stripped, dim, null, true)[0]; }