/* * Copyright 2009-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codehaus.groovy.eclipse.refactoring.test.internal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.refactoring.IJavaElementMapper; import org.eclipse.jdt.core.refactoring.RenameTypeArguments; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; import org.eclipse.ltk.core.refactoring.participants.ISharableParticipant; import org.eclipse.ltk.core.refactoring.participants.RefactoringArguments; import org.eclipse.ltk.core.refactoring.participants.RenameArguments; import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; import org.junit.Assert; public final class TestRenameParticipantShared extends RenameParticipant implements ISharableParticipant { static TestRenameParticipantShared fgInstance; List<Object> fElements = new ArrayList<Object>(3); List<String> fHandles = new ArrayList<String>(3); List<RenameArguments> fArguments = new ArrayList<RenameArguments>(3); Map<String, String> fSimilarToHandle = new HashMap<String, String>(); Map<String, String> fSimilarToNewName = new HashMap<String, String>(); public boolean initialize(Object element) { fgInstance = this; fElements.add(element); fArguments.add(getArguments()); if (element instanceof IJavaElement) { fHandles.add(((IJavaElement) element).getHandleIdentifier()); } else { fHandles.add(((IResource) element).getFullPath().toString()); } @SuppressWarnings("cast") IJavaElementMapper updating = (IJavaElementMapper) getProcessor().getAdapter(IJavaElementMapper.class); if ((updating != null) && getArguments() instanceof RenameTypeArguments) { RenameTypeArguments arguments = (RenameTypeArguments) getArguments(); if (arguments.getUpdateSimilarDeclarations()) { IJavaElement[] elements = arguments.getSimilarDeclarations(); for (int i = 0; i < elements.length; i++) { IJavaElement updated = updating.getRefactoredJavaElement(elements[i]); if (updated != null) { fSimilarToHandle.put(elements[i].getHandleIdentifier(), getKey(updated)); fSimilarToNewName.put(elements[i].getHandleIdentifier(), updated.getElementName()); } } } } return true; } private String getKey(IJavaElement updated) { if (updated instanceof IType) return ((IType) updated).getKey(); else if (updated instanceof IMethod) return ((IMethod) updated).getKey(); else if (updated instanceof IField) return ((IField) updated).getKey(); return ""; } public void addElement(Object element, RefactoringArguments args) { fElements.add(element); fArguments.add((RenameArguments) args); if (element instanceof IJavaElement) fHandles.add(((IJavaElement) element).getHandleIdentifier()); else fHandles.add(((IResource) element).getFullPath().toString()); } public String getName() { return getClass().getName(); } public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) { return new RefactoringStatus(); } public Change createChange(IProgressMonitor pm) throws CoreException { return null; } public static void testNumberOfElements(int expected) { if (expected == 0) { Assert.assertTrue(fgInstance == null); } else { Assert.assertEquals(expected, fgInstance.fElements.size()); Assert.assertEquals(expected, fgInstance.fArguments.size()); } } public static void testArguments(RenameArguments[] args) { testNumberOfElements(args.length); for (int i = 0; i < args.length; i++) { RenameArguments expected = args[i]; RenameArguments actual = fgInstance.fArguments.get(i); Assert.assertEquals(expected.getNewName(), actual.getNewName()); Assert.assertEquals(expected.getUpdateReferences(), actual.getUpdateReferences()); } } public static void reset() { fgInstance = null; } public static void testNumberOfSimilarElements(int expected) { if (expected == 0) Assert.assertTrue(fgInstance == null); else Assert.assertEquals(expected, fgInstance.fSimilarToHandle.size()); } public static void testSimilarElements(List<String> similarList, List<String> similarNewNameList, List<String> similarNewHandleList) { for (int i = 0; i < similarList.size(); i++) { String handle = similarList.get(i); String newHandle = similarNewHandleList.get(i); String newName = similarNewNameList.get(i); String actualNewHandle = fgInstance.fSimilarToHandle.get(handle); String actualNewName = fgInstance.fSimilarToNewName.get(handle); Assert.assertEquals("New element handle not as expected", newHandle, actualNewHandle); Assert.assertEquals("New element name not as expected", newName, actualNewName); } Assert.assertEquals(similarList.size(), fgInstance.fSimilarToHandle.size()); } }