/** * {@inheritDoc} */ public Refactoring createRefactoring(final RefactoringDescriptor descriptor) throws CoreException { return new JavaMoveRefactoring(new MoveStaticMembersProcessor(null, null)); }
private RefactoringStatus checkFieldsForInterface() throws JavaModelException { //could be more clever and make field final if it is only written once... RefactoringStatus result= new RefactoringStatus(); for (int i= 0; i < fMembersToMove.length; i++) { if (! canMoveToInterface(fMembersToMove[i])) { String message= RefactoringCoreMessages.MoveMembersRefactoring_only_public_static; result.addError(message, JavaStatusContext.create(fMembersToMove[i])); } } return result; }
private RefactoringStatus checkMovedMemberAvailability(IMember memberToMove, IProgressMonitor pm) throws JavaModelException{ RefactoringStatus result= new RefactoringStatus(); if (memberToMove instanceof IType) { // recursively check accessibility of member type's members IJavaElement[] typeMembers= ((IType) memberToMove).getChildren(); pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, typeMembers.length + 1); for (int i= 0; i < typeMembers.length; i++) { if (typeMembers[i] instanceof IInitializer) pm.worked(1); else result.merge(checkMovedMemberAvailability((IMember) typeMembers[i], new SubProgressMonitor(pm, 1))); } } else { pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1); } IType[] blindAccessorTypes= getTypesNotSeeingMovedMember(memberToMove, new SubProgressMonitor(pm, 1), result); for (int k= 0; k < blindAccessorTypes.length; k++) { String message= createNonAccessibleMemberMessage(memberToMove, blindAccessorTypes[k],/*moved*/true); result.addError(message, JavaStatusContext.create(memberToMove)); } pm.done(); return result; }
private void createChange(List<ICompilationUnit> modifiedCus, RefactoringStatus status, IProgressMonitor monitor) throws CoreException { monitor.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_creating, 5); fChange= new DynamicValidationRefactoringChange(createDescriptor(), RefactoringCoreMessages.MoveMembersRefactoring_move_members); fTarget= getCuRewrite(fDestinationType.getCompilationUnit()); ITypeBinding targetBinding= getDestinationBinding(); if (targetBinding == null) { status.addFatalError(Messages.format(RefactoringCoreMessages.MoveMembersRefactoring_compile_errors, BasicElementLabels.getFileName(fTarget.getCu()))); adjustor.adjustVisibility(new NullProgressMonitor()); if (fDelegateUpdating && isDelegateCreationAvailable(member)) { status.merge(checkMovedMemberAvailability(member, new SubProgressMonitor(sub, 1))); String[] memberSources= getUpdatedMemberSource(status, fMemberDeclarations, targetBinding); monitor.worked(1); if (status.hasFatalError()) for (int index= 0; index < units.length; index++) { ICompilationUnit unit= units[index]; CompilationUnitRewrite rewrite= getCuRewrite(unit); adjustor.setRewrites(Collections.singletonMap(unit, rewrite)); adjustor.setAdjustments(adjustments); fChange.add(rewrite.createChange(true)); status.merge(moveMembers(fMemberDeclarations, memberSources)); fChange.add(fSource.createChange(true)); modifiedCus.add(fSource.getCu());
private void createChange(List modifiedCus, RefactoringStatus status, IProgressMonitor monitor) throws CoreException { monitor.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_creating, 5); final IMember[] members= getMembersToMove(); String project= null; final IJavaProject javaProject= getDeclaringType().getJavaProject(); if (javaProject != null) project= javaProject.getElementName(); descriptor.setMembers(members); fChange= new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.MoveMembersRefactoring_move_members); fTarget= getCuRewrite(fDestinationType.getCompilationUnit()); ITypeBinding targetBinding= getDestinationBinding(); if (targetBinding == null) { status.addFatalError(Messages.format(RefactoringCoreMessages.MoveMembersRefactoring_compile_errors, fTarget.getCu().getElementName())); if (fDelegateUpdating && isDelegateCreationAvailable(member)) { status.merge(checkMovedMemberAvailability(member, new SubProgressMonitor(sub, 1))); String[] memberSources= getUpdatedMemberSource(status, fMemberDeclarations, targetBinding); monitor.worked(1); if (status.hasFatalError()) for (int index= 0; index < units.length; index++) { ICompilationUnit unit= units[index]; CompilationUnitRewrite rewrite= getCuRewrite(unit); adjustor.setRewrites(Collections.singletonMap(unit, rewrite)); adjustor.setAdjustments(adjustments); status.merge(moveMembers(fMemberDeclarations, memberSources));
result.merge(checkDestinationType()); if (result.hasFatalError()) return result; result.merge(checkDestinationInsideTypeToMove()); if (result.hasFatalError()) return result; return result; result.merge(checkNativeMovedMethods(new SubProgressMonitor(pm, 1))); createChange(modifiedCus, result, new SubProgressMonitor(pm, 7)); IFile[] changedFiles= getAllFilesToModify(modifiedCus); ResourceChangeChecker checker= context.getChecker(ResourceChangeChecker.class); for (int i= 0; i < changedFiles.length; i++) {
public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException { try { pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1); RefactoringStatus result= new RefactoringStatus(); result.merge(checkDeclaringType()); pm.worked(1); if (result.hasFatalError()) return result; fSource= new CompilationUnitRewrite(fMembersToMove[0].getCompilationUnit()); fSourceBinding= (ITypeBinding)((SimpleName)NodeFinder.perform(fSource.getRoot(), fMembersToMove[0].getDeclaringType().getNameRange())).resolveBinding(); fMemberBindings= getMemberBindings(); if (fSourceBinding == null || hasUnresolvedMemberBinding()) { result.addFatalError(Messages.format( RefactoringCoreMessages.MoveMembersRefactoring_compile_errors, fSource.getCu().getElementName())); } fMemberDeclarations= getASTMembers(result); return result; } finally { pm.done(); } }
private RefactoringStatus checkMoveToInterface() throws JavaModelException { //could be more clever and make field final if it is only written once... boolean is18OrHigher= JavaModelUtil.is18OrHigher(fDestinationType.getJavaProject()); RefactoringStatus result= new RefactoringStatus(); boolean declaringIsInterface= getDeclaringType().isInterface(); if (declaringIsInterface && is18OrHigher) return result; String moveMembersMsg= is18OrHigher ? RefactoringCoreMessages.MoveMembersRefactoring_only_public_static_18 : RefactoringCoreMessages.MoveMembersRefactoring_only_public_static; for (int i= 0; i < fMembersToMove.length; i++) { if (declaringIsInterface && !(fMembersToMove[i] instanceof IMethod) && !is18OrHigher) { // moving from interface to interface is OK, unless method is moved to pre-18 } else if (!canMoveToInterface(fMembersToMove[i], is18OrHigher)) { result.addError(moveMembersMsg, JavaStatusContext.create(fMembersToMove[i])); } else if (!Flags.isPublic(fMembersToMove[i].getFlags()) && !declaringIsInterface) { result.addWarning(RefactoringCoreMessages.MoveMembersRefactoring_member_will_be_public, JavaStatusContext.create(fMembersToMove[i])); } } return result; }
private void createChange(List<ICompilationUnit> modifiedCus, RefactoringStatus status, IProgressMonitor monitor) throws CoreException { monitor.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_creating, 5); fChange= new DynamicValidationRefactoringChange(createDescriptor(), RefactoringCoreMessages.MoveMembersRefactoring_move_members); fTarget= getCuRewrite(fDestinationType.getCompilationUnit()); ITypeBinding targetBinding= getDestinationBinding(); if (targetBinding == null) { status.addFatalError(Messages.format(RefactoringCoreMessages.MoveMembersRefactoring_compile_errors, BasicElementLabels.getFileName(fTarget.getCu()))); adjustor.adjustVisibility(new NullProgressMonitor()); if (fDelegateUpdating && isDelegateCreationAvailable(member)) { status.merge(checkMovedMemberAvailability(member, new SubProgressMonitor(sub, 1))); String[] memberSources= getUpdatedMemberSource(status, fMemberDeclarations, targetBinding); monitor.worked(1); if (status.hasFatalError()) for (int index= 0; index < units.length; index++) { ICompilationUnit unit= units[index]; CompilationUnitRewrite rewrite= getCuRewrite(unit); adjustor.setRewrites(Collections.singletonMap(unit, rewrite)); adjustor.setAdjustments(adjustments); fChange.add(rewrite.createChange(true)); status.merge(moveMembers(fMemberDeclarations, memberSources)); fChange.add(fSource.createChange(true)); modifiedCus.add(fSource.getCu());
result.merge(checkDestinationType()); if (result.hasFatalError()) return result; result.merge(checkDestinationInsideTypeToMove()); if (result.hasFatalError()) return result; return result; result.merge(checkNativeMovedMethods(new SubProgressMonitor(pm, 1))); createChange(modifiedCus, result, new SubProgressMonitor(pm, 7)); IFile[] changedFiles= getAllFilesToModify(modifiedCus); ResourceChangeChecker checker= (ResourceChangeChecker)context.getChecker(ResourceChangeChecker.class); for (int i= 0; i < changedFiles.length; i++) {
@Override public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException { try { pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1); RefactoringStatus result= new RefactoringStatus(); result.merge(checkDeclaringType()); pm.worked(1); if (result.hasFatalError()) return result; fSource= new CompilationUnitRewrite(fMembersToMove[0].getCompilationUnit()); fSourceBinding= (ITypeBinding)((SimpleName)NodeFinder.perform(fSource.getRoot(), fMembersToMove[0].getDeclaringType().getNameRange())).resolveBinding(); fMemberBindings= getMemberBindings(); if (fSourceBinding == null || hasUnresolvedMemberBinding()) { result.addFatalError(Messages.format( RefactoringCoreMessages.MoveMembersRefactoring_compile_errors, BasicElementLabels.getFileName(fSource.getCu()))); } fMemberDeclarations= getASTMembers(result); return result; } finally { pm.done(); } }
private RefactoringStatus checkMoveToInterface() throws JavaModelException { //could be more clever and make field final if it is only written once... boolean is18OrHigher= JavaModelUtil.is18OrHigher(fDestinationType.getJavaProject()); RefactoringStatus result= new RefactoringStatus(); boolean declaringIsInterface= getDeclaringType().isInterface(); if (declaringIsInterface && is18OrHigher) return result; String moveMembersMsg= is18OrHigher ? RefactoringCoreMessages.MoveMembersRefactoring_only_public_static_18 : RefactoringCoreMessages.MoveMembersRefactoring_only_public_static; for (int i= 0; i < fMembersToMove.length; i++) { if (declaringIsInterface && !(fMembersToMove[i] instanceof IMethod) && !is18OrHigher) { // moving from interface to interface is OK, unless method is moved to pre-18 } else if (!canMoveToInterface(fMembersToMove[i], is18OrHigher)) { result.addError(moveMembersMsg, JavaStatusContext.create(fMembersToMove[i])); } else if (!Flags.isPublic(fMembersToMove[i].getFlags()) && !declaringIsInterface) { result.addWarning(RefactoringCoreMessages.MoveMembersRefactoring_member_will_be_public, JavaStatusContext.create(fMembersToMove[i])); } } return result; }
result.merge(checkDestinationType()); if (result.hasFatalError()) return result; result.merge(checkDestinationInsideTypeToMove()); if (result.hasFatalError()) return result; return result; result.merge(checkNativeMovedMethods(new SubProgressMonitor(pm, 1))); createChange(modifiedCus, result, new SubProgressMonitor(pm, 7)); IFile[] changedFiles= getAllFilesToModify(modifiedCus); ResourceChangeChecker checker= context.getChecker(ResourceChangeChecker.class); for (int i= 0; i < changedFiles.length; i++) {
@Override public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException { try { pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1); RefactoringStatus result= new RefactoringStatus(); result.merge(checkDeclaringType()); pm.worked(1); if (result.hasFatalError()) return result; fSource= new CompilationUnitRewrite(fMembersToMove[0].getCompilationUnit()); fSourceBinding= (ITypeBinding)((SimpleName)NodeFinder.perform(fSource.getRoot(), fMembersToMove[0].getDeclaringType().getNameRange())).resolveBinding(); fMemberBindings= getMemberBindings(); if (fSourceBinding == null || hasUnresolvedMemberBinding()) { result.addFatalError(Messages.format( RefactoringCoreMessages.MoveMembersRefactoring_compile_errors, BasicElementLabels.getFileName(fSource.getCu()))); } fMemberDeclarations= getASTMembers(result); return result; } finally { pm.done(); } }
private RefactoringStatus checkMovedMemberAvailability(IMember memberToMove, IProgressMonitor pm) throws JavaModelException{ RefactoringStatus result= new RefactoringStatus(); if (memberToMove instanceof IType) { // recursively check accessibility of member type's members IJavaElement[] typeMembers= ((IType) memberToMove).getChildren(); pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, typeMembers.length + 1); for (int i= 0; i < typeMembers.length; i++) { if (typeMembers[i] instanceof IInitializer) pm.worked(1); else result.merge(checkMovedMemberAvailability((IMember) typeMembers[i], new SubProgressMonitor(pm, 1))); } } else { pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1); } IType[] blindAccessorTypes= getTypesNotSeeingMovedMember(memberToMove, new SubProgressMonitor(pm, 1), result); for (int k= 0; k < blindAccessorTypes.length; k++) { String message= createNonAccessibleMemberMessage(memberToMove, blindAccessorTypes[k],/*moved*/true); result.addError(message, JavaStatusContext.create(memberToMove)); } pm.done(); return result; }
public static void startMoveStaticMembersRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { if (!RefactoringAvailabilityTester.isMoveStaticAvailable(members)) return; final Set set= new HashSet(); set.addAll(Arrays.asList(members)); final IMember[] elements= (IMember[]) set.toArray(new IMember[set.size()]); IJavaProject project= null; if (elements.length > 0) project= elements[0].getJavaProject(); final JavaMoveRefactoring refactoring= new JavaMoveRefactoring(new MoveStaticMembersProcessor(elements, JavaPreferencesSettings.getCodeGenerationSettings(project))); new RefactoringStarter().activate(refactoring, new MoveMembersWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_NON_JAVA_UPDATES); }
private RefactoringStatus checkMovedMemberAvailability(IMember memberToMove, IProgressMonitor pm) throws JavaModelException{ RefactoringStatus result= new RefactoringStatus(); if (memberToMove instanceof IType) { // recursively check accessibility of member type's members IJavaElement[] typeMembers= ((IType) memberToMove).getChildren(); pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, typeMembers.length + 1); for (int i= 0; i < typeMembers.length; i++) { if (typeMembers[i] instanceof IInitializer) pm.worked(1); else result.merge(checkMovedMemberAvailability((IMember) typeMembers[i], new SubProgressMonitor(pm, 1))); } } else { pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1); } IType[] blindAccessorTypes= getTypesNotSeeingMovedMember(memberToMove, new SubProgressMonitor(pm, 1), result); for (int k= 0; k < blindAccessorTypes.length; k++) { String message= createNonAccessibleMemberMessage(memberToMove, blindAccessorTypes[k],/*moved*/true); result.addError(message, JavaStatusContext.create(memberToMove)); } pm.done(); return result; }
public static void startMoveStaticMembersRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { if (!RefactoringAvailabilityTester.isMoveStaticAvailable(members)) return; final Set<IMember> set= new HashSet<>(); set.addAll(Arrays.asList(members)); final IMember[] elements= set.toArray(new IMember[set.size()]); IJavaProject project= null; if (elements.length > 0) project= elements[0].getJavaProject(); MoveStaticMembersProcessor processor= new MoveStaticMembersProcessor(elements, JavaPreferencesSettings.getCodeGenerationSettings(project)); Refactoring refactoring= new MoveRefactoring(processor); MoveMembersWizard wizard= new MoveMembersWizard(processor, refactoring); new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); }
public static void startMoveStaticMembersRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { if (!RefactoringAvailabilityTester.isMoveStaticAvailable(members)) return; final Set<IMember> set= new HashSet<>(); set.addAll(Arrays.asList(members)); final IMember[] elements= set.toArray(new IMember[set.size()]); IJavaProject project= null; if (elements.length > 0) project= elements[0].getJavaProject(); MoveStaticMembersProcessor processor= new MoveStaticMembersProcessor(elements, JavaPreferencesSettings.getCodeGenerationSettings(project)); Refactoring refactoring= new MoveRefactoring(processor); MoveMembersWizard wizard= new MoveMembersWizard(processor, refactoring); new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); }
@Override public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException { JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor)); MoveStaticMembersProcessor processor= new MoveStaticMembersProcessor(arguments, status); return new MoveRefactoring(processor); }