/** * {@inheritDoc} */ public final Refactoring createRefactoring(final RefactoringDescriptor descriptor) throws CoreException { return new ExtractInterfaceRefactoring(new ExtractInterfaceProcessor(null, null)); } }
@Override protected RefactoringStatus validateTextField(String text) { final ExtractInterfaceProcessor processor= fProcessor; processor.setTypeName(text); return processor.checkTypeName(text); }
@Override protected final void createMemberDeclarations(final CompilationUnitRewrite sourceRewrite, final ASTRewrite targetRewrite, final AbstractTypeDeclaration targetDeclaration) throws CoreException { Assert.isNotNull(sourceRewrite); Assert.isNotNull(targetRewrite); Assert.isNotNull(targetDeclaration); Arrays.sort(fMembers, new Comparator<IMember>() { @Override public final int compare(final IMember first, final IMember second) { try { return first.getSourceRange().getOffset() - second.getSourceRange().getOffset(); } catch (JavaModelException exception) { return first.hashCode() - second.hashCode(); } } }); fTypeBindings.clear(); fStaticBindings.clear(); if (fMembers.length > 0) { IMember member= null; for (int index= fMembers.length - 1; index >= 0; index--) { member= fMembers[index]; if (member instanceof IField) { createFieldDeclaration(sourceRewrite, targetRewrite, targetDeclaration, ASTNodeSearchUtil.getFieldDeclarationFragmentNode((IField) member, sourceRewrite.getRoot())); } else if (member instanceof IMethod) { createMethodDeclaration(sourceRewrite, targetRewrite, targetDeclaration, ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) member, sourceRewrite.getRoot())); } } } }
monitor.beginTask("", 300); //$NON-NLS-1$ monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating); resetEnvironment(); final TextEditBasedChangeManager manager= new TextEditBasedChangeManager(); final CompilationUnitRewrite sourceRewrite= new CompilationUnitRewrite(fSubType.getCompilationUnit()); final AbstractTypeDeclaration declaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(fSubType, sourceRewrite.getRoot()); if (declaration != null) { createTypeSignature(sourceRewrite, declaration, status, new SubProgressMonitor(monitor, 20)); final IField[] fields= getExtractedFields(fSubType.getCompilationUnit()); if (fields.length > 0) ASTNodeDeleteUtil.markAsDeleted(fields, sourceRewrite, sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.ExtractInterfaceProcessor_remove_field_label, SET_EXTRACT_INTERFACE)); if (fSubType.isInterface()) { final IMethod[] methods= getExtractedMethods(fSubType.getCompilationUnit()); if (methods.length > 0) ASTNodeDeleteUtil.markAsDeleted(methods, sourceRewrite, sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.ExtractInterfaceProcessor_remove_method_label, SET_EXTRACT_INTERFACE)); final ICompilationUnit copy= getSharedWorkingCopy(original.getPrimary(), new SubProgressMonitor(monitor, 20)); fSuperSource= createTypeSource(copy, fSubType, fSuperName, sourceRewrite, declaration, status, new SubProgressMonitor(monitor, 40)); if (fSuperSource != null) { copy.getBuffer().setContents(fSuperSource); rewriteTypeOccurrences(manager, sourceRewrite, copy, replacements, status, new SubProgressMonitor(monitor, 220)); rewriteSourceMethods(sourceRewrite, replacements); manager.manage(fSubType.getCompilationUnit(), sourceRewrite.createChange(true));
monitor.beginTask("", 300); //$NON-NLS-1$ monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating); resetEnvironment(); final TextEditBasedChangeManager manager= new TextEditBasedChangeManager(); final CompilationUnitRewrite sourceRewrite= new CompilationUnitRewrite(fSubType.getCompilationUnit()); final AbstractTypeDeclaration declaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(fSubType, sourceRewrite.getRoot()); if (declaration != null) { createTypeSignature(sourceRewrite, declaration, status, new SubProgressMonitor(monitor, 20)); final IField[] fields= getExtractedFields(fSubType.getCompilationUnit()); if (fields.length > 0) ASTNodeDeleteUtil.markAsDeleted(fields, sourceRewrite, sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.ExtractInterfaceProcessor_remove_field_label, SET_EXTRACT_INTERFACE)); if (fSubType.isInterface()) { final IMethod[] methods= getExtractedMethods(fSubType.getCompilationUnit()); if (methods.length > 0) ASTNodeDeleteUtil.markAsDeleted(methods, sourceRewrite, sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.ExtractInterfaceProcessor_remove_method_label, SET_EXTRACT_INTERFACE)); final ICompilationUnit copy= getSharedWorkingCopy(original.getPrimary(), new SubProgressMonitor(monitor, 20)); fSuperSource= createTypeSource(copy, fSubType, fSuperName, sourceRewrite, declaration, status, new SubProgressMonitor(monitor, 40)); if (fSuperSource != null) { copy.getBuffer().setContents(fSuperSource); rewriteTypeOccurrences(manager, sourceRewrite, copy, replacements, status, new SubProgressMonitor(monitor, 220)); createMethodComments(sourceRewrite, replacements); manager.manage(fSubType.getCompilationUnit(), sourceRewrite.createChange());
status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_no_annotation, JavaStatusContext.create(fSubType))); else { status.merge(checkSuperType()); if (!status.hasFatalError()) { if (!status.hasFatalError()) { fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), status); if (!status.hasFatalError()) { final RefactoringStatus validation= Checks.validateModifiesFiles(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits()), getRefactoring().getValidationContext()); if (!validation.isOK()) return validation;
status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_no_annotation, JavaStatusContext.create(fSubType))); else { status.merge(checkSuperType()); if (!status.hasFatalError()) { if (!status.hasFatalError()) { fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), status); if (!status.hasFatalError()) { Checks.addModifiedFilesToChecker(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits()), context);
final IJavaElement element= JavaRefactoringDescriptorUtil.handleToElement(extended.getProject(), handle, false); if (element == null || !element.exists() || element.getElementType() != IJavaElement.TYPE) return JavaRefactoringDescriptorUtil.createInputFatalStatus(element, getProcessorName(), IJavaRefactorings.EXTRACT_INTERFACE); else fSubType= (IType) element; if (name != null) { fSuperName= name; final RefactoringStatus status= checkTypeName(name); if (status.hasError()) return status; final IJavaElement element= JavaRefactoringDescriptorUtil.handleToElement(extended.getProject(), handle, false); if (element == null || !element.exists()) status.merge(JavaRefactoringDescriptorUtil.createInputWarningStatus(element, getProcessorName(), IJavaRefactorings.EXTRACT_INTERFACE)); else elements.add(element);
/** * Creates the method annotations and comments of the extracted methods in * the source type. * * @param sourceRewrite * the source compilation unit rewrite * @param replacements * the set of variable binding keys of formal parameters which * must be replaced * @throws CoreException * if an error occurs */ protected final void createMethodComments(final CompilationUnitRewrite sourceRewrite, final Set replacements) throws CoreException { Assert.isNotNull(sourceRewrite); Assert.isNotNull(replacements); if (fComments && fMembers.length > 0) { final IJavaProject project= fSubType.getJavaProject(); final boolean javadoc= project.getOption(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, true).equals(JavaCore.ENABLED); IMember member= null; for (int index= 0; index < fMembers.length; index++) { member= fMembers[index]; if (member instanceof IMethod) createMethodComment(sourceRewrite, ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) member, sourceRewrite.getRoot()), replacements, javadoc); } } }
/** * Checks whether the type name is valid. * * @param name * the name to check * @return the status of the condition checking */ public final RefactoringStatus checkTypeName(final String name) { Assert.isNotNull(name); try { final RefactoringStatus result= Checks.checkTypeName(name); if (result.hasFatalError()) return result; final String unitName= JavaModelUtil.getRenamedCUName(fSubType.getCompilationUnit(), name); result.merge(Checks.checkCompilationUnitName(unitName)); if (result.hasFatalError()) return result; final IPackageFragment fragment= fSubType.getPackageFragment(); if (fragment.getCompilationUnit(unitName).exists()) { result.addFatalError(Messages.format(RefactoringCoreMessages.ExtractInterfaceProcessor_existing_compilation_unit, new String[] { unitName, fragment.getElementName() })); return result; } result.merge(checkSuperType()); return result; } catch (JavaModelException exception) { return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error); } }
settings[index]= JavaElementLabels.getElementLabel(fMembers[index], JavaElementLabels.ALL_FULLY_QUALIFIED); comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ExtractInterfaceProcessor_extracted_members_pattern, settings)); addSuperTypeSettings(comment, true); final JDTRefactoringDescriptor descriptor= new JDTRefactoringDescriptor(IJavaRefactorings.EXTRACT_INTERFACE, project, description, comment.asString(), arguments, flags); arguments.put(JDTRefactoringDescriptor.ATTRIBUTE_INPUT, descriptor.elementToHandle(fSubType));
final IJavaElement element= JDTRefactoringDescriptor.handleToElement(extended.getProject(), handle, false); if (element == null || !element.exists() || element.getElementType() != IJavaElement.TYPE) return ScriptableRefactoring.createInputFatalStatus(element, getRefactoring().getName(), IJavaRefactorings.EXTRACT_INTERFACE); else fSubType= (IType) element; if (name != null) { fSuperName= name; final RefactoringStatus status= checkTypeName(name); if (status.hasError()) return status; final IJavaElement element= JDTRefactoringDescriptor.handleToElement(extended.getProject(), handle, false); if (element == null || !element.exists()) status.merge(ScriptableRefactoring.createInputWarningStatus(element, getRefactoring().getName(), IJavaRefactorings.EXTRACT_INTERFACE)); else elements.add(element);
monitor.beginTask("", 300); //$NON-NLS-1$ monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating); resetEnvironment(); final TextEditBasedChangeManager manager= new TextEditBasedChangeManager(); final CompilationUnitRewrite sourceRewrite= new CompilationUnitRewrite(fSubType.getCompilationUnit()); final AbstractTypeDeclaration declaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(fSubType, sourceRewrite.getRoot()); if (declaration != null) { createTypeSignature(sourceRewrite, declaration, status, new SubProgressMonitor(monitor, 20)); final IField[] fields= getExtractedFields(fSubType.getCompilationUnit()); if (fields.length > 0) ASTNodeDeleteUtil.markAsDeleted(fields, sourceRewrite, sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.ExtractInterfaceProcessor_remove_field_label, SET_EXTRACT_INTERFACE)); if (fSubType.isInterface()) { final IMethod[] methods= getExtractedMethods(fSubType.getCompilationUnit()); if (methods.length > 0) ASTNodeDeleteUtil.markAsDeleted(methods, sourceRewrite, sourceRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.ExtractInterfaceProcessor_remove_method_label, SET_EXTRACT_INTERFACE)); final ICompilationUnit copy= getSharedWorkingCopy(original.getPrimary(), new SubProgressMonitor(monitor, 20)); fSuperSource= createTypeSource(copy, fSubType, fSuperName, sourceRewrite, declaration, status, new SubProgressMonitor(monitor, 40)); if (fSuperSource != null) { copy.getBuffer().setContents(fSuperSource); rewriteTypeOccurrences(manager, sourceRewrite, copy, replacements, status, new SubProgressMonitor(monitor, 220)); rewriteSourceMethods(sourceRewrite, replacements); manager.manage(fSubType.getCompilationUnit(), sourceRewrite.createChange(true));
status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_no_annotation, JavaStatusContext.create(fSubType))); else { status.merge(checkSuperType()); if (!status.hasFatalError()) { if (!status.hasFatalError()) { fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), status); if (!status.hasFatalError()) { Checks.addModifiedFilesToChecker(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits()), context);
final IJavaElement element= JavaRefactoringDescriptorUtil.handleToElement(extended.getProject(), handle, false); if (element == null || !element.exists() || element.getElementType() != IJavaElement.TYPE) return JavaRefactoringDescriptorUtil.createInputFatalStatus(element, getProcessorName(), IJavaRefactorings.EXTRACT_INTERFACE); else fSubType= (IType) element; if (name != null) { fSuperName= name; final RefactoringStatus status= checkTypeName(name); if (status.hasError()) return status; final IJavaElement element= JavaRefactoringDescriptorUtil.handleToElement(extended.getProject(), handle, false); if (element == null || !element.exists()) status.merge(JavaRefactoringDescriptorUtil.createInputWarningStatus(element, getProcessorName(), IJavaRefactorings.EXTRACT_INTERFACE)); else elements.add(element);
createMethodComment(sourceRewrite, declaration, replacements, javadoc);
/** * Checks whether the type name is valid. * * @param name * the name to check * @return the status of the condition checking */ public final RefactoringStatus checkTypeName(final String name) { Assert.isNotNull(name); try { final RefactoringStatus result= Checks.checkTypeName(name, fSubType); if (result.hasFatalError()) return result; final String unitName= JavaModelUtil.getRenamedCUName(fSubType.getCompilationUnit(), name); result.merge(Checks.checkCompilationUnitName(unitName, fSubType)); if (result.hasFatalError()) return result; final IPackageFragment fragment= fSubType.getPackageFragment(); if (fragment.getCompilationUnit(unitName).exists()) { result.addFatalError(Messages.format(RefactoringCoreMessages.ExtractInterfaceProcessor_existing_compilation_unit, new String[] { BasicElementLabels.getResourceName(unitName), JavaElementLabels.getElementLabel(fragment, JavaElementLabels.ALL_DEFAULT) })); return result; } result.merge(checkSuperType()); return result; } catch (JavaModelException exception) { return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error); } }
settings[index]= JavaElementLabels.getElementLabel(fMembers[index], JavaElementLabels.ALL_FULLY_QUALIFIED); comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ExtractInterfaceProcessor_extracted_members_pattern, settings)); addSuperTypeSettings(comment, true); final ExtractInterfaceDescriptor descriptor= RefactoringSignatureDescriptorFactory.createExtractInterfaceDescriptor(project, description, comment.asString(), arguments, flags); arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT, JavaRefactoringDescriptorUtil.elementToHandle(project, fSubType));
@Override protected RefactoringStatus validateTextField(String text) { final ExtractInterfaceProcessor processor= fProcessor; processor.setTypeName(text); return processor.checkTypeName(text); }
@Override protected final void createMemberDeclarations(final CompilationUnitRewrite sourceRewrite, final ASTRewrite targetRewrite, final AbstractTypeDeclaration targetDeclaration) throws CoreException { Assert.isNotNull(sourceRewrite); Assert.isNotNull(targetRewrite); Assert.isNotNull(targetDeclaration); Arrays.sort(fMembers, new Comparator<IMember>() { @Override public final int compare(final IMember first, final IMember second) { try { return first.getSourceRange().getOffset() - second.getSourceRange().getOffset(); } catch (JavaModelException exception) { return first.hashCode() - second.hashCode(); } } }); fTypeBindings.clear(); fStaticBindings.clear(); if (fMembers.length > 0) { IMember member= null; for (int index= fMembers.length - 1; index >= 0; index--) { member= fMembers[index]; if (member instanceof IField) { createFieldDeclaration(sourceRewrite, targetRewrite, targetDeclaration, ASTNodeSearchUtil.getFieldDeclarationFragmentNode((IField) member, sourceRewrite.getRoot())); } else if (member instanceof IMethod) { createMethodDeclaration(sourceRewrite, targetRewrite, targetDeclaration, ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) member, sourceRewrite.getRoot())); } } } }