Java tutorial
/* * Created 2007/01/05 * Copyright (C) 2003-2009 Naoki Iwami (naoki@limy.org) * * This file is part of Limy Eclipse Plugin. * * Limy Eclipse Plugin is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Limy Eclipse Plugin is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Limy Eclipse Plugin. If not, see <http://www.gnu.org/licenses/>. */ package org.limy.eclipse.qalab.mark; import java.io.File; import java.util.Collection; import java.util.HashSet; import net.sourceforge.cobertura.instrument.CoberturaInstrument; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IType; import org.limy.eclipse.common.LimyEclipsePluginUtils; import org.limy.eclipse.common.jdt.LimyJavaUtils; import org.limy.eclipse.common.resource.LimyResourceUtils; import org.limy.eclipse.qalab.common.LimyQalabEnvironment; import org.limy.eclipse.qalab.common.LimyQalabUtils; import org.limy.eclipse.qalab.common.QalabResourceUtils; /** * Coberturap}?[J?[??NX?B * @author Naoki Iwami */ public final class CoberturaMarkCreator implements MarkCreator { /** BCX^X */ private static CoberturaMarkCreator instance = new CoberturaMarkCreator(); /** * private constructor */ private CoberturaMarkCreator() { } public static CoberturaMarkCreator getInstance() { return instance; } // ------------------------ Implement Methods public String getName() { return "cobertura"; } public boolean markJavaElement(LimyQalabEnvironment env, Collection<IJavaElement> elements, IProgressMonitor monitor) { File dataFile = LimyQalabUtils.createTempFile(env.getProject(), "cobertura.ser"); System.setProperty("net.sourceforge.cobertura.datafile", dataFile.getAbsolutePath()); dataFile.delete(); try { IProject project = env.getProject(); CoberturaInstrument obj = new CoberturaInstrument(dataFile); // Instrument?Javat@C IResource[] resources = getTargetJavaFiles(env, elements); // Classt@Cp\?[X IResource[] classResources = new IResource[resources.length]; for (int i = 0; i < resources.length; i++) { classResources[i] = QalabResourceUtils.getClassResource(env, resources[i]).getResource(); } // Instrumentt@C?icobertura.ser?j?? obj.makeInstrument(project, classResources); // eXg?s new ExecuteUIJob(env, resources).schedule(); return true; } catch (CoreException e) { LimyEclipsePluginUtils.log(e); } return false; } public boolean markResource(LimyQalabEnvironment env, IResource resource, IProgressMonitor monitor) { throw new UnsupportedOperationException("markResource"); // return executeTest(env, resource); } public boolean markResourceTemporary(LimyQalabEnvironment env, IResource resource, IProgressMonitor monitor) { throw new UnsupportedOperationException("markResourceTemporary"); // return executeTest(env, resource); } public boolean markResources(LimyQalabEnvironment env, Collection<IResource> allResources, IProgressMonitor monitor) { throw new UnsupportedOperationException("markResourceTemporary"); // File dataFile = LimyQalabUtils.createTempFile(env.getProject(), "cobertura.ser"); // System.setProperty("net.sourceforge.cobertura.datafile", // dataFile.getAbsolutePath()); // dataFile.delete(); // // try { // // IProject project = env.getProject(); // CoberturaInstrument obj = new CoberturaInstrument(dataFile); // // // Instrument?Javat@C // IResource[] resources = getTargetJavaFiles(env, allResources); // // // Classt@Cp\?[X // IResource[] classResources = new IResource[resources.length]; // for (int i = 0; i < resources.length; i++) { // classResources[i] = QalabResourceUtils.getClassResource(env, // resources[i]).getResource(); // } // // // Instrumentt@C?icobertura.ser?j?? // obj.makeInstrument(project, classResources); // // // eXg?s // new ExecuteUIJob(env, resources).schedule(); // // return true; // } catch (CoreException e) { // LimyEclipsePluginUtils.log(e); // } // return false; } // ------------------------ Private Methods // /** // * \?[XeXg?s}?[J?[???B // * @param env // * @param resource \?[X // * @return ??? true // */ // private boolean executeTest(LimyQalabEnvironment env, // IResource resource) { // // File rootDir = LimyQalabPlugin.getDefault().getPluginRoot(); // File dataFile = new File(rootDir, "cobertura.ser"); // System.setProperty("net.sourceforge.cobertura.datafile", // dataFile.getAbsolutePath()); // dataFile.delete(); // // if (QalabResourceUtils.isTestResource(resource)) { // // resource eXgt@C???A?s // try { // String className = LimyQalabUtils.getQualifiedClassName(env, resource); // // eXgt@C?CJavat@C // IResource mainJavaResource = QalabResourceUtils.getJavaResource( // env, className.substring(0, className.length() - 4), // false); // // ResourceWithBasedir classResource = QalabResourceUtils.getClassResource( // env, mainJavaResource); // if (classResource != null) { // // PJavat@Cinstrumentcobertura.ser?? // CoberturaInstrument obj = new CoberturaInstrument(dataFile); // obj.makeInstrument(classResource.getResource()); // } // // // ?CJavat@C}?[J?[?? // mainJavaResource.deleteMarkers( // LimyQalabMarker.DEFAULT_ID, true, IResource.DEPTH_ZERO); // addMarker(env, mainJavaResource); // return true; // // } catch (CoreException e) { // LimyEclipsePluginUtils.log(e); // } // return false; // } // // try { // ResourceWithBasedir classResource = QalabResourceUtils.getClassResource( // env, resource); // if (classResource != null) { // // PJavat@Cinstrumentcobertura.ser?? // CoberturaInstrument obj = new CoberturaInstrument(dataFile); // obj.makeInstrument(classResource.getResource()); // } // // addMarker(env, resource); // return true; // // } catch (CoreException e) { // LimyEclipsePluginUtils.log(e); // } // return false; // } // // /** // * JavaNXeXgP?[X?s}?[J?[???B // * @param env // * @param mainJavaResource JavaNX?i?CNX?j // */ // private void addMarker(LimyQalabEnvironment env, // IResource mainJavaResource) { // // new ExecuteUIJob(env, mainJavaResource).schedule(); // } // /** // * Instrument?Javat@C?B // * @param env // * @param allResources \?[X // * @return Instrument?Javat@C // * @throws CoreException RAO // */ // private IResource[] getTargetJavaFiles(LimyQalabEnvironment env, // Collection<IResource> allResources) // throws CoreException { // // Collection<IResource> results = new HashSet<IResource>(); // // for (IResource resource : allResources) { // if (QalabResourceUtils.isTestResource(resource)) { // // eXgt@C???A?Ct@C // if (resource.getType() == IResource.FILE) { // String name = QalabResourceUtils.getQualifiedMainClassName(env, resource); // IType type = env.getJavaProject().findType(name); // if (type != null) { // results.add(type.getResource()); // } // } else { // env.getJavaProject().findPackageFragment(resource.getFullPath()); //// LimyQalabJavaUtils.getBinDirPath(el) // } // } else if (LimyQalabUtils.isIgnoreSource(env, resource.getFullPath())) { // // do nothing // } else { // results.add(resource); // } // } // // return results.toArray(new IResource[results.size()]); // } /** * Instrument?Javat@C?B * @param env * @param javaElements Javavf * @return Instrument?Javat@C * @throws CoreException RAO */ private IResource[] getTargetJavaFiles(LimyQalabEnvironment env, Collection<IJavaElement> javaElements) throws CoreException { Collection<IResource> results = new HashSet<IResource>(); for (IJavaElement javaElement : javaElements) { IResource resource = javaElement.getResource(); if (QalabResourceUtils.isTestResource(resource)) { // eXgt@C???A?Ct@C if (resource.getType() == IResource.FILE) { String name = QalabResourceUtils.getQualifiedMainClassName(env, resource); IType type = env.getJavaProject().findType(name); if (type != null) { results.add(type.getResource()); } } else if (javaElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { Collection<IPath> sourcePaths = env.getSourcePaths(true); for (IPath path : sourcePaths) { IFolder folder = LimyResourceUtils .newFolder(path.append(javaElement.getElementName().replace('.', '/'))); if (folder.exists()) { results.add(folder); } } } } else if (LimyQalabUtils.isIgnoreSource(env, resource.getFullPath())) { // QA?O\?[X } else { IType[] types = LimyJavaUtils.getAllTypes(javaElement); for (IType type : types) { results.add(type.getResource()); } } } return results.toArray(new IResource[results.size()]); } }