/*******************************************************************************
 * Copyright (c) 2015 Mia-Software.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *		Fabien Giquel (Mia-Software) - Bug 351590 - [Java] ClassCastException while discovering Apache math commons
 *******************************************************************************/

package org.eclipse.modisco.java.discoverer.tests;

import org.eclipse.gmt.modisco.java.AbstractMethodDeclaration;
import org.eclipse.gmt.modisco.java.Expression;
import org.eclipse.gmt.modisco.java.MethodDeclaration;
import org.eclipse.gmt.modisco.java.MethodInvocation;
import org.eclipse.gmt.modisco.java.Statement;
import org.eclipse.gmt.modisco.java.VariableDeclarationStatement;
import org.eclipse.gmt.modisco.java.internal.util.JavaUtil;
import org.eclipse.modisco.java.discoverer.tests.utils.AbstractDiscoverTest;
import org.junit.Assert;
import org.junit.Test;

public class Bug351590ClassCastWithAnnotationMemberTest extends AbstractDiscoverTest {

	@Override
	protected String getTargetProjectName() {
		return Activator.PLUGIN_ID + "_bug351590"; //$NON-NLS-1$
	}

	@Override
	protected String getSourcesReferencePath() {
		return "/workspace/bug351590/"; //$NON-NLS-1$
	}

	@Test
	// Bugzilla 351590 : metamodel evolution needed, a MethodInvocation cannot reference one AnnotationTypeMemberDeclaration
	// Temporary workaround for not getting Status error : affect unresolvedMethod with name matching the AnnotationTypeMemberDeclaration
	public void testMethodInvocationToAnnotationMember() {
		MethodDeclaration aMethod = (MethodDeclaration) JavaUtil
				.getNamedElementByQualifiedName(getModel(),
						"(default package).MyClass.m()"); //$NON-NLS-1$
		Assert.assertNotNull(aMethod);

		// look for "String f1 = anAnnot.arg1();"
		Statement statement = aMethod.getBody().getStatements().get(1);
		Assert.assertNotNull(statement);
		Assert.assertTrue(statement instanceof VariableDeclarationStatement);

		Expression initializer = ((VariableDeclarationStatement) statement).getFragments().get(0).getInitializer();
		Assert.assertNotNull(initializer);
		Assert.assertTrue(initializer instanceof MethodInvocation);

		// Here, the fix has create some unresolvedMethod with a name indicating the true AnnotationTypeMemberDeclaration
		AbstractMethodDeclaration method = ((MethodInvocation) initializer).getMethod();
		Assert.assertNotNull(method);
		Assert.assertTrue(method.getName().contains("arg1"));
	}

}
