Java tutorial
/******************************************************************************* * Copyright (c) 2009 SpringSource and others. 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: SpringSource - initial API and implementation * Andrew Eisenberg ******************************************************************************/ package org.eclipse.ajdt.core.tests.builder; import java.io.File; import org.aspectj.ajde.core.IOutputLocationManager; import org.aspectj.asm.IHierarchy; import org.aspectj.asm.IProgramElement; import org.eclipse.ajdt.core.AspectJCore; import org.eclipse.ajdt.core.AspectJPlugin; import org.eclipse.ajdt.core.model.AJProjectModelFacade; import org.eclipse.ajdt.core.model.AJProjectModelFactory; import org.eclipse.ajdt.core.tests.AJDTCoreTestCase; import org.eclipse.ajdt.core.tests.testutils.Utils; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.core.IJavaElement; /** * Tests that linked folders are properly handled by AJDT and aspectj when * handles are being created. * * @author andrew * */ public class LinkedFoldersTestBug270202 extends AJDTCoreTestCase { private IProject project; private IFile linkedFile; private IFile nonLinkedFile1; private IFile nonLinkedFile2; protected void setUp() throws Exception { super.setUp(); Utils.setAutobuilding(false); project = createPredefinedProject("Bug270202"); // now set up the linked folder // line in .classpath already exists, so // just need to create the link IFolder rawLocation = project.getFolder("raw_location"); IPath rawPath = rawLocation.getLocation(); IFolder src = project.getFolder("src"); src.createLink(rawPath, 0, null); project.build(IncrementalProjectBuilder.FULL_BUILD, null); linkedFile = project.getFile("src/p/AnAspect.aj"); nonLinkedFile1 = project.getFile("src1/q/AClass.java"); nonLinkedFile2 = project.getFile("src2/r/AnotherClass.java"); } protected void tearDown() throws Exception { super.tearDown(); Utils.setAutobuilding(true); } public void testGetSourceFolderForLinkedFile() throws Exception { assertEquals("Linked source folder not set up properly", project.getFolder("src").getLocation().toOSString(), project.getFolder("raw_location").getLocation().toOSString()); IOutputLocationManager locationManager = AspectJPlugin.getDefault().getCompilerFactory() .getCompilerForProject(project).getCompilerConfiguration().getOutputLocationManager(); String sourceFolderStr = locationManager .getSourceFolderForFile(new File(linkedFile.getLocation().toOSString())); assertEquals("Source folder 'src' not found", "src", sourceFolderStr); } public void testGetSourceFolderForNonLinkedFile1() throws Exception { IOutputLocationManager locationManager = AspectJPlugin.getDefault().getCompilerFactory() .getCompilerForProject(project).getCompilerConfiguration().getOutputLocationManager(); String sourceFolderStr = locationManager .getSourceFolderForFile(new File(nonLinkedFile1.getLocation().toOSString())); assertEquals("Source folder 'src1' not found", "src1", sourceFolderStr); } public void testGetSourceFolderForNonLinkedFile2() throws Exception { IOutputLocationManager locationManager = AspectJPlugin.getDefault().getCompilerFactory() .getCompilerForProject(project).getCompilerConfiguration().getOutputLocationManager(); String sourceFolderStr = locationManager .getSourceFolderForFile(new File(nonLinkedFile2.getLocation().toOSString())); assertEquals("Source folder 'src2' not found", "src2", sourceFolderStr); } public void testHandlesInsideLinkedFolders() throws Exception { IJavaElement ije = AspectJCore.create(linkedFile); assertTrue("Compilation unit should exist " + ije.getHandleIdentifier(), ije.exists()); AJProjectModelFacade model = AJProjectModelFactory.getInstance().getModelForProject(project); IProgramElement ipe = model.javaElementToProgramElement(ije); assertNotSame("IProgramElement should exist", IHierarchy.NO_STRUCTURE, ipe); IJavaElement recreated = model.programElementToJavaElement(ipe); assertTrue("Compilation unit should exist " + recreated.getHandleIdentifier(), recreated.exists()); } }