Bug 114369 Remove unused local and field too dangerous for multi quick fix
Version: 3.1.0 Build id: I20051025-0800 The two clean ups: Remove unused local variable and assignments without possible side effects and Remove unused private field and assignments without possible side effects are too dangerous to apply in a batch mode, at least without warning the user. Reason: private int i= methodWithSideEffect(); foo () { int j= methodWithSideEffect(); } in both cases i and j are removed as well as the two calls to methodWithSideEffect which will change the semantic of the program. Possible solutions: 1. Not having these two multi quick fixes 2. Warn the user 3. Only remove variables if this does not remove any method call 4. ?
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnusedCodeMultiFix.java
public UnusedCodeMultiFix(boolean removeUnusedImports, boolean removeUnusedPrivateMethods, 
			boolean removeUnusedPrivateConstructors, boolean removeUnusedPrivateFields,
			boolean removeUnusedPrivateTypes, boolean removeUnusedLocalVariables) {
		
		fRemoveUnusedImports= removeUnusedImports;
		fRemoveUnusedPrivateMethods= removeUnusedPrivateMethods;
		fRemoveUnusedPrivateConstructors= removeUnusedPrivateConstructors;
		fRemoveUnusedPrivateFields= removeUnusedPrivateFields;
		fRemoveUnusedPrivateTypes= removeUnusedPrivateTypes;
		fRemoveUnusedLocalVariables= removeUnusedLocalVariables;
	}
	public UnusedCodeMultiFix(IDialogSettings settings) {
		this(	settings.getBoolean(REMOVE_UNUSED_IMPORTS_SETTINGS_ID), 
				settings.getBoolean(REMOVE_UNUSED_PRIVATE_METHODES_SETTINGS_ID),
				settings.getBoolean(REMOVE_UNUSED_PRIVATE_CONSTRUCTORS_SETTINGS_ID),
				settings.getBoolean(REMOVE_UNUSED_PRIVATE_FIELDS_SETTINGS_ID),
				settings.getBoolean(REMOVE_UNUSED_PRIVATE_TYPE_SETTINGS_ID),
				settings.getBoolean(REMOVE_UNUSED_LOCAL_VARIABLES_SETTINGS_ID)
				);
	}
	public IFix createFix(CompilationUnit compilationUnit) throws CoreException {
		
		List removeImports= new ArrayList();
		List removeNames= new ArrayList();
		IProblem[] problems= compilationUnit.getProblems();
		for (int i= 0; i < problems.length; i++) {
			IProblemLocation problem= getProblemLocation(problems[i]);
			if (fRemoveUnusedImports && problem.getProblemId() == IProblem.UnusedImport) {
				
				ImportDeclaration node= UnusedCodeFix.getImportDeclaration(problem, compilationUnit);