/** * {@inheritDoc} */ public final Refactoring createRefactoring(final RefactoringDescriptor descriptor) throws CoreException { return new PushDownRefactoring(new PushDownRefactoringProcessor(null)); } }
public IMember[] getAdditionalRequiredMembers(IProgressMonitor monitor) throws JavaModelException { IMember[] members= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()); monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_calculating_required, members.length);// not // true, // but // not // easy // to // give // anything // better List<IMember> queue= new ArrayList<>(members.length); queue.addAll(Arrays.asList(members)); if (queue.isEmpty()) return new IMember[0]; int i= 0; IMember current; do { current= queue.get(i); addAllRequiredPushableMembers(queue, current, new SubProgressMonitor(monitor, 1)); i++; if (queue.size() == i) current= null; } while (current != null); queue.removeAll(Arrays.asList(members));// report only additional return queue.toArray(new IMember[queue.size()]); }
private RefactoringStatus checkMembersInDestinationClasses(IProgressMonitor monitor) throws JavaModelException { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 2); RefactoringStatus result= new RefactoringStatus(); IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()); IType[] destinationClassesForNonAbstract= getAbstractDestinations(new SubProgressMonitor(monitor, 1)); result.merge(checkNonAbstractMembersInDestinationClasses(membersToPushDown, destinationClassesForNonAbstract)); List list= Arrays.asList(getAbstractMembers(getAbstractDestinations(new SubProgressMonitor(monitor, 1)))); IType[] destinationClassesForAbstract= (IType[]) list.toArray(new IType[list.size()]); result.merge(checkAbstractMembersInDestinationClasses(membersToPushDown, destinationClassesForAbstract)); monitor.done(); return result; }
private RefactoringStatus checkElementsAccessedByModifiedMembers(IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); pm.beginTask(RefactoringCoreMessages.PushDownRefactoring_check_references, 3); IType[] subclasses= getAbstractDestinations(new SubProgressMonitor(pm, 1)); result.merge(checkAccessedTypes(subclasses, new SubProgressMonitor(pm, 1))); result.merge(checkAccessedFields(subclasses, new SubProgressMonitor(pm, 1))); result.merge(checkAccessedMethods(subclasses, new SubProgressMonitor(pm, 1))); pm.done(); return result; }
try { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 5); clearCaches(); ICompilationUnit unit= getDeclaringType().getCompilationUnit(); if (fLayer) unit= unit.findWorkingCopy(fOwner); resetWorkingCopies(unit); final RefactoringStatus result= new RefactoringStatus(); result.merge(checkMembersInDestinationClasses(new SubProgressMonitor(monitor, 1))); result.merge(checkElementsAccessedByModifiedMembers(new SubProgressMonitor(monitor, 1))); result.merge(checkReferencesToPushedDownMembers(new SubProgressMonitor(monitor, 1))); if (!JdtFlags.isAbstract(getDeclaringType()) && getAbstractDeclarationInfos().length != 0) result.merge(checkConstructorCalls(getDeclaringType(), new SubProgressMonitor(monitor, 1))); else monitor.worked(1); fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), result); if (result.hasFatalError()) return result; result.merge(Checks.validateModifiesFiles(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits()), getRefactoring().getValidationContext())); return result; } finally {
@Override public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException, OperationCanceledException { try { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1); RefactoringStatus status= new RefactoringStatus(); status.merge(checkPossibleSubclasses(new SubProgressMonitor(monitor, 1))); if (status.hasFatalError()) return status; status.merge(checkDeclaringType(new SubProgressMonitor(monitor, 1))); if (status.hasFatalError()) return status; status.merge(checkIfMembersExist()); if (status.hasFatalError()) return status; fMemberInfos= createInfosForAllPushableFieldsAndMethods(getDeclaringType()); List<IMember> list= Arrays.asList(fMembersToMove); for (int offset= 0; offset < fMemberInfos.length; offset++) { MemberActionInfo info= fMemberInfos[offset]; if (list.contains(info.getMember())) info.setAction(MemberActionInfo.PUSH_DOWN_ACTION); } return status; } finally { monitor.done(); } }
final Map arguments= new HashMap(); String project= null; final IType declaring= getDeclaringType(); final IJavaProject javaProject= declaring.getJavaProject(); if (javaProject != null) settings[index]= JavaElementLabels.getElementLabel(fMembersToMove[index], JavaElementLabels.ALL_FULLY_QUALIFIED); comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.PushDownRefactoring_pushed_members_pattern, settings)); addSuperTypeSettings(comment, true); final JDTRefactoringDescriptor descriptor= new JDTRefactoringDescriptor(IJavaRefactorings.PUSH_DOWN, project, description, comment.asString(), arguments, flags); if (fCachedDeclaringType != null) } finally { pm.done(); clearCaches();
private RefactoringStatus checkAccessedMethods(IType[] subclasses, IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()); List pushedDownList= Arrays.asList(membersToPushDown); IMethod[] accessedMethods= ReferenceFinderUtil.getMethodsReferencedIn(membersToPushDown, pm); for (int index= 0; index < subclasses.length; index++) { IType targetClass= subclasses[index]; ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null); for (int offset= 0; offset < accessedMethods.length; offset++) { IMethod method= accessedMethods[offset]; boolean isAccessible= pushedDownList.contains(method) || canBeAccessedFrom(method, targetClass, targetSupertypes); if (!isAccessible) { String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_method_not_accessible, new String[] { JavaElementLabels.getTextLabel(method, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) }); result.addError(message, JavaStatusContext.create(method)); } } } pm.done(); return result; }
private RefactoringStatus checkAccessedTypes(IType[] subclasses, IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); IType[] accessedTypes= getTypesReferencedInMovedMembers(pm); for (int index= 0; index < subclasses.length; index++) { IType targetClass= subclasses[index]; ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null); for (int offset= 0; offset < accessedTypes.length; offset++) { IType type= accessedTypes[offset]; if (!canBeAccessedFrom(type, targetClass, targetSupertypes)) { String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_type_not_accessible, new String[] { JavaElementLabels.getTextLabel(type, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) }); result.addError(message, JavaStatusContext.create(type)); } } } pm.done(); return result; }
try { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 5); clearCaches(); ICompilationUnit unit= getDeclaringType().getCompilationUnit(); if (fLayer) unit= unit.findWorkingCopy(fOwner); resetWorkingCopies(unit); final RefactoringStatus result= new RefactoringStatus(); result.merge(checkMembersInDestinationClasses(new SubProgressMonitor(monitor, 1))); result.merge(checkElementsAccessedByModifiedMembers(new SubProgressMonitor(monitor, 1))); result.merge(checkReferencesToPushedDownMembers(new SubProgressMonitor(monitor, 1))); if (!JdtFlags.isAbstract(getDeclaringType()) && getAbstractDeclarationInfos().length != 0) result.merge(checkConstructorCalls(getDeclaringType(), new SubProgressMonitor(monitor, 1))); else monitor.worked(1); fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), result); if (result.hasFatalError()) return result;
@Override public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException, OperationCanceledException { try { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1); RefactoringStatus status= new RefactoringStatus(); status.merge(checkPossibleSubclasses(new SubProgressMonitor(monitor, 1))); if (status.hasFatalError()) return status; status.merge(checkDeclaringType(new SubProgressMonitor(monitor, 1))); if (status.hasFatalError()) return status; status.merge(checkIfMembersExist()); if (status.hasFatalError()) return status; fMemberInfos= createInfosForAllPushableFieldsAndMethods(getDeclaringType()); List<IMember> list= Arrays.asList(fMembersToMove); for (int offset= 0; offset < fMemberInfos.length; offset++) { MemberActionInfo info= fMemberInfos[offset]; if (list.contains(info.getMember())) info.setAction(MemberActionInfo.PUSH_DOWN_ACTION); } return status; } finally { monitor.done(); } }
private RefactoringStatus checkElementsAccessedByModifiedMembers(IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); pm.beginTask(RefactoringCoreMessages.PushDownRefactoring_check_references, 3); IType[] subclasses= getAbstractDestinations(new SubProgressMonitor(pm, 1)); result.merge(checkAccessedTypes(subclasses, new SubProgressMonitor(pm, 1))); result.merge(checkAccessedFields(subclasses, new SubProgressMonitor(pm, 1))); result.merge(checkAccessedMethods(subclasses, new SubProgressMonitor(pm, 1))); pm.done(); return result; }
final Map<String, String> arguments= new HashMap<>(); String project= null; final IType declaring= getDeclaringType(); final IJavaProject javaProject= declaring.getJavaProject(); if (javaProject != null) settings[index]= JavaElementLabels.getElementLabel(fMembersToMove[index], JavaElementLabels.ALL_FULLY_QUALIFIED); comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.PushDownRefactoring_pushed_members_pattern, settings)); addSuperTypeSettings(comment, true); final PushDownDescriptor descriptor= RefactoringSignatureDescriptorFactory.createPushDownDescriptor(project, description, comment.asString(), arguments, flags); if (fCachedDeclaringType != null) } finally { pm.done(); clearCaches();
private RefactoringStatus checkAccessedMethods(IType[] subclasses, IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()); List<IMember> pushedDownList= Arrays.asList(membersToPushDown); IMethod[] accessedMethods= ReferenceFinderUtil.getMethodsReferencedIn(membersToPushDown, pm); for (int index= 0; index < subclasses.length; index++) { IType targetClass= subclasses[index]; ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null); for (int offset= 0; offset < accessedMethods.length; offset++) { IMethod method= accessedMethods[offset]; boolean isAccessible= pushedDownList.contains(method) || canBeAccessedFrom(method, targetClass, targetSupertypes); if (!isAccessible) { String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_method_not_accessible, new String[] { JavaElementLabels.getTextLabel(method, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) }); result.addError(message, JavaStatusContext.create(method)); } } } pm.done(); return result; }
private RefactoringStatus checkAccessedTypes(IType[] subclasses, IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); IType[] accessedTypes= getTypesReferencedInMovedMembers(pm); for (int index= 0; index < subclasses.length; index++) { IType targetClass= subclasses[index]; ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null); for (int offset= 0; offset < accessedTypes.length; offset++) { IType type= accessedTypes[offset]; if (!canBeAccessedFrom(type, targetClass, targetSupertypes)) { String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_type_not_accessible, new String[] { JavaElementLabels.getTextLabel(type, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) }); result.addError(message, JavaStatusContext.create(type)); } } } pm.done(); return result; }
try { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 5); clearCaches(); ICompilationUnit unit= getDeclaringType().getCompilationUnit(); if (fLayer) unit= unit.findWorkingCopy(fOwner); resetWorkingCopies(unit); final RefactoringStatus result= new RefactoringStatus(); result.merge(checkMembersInDestinationClasses(new SubProgressMonitor(monitor, 1))); result.merge(checkElementsAccessedByModifiedMembers(new SubProgressMonitor(monitor, 1))); result.merge(checkReferencesToPushedDownMembers(new SubProgressMonitor(monitor, 1))); if (!JdtFlags.isAbstract(getDeclaringType()) && getAbstractDeclarationInfos().length != 0) result.merge(checkConstructorCalls(getDeclaringType(), new SubProgressMonitor(monitor, 1))); else monitor.worked(1); fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), result); if (result.hasFatalError()) return result;
private RefactoringStatus checkMembersInDestinationClasses(IProgressMonitor monitor) throws JavaModelException { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 2); RefactoringStatus result= new RefactoringStatus(); IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()); IType[] destinationClassesForNonAbstract= getAbstractDestinations(new SubProgressMonitor(monitor, 1)); result.merge(checkNonAbstractMembersInDestinationClasses(membersToPushDown, destinationClassesForNonAbstract)); List<IMember> list= Arrays.asList(getAbstractMembers(getAbstractDestinations(new SubProgressMonitor(monitor, 1)))); IType[] destinationClassesForAbstract= list.toArray(new IType[list.size()]); result.merge(checkAbstractMembersInDestinationClasses(membersToPushDown, destinationClassesForAbstract)); monitor.done(); return result; }
/** * {@inheritDoc} */ public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException, OperationCanceledException { try { monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1); RefactoringStatus status= new RefactoringStatus(); status.merge(checkPossibleSubclasses(new SubProgressMonitor(monitor, 1))); if (status.hasFatalError()) return status; status.merge(checkDeclaringType(new SubProgressMonitor(monitor, 1))); if (status.hasFatalError()) return status; status.merge(checkIfMembersExist()); if (status.hasFatalError()) return status; fMemberInfos= createInfosForAllPushableFieldsAndMethods(getDeclaringType()); List list= Arrays.asList(fMembersToMove); for (int offset= 0; offset < fMemberInfos.length; offset++) { MemberActionInfo info= fMemberInfos[offset]; if (list.contains(info.getMember())) info.setAction(MemberActionInfo.PUSH_DOWN_ACTION); } return status; } finally { monitor.done(); } }
private RefactoringStatus checkElementsAccessedByModifiedMembers(IProgressMonitor pm) throws JavaModelException { RefactoringStatus result= new RefactoringStatus(); pm.beginTask(RefactoringCoreMessages.PushDownRefactoring_check_references, 3); IType[] subclasses= getAbstractDestinations(new SubProgressMonitor(pm, 1)); result.merge(checkAccessedTypes(subclasses, new SubProgressMonitor(pm, 1))); result.merge(checkAccessedFields(subclasses, new SubProgressMonitor(pm, 1))); result.merge(checkAccessedMethods(subclasses, new SubProgressMonitor(pm, 1))); pm.done(); return result; }
final Map<String, String> arguments= new HashMap<>(); String project= null; final IType declaring= getDeclaringType(); final IJavaProject javaProject= declaring.getJavaProject(); if (javaProject != null) settings[index]= JavaElementLabels.getElementLabel(fMembersToMove[index], JavaElementLabels.ALL_FULLY_QUALIFIED); comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.PushDownRefactoring_pushed_members_pattern, settings)); addSuperTypeSettings(comment, true); final PushDownDescriptor descriptor= RefactoringSignatureDescriptorFactory.createPushDownDescriptor(project, description, comment.asString(), arguments, flags); if (fCachedDeclaringType != null) } finally { pm.done(); clearCaches();