diff --git a/org.eclipse.photran.cdtinterface/.classpath b/org.eclipse.photran.cdtinterface/.classpath index deb6736..c7ac339 100644 --- a/org.eclipse.photran.cdtinterface/.classpath +++ b/org.eclipse.photran.cdtinterface/.classpath @@ -3,5 +3,7 @@ + + diff --git a/org.eclipse.photran.cdtinterface/META-INF/MANIFEST.MF b/org.eclipse.photran.cdtinterface/META-INF/MANIFEST.MF index 0dbd7b1..89ff77d 100644 --- a/org.eclipse.photran.cdtinterface/META-INF/MANIFEST.MF +++ b/org.eclipse.photran.cdtinterface/META-INF/MANIFEST.MF @@ -8,6 +8,10 @@ Bundle-Vendor: %providerName Bundle-Localization: plugin Export-Package: org.eclipse.photran.cdtinterface.makegen, + org.eclipse.photran.cdtinterface.managebuilder, + org.eclipse.photran.cdtinterface.managebuilder.gnu, + org.eclipse.photran.cdtinterface.managebuilder.intel, + org.eclipse.photran.cdtinterface.managebuilder.xlf, org.eclipse.photran.internal.cdtinterface;x-internal:=true, org.eclipse.photran.internal.cdtinterface.core;x-friends:="org.eclipse.photran.ui", org.eclipse.photran.internal.cdtinterface.dom;x-internal:=true, @@ -41,6 +45,7 @@ org.eclipse.ui.views, org.eclipse.cdt.managedbuilder.core, org.eclipse.ui.navigator.resources, - org.eclipse.ui.navigator + org.eclipse.ui.navigator, + org.eclipse.photran.core.vpg;bundle-version="8.0.0" Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/makegen/DefaultFortranDependencyCalculator.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/makegen/DefaultFortranDependencyCalculator.java index f9912b8..da36815 100644 --- a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/makegen/DefaultFortranDependencyCalculator.java +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/makegen/DefaultFortranDependencyCalculator.java @@ -20,7 +20,9 @@ import java.io.Reader; import java.io.StreamTokenizer; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.managedbuilder.core.IConfiguration; @@ -40,20 +42,24 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.photran.internal.cdtinterface.core.FortranLanguage; +import org.eclipse.photran.internal.core.vpg.PhotranVPG; /** * This class implements the Dependency Manager and Output Name Provider interfaces * @author Unknown * @author Timofey Yuvashev 2009 * @author Jeff Overbey -- files were not being closed (Bug 334796) - * + * @author Uchuva -- Use PhotranVPG to find dependencies for the given project + * (Managed Build project, Fall CS 427) + * Refactored: removed resources from getFileNameContainingModule + * function since Photran VPG does not need resources argument * @since 8.0 */ @SuppressWarnings({ "deprecation", "rawtypes", "unchecked", "unused" }) public class DefaultFortranDependencyCalculator implements IManagedDependencyGenerator, IManagedOutputNameProvider { - public static final String MODULE_EXTENSION = "o"; //$NON-NLS-1$ + public static final String MODULE_EXTENSION = "o"; //$NON-NLS-1$ /* * Return a list of the names of all modules used by a file @@ -243,7 +249,7 @@ // to generate .mod files in the directory from which the compiler is run. For MBS, this // is the top-level build directory. // TODO: Support the /module:path option and use that in determining the path of the module file - IPath modName = getModulePath(topBuildDir, modules[im], res, project); + IPath modName = getModulePath(topBuildDir, modules[im], resourcesToSearch, project); modRes.add(project.getFile(modName)); foundDependency = true; break; @@ -280,7 +286,7 @@ private IPath getModulePath(String topBuildDir, String moduleName, IResource[] resources, IProject project) { String fileNameContainingModule; - fileNameContainingModule = getFileNameContainingModule(moduleName, resources, topBuildDir); + fileNameContainingModule = getFileNameContainingModule(resources, moduleName); //If we can't find any files with that module, remove Debug folder if(fileNameContainingModule == null || fileNameContainingModule == "") //$NON-NLS-1$ @@ -302,78 +308,45 @@ } /* - * This method operates under that assumption that - * 1. There will be no 2 files that are named the same, even if they are in separate folder - * 2. There is only 1 module per file - * 3. There are no files that differ in their names only by upper or lower case letters (i.e. file1.f90 and fILe1.f90) + * This method finds the relative path to the filename that contains the + * name of the given module. It returns a string which is the relative + * path to the file containing the given module, with that + * file's extension chopped off. * - * This method finds the relative path to the filename that matches the name of the given module. It - * searches the list of given @resources to compare the names of contained files. It returns a string which - * is the relative path to the file supposedly containing the given module, with that file's extension chopped off. - * - * @moduleName - name of the module that we are comparing files against - * @resources - list of resources that we look through (could be files and folders) + * @moduleName - name of the module that we are retrieving the filename */ - private String getFileNameContainingModule(String moduleName, IResource[] resources, String buildDirName) + @SuppressWarnings("restriction") + public String getFileNameContainingModule(IResource[] resources, String moduleName) { - ArrayList possibleMatchingFiles = new ArrayList(); - if(resources == null || resources.length < 1 || - moduleName == null || moduleName == "") //$NON-NLS-1$ - { - return null; - } - - for(int i = 0; i < resources.length; i++) - { - if(resources[i] instanceof IFile) - { - IFile f = (IFile)resources[i]; - - //Gets rid of the file extension - String fileName = f.getName().replaceFirst("\\..+", ""); //$NON-NLS-1$ //$NON-NLS-2$ - - //If a file name matches a module name exactly -- return the relative path to that file - if(fileName == moduleName) - return f.getProjectRelativePath().toString().replaceFirst("\\..+", ""); //$NON-NLS-1$ //$NON-NLS-2$ - - //Otherwise, check if the two names have different cases - else if(fileName.equalsIgnoreCase(moduleName)) - { - //And if they do, keep it - possibleMatchingFiles.add(f.getProjectRelativePath().toString().replaceFirst("\\..+", "")); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - //If its a folder, recurse, but don't look in other build folders (Bug 326333) - else if(resources[i] instanceof IContainer && !resources[i].isDerived()) - { - IContainer folder = (IContainer)resources[i]; - IResource[] subResource = null; - - //Skip build folder, because it contains files with the same - // names as the one we are looking for (created .o files) - if(folder.getName().equalsIgnoreCase(buildDirName)) - continue; - - try - { - subResource = folder.members(); - } - catch (CoreException e) - { - throw new Error("Could not open a container to explore its files"); //$NON-NLS-1$ - } - - String name = getFileNameContainingModule(moduleName, subResource, buildDirName); - if(name != null) - return name; - } - } - if(possibleMatchingFiles.size() == 1) - return (String) possibleMatchingFiles.get(0); - - return null; - + if(resources == null || resources.length < 1 || + moduleName == null || moduleName == "") //$NON-NLS-1$ + { + return null; + } + List fileList = PhotranVPG.getInstance().findFilesThatExportModule(moduleName); + + return getFilePathFromResources(resources, fileList); } + + + /** + * Returns the file path of the file from file list that matches a + * resource. + * + * @param resources: list of resources within the project + * @param files: list of files + */ + private String getFilePathFromResources(IResource[] resources, List files) + { + for(IFile file: files){ + for (IResource resource : resources){ + if (file.getProjectRelativePath().equals(resource.getProjectRelativePath())){ + return file.getProjectRelativePath().toString().replaceFirst("\\..+", ""); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + } + return null; + } private void removeDir(File f) { @@ -395,7 +368,13 @@ /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderDependencyCalculator#findDependencies(org.eclipse.core.resources.IResource) */ - public IResource[] findDependencies(IResource resource, IProject project) { + @SuppressWarnings("restriction") + public IResource[] findDependencies(IResource resource, IProject project) { + boolean isRefactoringEnableForProject = PhotranVPG.getInstance().shouldProcessProject(project); + if(!isRefactoringEnableForProject){ + forcePhotranVPGUpdate(project, true); + } + ArrayList dependencies = new ArrayList(); Collection fortranContentTypes = new FortranLanguage().getRegisteredContentTypeIds(); @@ -431,10 +410,28 @@ { return new IResource[0]; } + finally{ + if(!isRefactoringEnableForProject){ + PhotranVPG.getInstance().clearDatabase(); + forcePhotranVPGUpdate(project, false); + } + } return (IResource[]) dependencies.toArray(new IResource[dependencies.size()]); } + /** + * Force Photran VPG update and ensure the database is up-to-date + * + * @param project - Project to force VPG update on it + * @param forceUpdate - whether force update + */ + @SuppressWarnings("restriction") + private void forcePhotranVPGUpdate(IProject project, boolean forceUpdate){ + PhotranVPG.getInstance().setPropertyEnableVpg(project, forceUpdate); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + } + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderDependencyCalculator#getCalculatorType() */ diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/BaseManageBuilderToolChainSupported.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/BaseManageBuilderToolChainSupported.java new file mode 100644 index 0000000..7c436ef --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/BaseManageBuilderToolChainSupported.java @@ -0,0 +1,69 @@ +/** + * This class implements managed tool chain supported and outputs + * whether Os, Compiler and tool chain are supported + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder; + +import java.util.Arrays; + +import org.eclipse.cdt.managedbuilder.core.IManagedIsToolChainSupported; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.osgi.framework.Version; + +public abstract class BaseManageBuilderToolChainSupported implements IManagedIsToolChainSupported +{ + private IPlatformOS platformOs = new PlatformOS(); + private ISupportedCompiler supportedCompiler = new CompilerSupported(); + + /** + * Sets mocked OS for unit testing + * + * @param platformOs - Mock up OS to support testing. + */ + public void setPlatformOs(IPlatformOS platformOs) + { + this.platformOs = platformOs; + } + + /** + * Sets mocked compiler for unit testing + * + * @param supportedCompiler - Mock up compiler to support testing. + */ + public void setCompilerSupported(ISupportedCompiler supportedCompiler) + { + this.supportedCompiler = supportedCompiler; + } + + /** + * @return true if the given tool-chain is supported on the system + * otherwise returns false + * + */ + public boolean isSupported(IToolChain toolChain, Version version, String instance) + { + return isOsSupported(toolChain) && isCompilerSupported(); + } + + protected abstract boolean isCompilerSupported(); + + /** + * @return true if the given OS in the tool-chain is supported on + * the system otherwise returns false + * + */ + private boolean isOsSupported(IToolChain toolChain) + { + return Arrays.asList(toolChain.getOSList()).contains(platformOs.getOS()); + } + + /** + * @return true if the given compiler executable and version is + * supported on the system otherwise returns false + * + */ + protected boolean isCompilerSupported(String compilerExecutable, String versionFlag){ + return this.supportedCompiler.isSupported(compilerExecutable, versionFlag); + } +} diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/CompilerSupported.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/CompilerSupported.java new file mode 100644 index 0000000..fc71dfb --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/CompilerSupported.java @@ -0,0 +1,46 @@ +/** + * This class implements supported compiler and outputs whether given compiler + * is supported on the system. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + + +public class CompilerSupported implements ISupportedCompiler +{ + + /** + * @return true if the given compiler is supported on the system + * otherwise returns false + * + */ + @Override + public boolean isSupported(String compilerExecutable, String versionFlag) + { + if(compilerExecutable == null || compilerExecutable == "") //$NON-NLS-1$ + throw new IllegalArgumentException("Invalid compilerExecutable argument"); //$NON-NLS-1$ + if(versionFlag == null || versionFlag == "") //$NON-NLS-1$ + throw new IllegalArgumentException("Invalid versionFlag argument"); //$NON-NLS-1$ + + String[] command = new String[] {compilerExecutable, versionFlag}; + + Process runCompilerCommand = null; + boolean compilerSupported = false; + try { + runCompilerCommand = Runtime.getRuntime().exec(command); + new BufferedReader(new InputStreamReader( + runCompilerCommand.getInputStream())); + compilerSupported = true; + } catch (Exception e) { + System.out.println("Compiler doesn't exist " + e.getMessage()); //$NON-NLS-1$ + } + finally{ + if(runCompilerCommand != null) + runCompilerCommand.destroy(); + } + return compilerSupported; + } +} diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/IPlatformOS.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/IPlatformOS.java new file mode 100644 index 0000000..9dfdbe3 --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/IPlatformOS.java @@ -0,0 +1,10 @@ +/** + * Interface to implement supported platform OS. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder; + +public interface IPlatformOS +{ + String getOS(); +} diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/ISupportedCompiler.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/ISupportedCompiler.java new file mode 100644 index 0000000..03387ac --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/ISupportedCompiler.java @@ -0,0 +1,10 @@ +/** + * Interface to implement supported compiler. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder; + +public interface ISupportedCompiler +{ + public boolean isSupported(String compilerExecutable, String versionFlag); +} diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/PlatformOS.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/PlatformOS.java new file mode 100644 index 0000000..2726271 --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/PlatformOS.java @@ -0,0 +1,20 @@ +/** + * This class implements platform OS and outputs + * Os, used only for unit testing to mock different + * operating systems. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder; + +import org.eclipse.core.runtime.Platform; + +public class PlatformOS implements IPlatformOS +{ + + @Override + public String getOS() + { + return Platform.getOS(); + } + +} diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/gnu/IsGnuToolChainSupported.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/gnu/IsGnuToolChainSupported.java new file mode 100644 index 0000000..832f7de --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/gnu/IsGnuToolChainSupported.java @@ -0,0 +1,25 @@ +/** + * This class extends managed tool chain supported and outputs + * whether Gnu fortran compiler is supported on the system. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder.gnu; + +import org.eclipse.photran.cdtinterface.managebuilder.BaseManageBuilderToolChainSupported; + +public class IsGnuToolChainSupported extends BaseManageBuilderToolChainSupported +{ + private static final String COMPILER_EXECUTABLE = "gfortran"; //$NON-NLS-1$ + private static final String VERSION_FLAG = "-dumpversion"; //$NON-NLS-1$ + + /** + * @return true if the gnu fortran compiler is supported on the system + * otherwise returns false + * + */ + @Override + protected boolean isCompilerSupported() + { + return isCompilerSupported(COMPILER_EXECUTABLE,VERSION_FLAG); + } +} \ No newline at end of file diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/intel/IsIntelToolChainSupported.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/intel/IsIntelToolChainSupported.java new file mode 100644 index 0000000..cf8494e --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/intel/IsIntelToolChainSupported.java @@ -0,0 +1,24 @@ +/** + * This class extends managed tool chain supported and outputs + * whether Intel fortran compiler is supported on the system. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder.intel; + +import org.eclipse.photran.cdtinterface.managebuilder.BaseManageBuilderToolChainSupported; + +public class IsIntelToolChainSupported extends BaseManageBuilderToolChainSupported +{ + private static final String COMPILER_EXECUTABLE = "ifort"; //$NON-NLS-1$ + private static final String VERSION_FLAG = "-version"; //$NON-NLS-1$ + /** + * @return true if the intel fortran compiler is supported on the system + * otherwise returns false + * + */ + @Override + protected boolean isCompilerSupported() + { + return isCompilerSupported(COMPILER_EXECUTABLE, VERSION_FLAG); + } +} diff --git a/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/xlf/IsXlfToolChainSupported.java b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/xlf/IsXlfToolChainSupported.java new file mode 100644 index 0000000..4936222 --- /dev/null +++ b/org.eclipse.photran.cdtinterface/src/org/eclipse/photran/cdtinterface/managebuilder/xlf/IsXlfToolChainSupported.java @@ -0,0 +1,25 @@ +/** + * This class extends managed tool chain supported and outputs + * whether Xlf fortran compiler is supported on the system. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.cdtinterface.managebuilder.xlf; + +import org.eclipse.photran.cdtinterface.managebuilder.BaseManageBuilderToolChainSupported; + +public class IsXlfToolChainSupported extends BaseManageBuilderToolChainSupported +{ + private static final String COMPILER_EXECUTABLE = "xlf"; //$NON-NLS-1$ + private static final String VERSION_FLAG = "-qversion"; //$NON-NLS-1$ + + /** + * @return true if the Xlf fortran compiler is supported on the system + * otherwise returns false + * + */ + @Override + protected boolean isCompilerSupported() + { + return isCompilerSupported(COMPILER_EXECUTABLE, VERSION_FLAG); + } +} diff --git a/org.eclipse.photran.core.vpg.tests/.classpath b/org.eclipse.photran.core.vpg.tests/.classpath index deb6736..577c0b4 100644 --- a/org.eclipse.photran.core.vpg.tests/.classpath +++ b/org.eclipse.photran.core.vpg.tests/.classpath @@ -3,5 +3,6 @@ + diff --git a/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF b/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF index acf04b4..777e8ee 100644 --- a/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF +++ b/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF @@ -17,7 +17,9 @@ org.eclipse.rephraserengine.core, org.eclipse.rephraserengine.testing.junit3, org.eclipse.rephraserengine.ui, - org.eclipse.photran.core + org.eclipse.photran.core, + org.eclipse.photran.cdtinterface;bundle-version="8.0.0", + org.eclipse.cdt.managedbuilder.core;bundle-version="8.1.0" Bundle-ActivationPolicy: lazy Bundle-Activator: org.eclipse.photran.internal.tests.Activator Export-Package: org.eclipse.photran.internal.tests;x-friends:="org.eclipse.photran.core.vpg.tests.failing,org.eclipse.photran.core.vpg.preprocessor.c.tests", diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/PhotranWorkspaceTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/PhotranWorkspaceTestCase.java index 4afdd79..3518bae 100644 --- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/PhotranWorkspaceTestCase.java +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/PhotranWorkspaceTestCase.java @@ -25,12 +25,23 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.settings.model.CIncludePathEntry; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICFolderDescription; +import org.eclipse.cdt.core.settings.model.ICLanguageSetting; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; @@ -60,6 +71,8 @@ * @author Jeff Overbey - Modified so that every test case creates a new project - Added line/column * computation when importing files - Added {@link #compileAndRunFortranProgram(String...)} * Also added marker infrastructure. + * @author Uchuva - Modified to create test sub directories to avoid overwriting test file contents + * when file names are identical in sub directories. */ public abstract class PhotranWorkspaceTestCase extends PhotranTestCase { @@ -169,8 +182,21 @@ PhotranVPG.getInstance().clearDatabase(); } project = null; - } + } + // import file with test directory + protected IFile importFile(String testSrcDir, String fileName, String contents) throws Exception + { + if(testSrcDir != null && testSrcDir != "") + { + IFolder folder = project.getProject().getFolder(testSrcDir); + if(!folder.exists()) + folder.create(true, false, monitor); + fileName = "/" + testSrcDir + "/" + fileName; + } + return importFile(fileName, contents); + } + protected IFile importFile(String fileName, String contents) throws Exception { //Obtain file handle @@ -282,6 +308,14 @@ return result; } + protected IFile importFile(Plugin activator, String srcDir, String filename, String testSrcDir) throws Exception + { + //project.getProject().getFile(filename).delete(true, new NullProgressMonitor()); + IFile result = importFile(testSrcDir, filename, readTestFile(activator, srcDir, filename)); + //project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); + return result; + } + protected String readTestFile(Plugin activator, String srcDir, String filename) throws IOException, URISyntaxException { ArrayList lineMap = new ArrayList(50); diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/IsToolChainSupportedTest.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/IsToolChainSupportedTest.java new file mode 100644 index 0000000..500467f --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/IsToolChainSupportedTest.java @@ -0,0 +1,189 @@ +/** + * Unit test class for testing supported platform OS and compilers for a given + * project type and tool chain in new fortran project wizard. + * + * @author Uchuva -- Use PhotranVPG to find dependencies for the given project + * (Managed Build project, Fall CS 427) + */ +package org.eclipse.photran.internal.tests.managed.build; + +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.photran.cdtinterface.managebuilder.BaseManageBuilderToolChainSupported; +import org.eclipse.photran.cdtinterface.managebuilder.CompilerSupported; +import org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported; +import org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported; +import org.eclipse.photran.cdtinterface.managebuilder.xlf.IsXlfToolChainSupported; +import org.eclipse.photran.internal.tests.PhotranWorkspaceTestCase; + +public class IsToolChainSupportedTest extends PhotranWorkspaceTestCase +{ + //Test win32 and gnu fortran compiler are supported, other OSes are unsupported. + public void testOsWindowsAndGnuIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsGnuToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported,"win32", new String[] {"solaris", "linux", "hpux", "aix", "qnx", "macosx"}, "gfortran", "-dumpversion"); + } + + //Test macosx and gnu fortran compiler are supported, other OSes are unsupported. + public void testOsMacOsXAndGnuIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsGnuToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported,"macosx", new String[] {"solaris", "linux", "hpux", "aix", "qnx", "win32"}, "gfortran", "-dumpversion"); + } + + //Test linux and gnu fortran compiler are supported, other OSes are unsupported. + public void testOsLinuxAndGnuIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsGnuToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported, "linux", new String[] {"win32", "macosx"}, "gfortran", "-dumpversion"); + } + + //Test win32 and intel fortran compiler are supported, other OSes are unsupported. + public void testOsWindowsAndIntelIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsIntelToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported, "win32", new String[] {"solaris", "linux", "hpux", "aix", "qnx", "macosx"}, "ifort", "-version"); + } + + //Test macosx and intel fortran compiler are supported, other OSes are unsupported. + public void testOsMacOsXAndIntelIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsIntelToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported, "macosx", new String[] {"solaris", "linux", "hpux", "aix", "qnx", "win32"}, "ifort", "-version"); + } + + //Test linux and intel fortran compiler are supported, other OSes are unsupported. + public void testOsLinuxAndAndIntelIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsIntelToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported, "linux", new String[] {"win32", "macosx"}, "ifort", "-version"); + } + + //Test win32 and xlf fortran compiler are supported, other OSes are unsupported. + public void testOsWindowsAndXlfIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsXlfToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported, "win32", new String[] {"solaris", "linux", "hpux", "aix", "qnx", "macosx"}, "xlf", "-qversion"); + } + + //Test macosx and xlf fortran compiler are supported, other OSes are unsupported. + public void testOsMacOsXAndXlfIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsXlfToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported,"macosx", new String[] {"solaris", "linux", "hpux", "aix", "qnx", "win32"}, "xlf", "-qversion"); + } + + //Test linux and xlf fortran compiler are supported, other OSes are unsupported. + public void testOsLinuxAndAndXlfIsSupported() throws Exception + { + BaseManageBuilderToolChainSupported toolChainSupported = new IsXlfToolChainSupported(); + osAndAndCompilerIsSupported(toolChainSupported, "linux", new String[] {"win32", "macosx"}, "xlf", "-qversion"); + } + + //Test input validation for empty compiler executable + public void testEmptyCompilerExecutable() throws Exception + { + try + { + CompilerSupported compilerSupported = new CompilerSupported(); + compilerSupported.isSupported("", "-qversion"); + } + catch(IllegalArgumentException e) + { + return; + } + fail("testEmptyCompilerExecutable failed to throw exception"); + } + + //Test input validation for null compiler executable + public void testNullCompilerExecutable() throws Exception + { + try + { + CompilerSupported compilerSupported = new CompilerSupported(); + compilerSupported.isSupported(null, "-qversion"); + } + catch(IllegalArgumentException e) + { + return; + } + fail("testNullCompilerExecutable failed to throw exception"); + } + + //Test input validation for empty version flag + public void testEmptyCompilerFlag() throws Exception + { + try + { + CompilerSupported compilerSupported = new CompilerSupported(); + compilerSupported.isSupported("xlf", ""); + } + catch(IllegalArgumentException e) + { + return; + } + fail("testEmptyCompilerFlag failed to throw exception"); + } + + //Test input validation for null version flag + public void testNullCompilerFlag() throws Exception + { + try + { + CompilerSupported compilerSupported = new CompilerSupported(); + compilerSupported.isSupported("xlf", null); + } + catch(IllegalArgumentException e) + { + return; + } + fail("testNullCompilerFlag failed to throw exception"); + } + + //Test catch block with invalid executable + public void testInvalidCompilerCommand() throws Exception + { + CompilerSupported compilerSupported = new CompilerSupported(); + assertFalse(compilerSupported.isSupported("invalidCompiler", "-version")); + } + + + //Test at least one OS and one fortran compiler is supported + public void testOneOsAndOneCompilerIsSupported() throws Exception + { + boolean hasAtLeastOneToolChainSupport = false; + + IToolChain supportedOs = new MockToolChain(); + supportedOs.setOSList(new String[] {"win32","macosx","solaris", "linux", "hpux", "aix", "qnx"}); + + BaseManageBuilderToolChainSupported toolChainSupported = new IsGnuToolChainSupported(); + + hasAtLeastOneToolChainSupport = toolChainSupported.isSupported(supportedOs, null, null); + + if (!hasAtLeastOneToolChainSupport) { + toolChainSupported = new IsIntelToolChainSupported(); + hasAtLeastOneToolChainSupport = toolChainSupported.isSupported(supportedOs, null, null); + } + + if (!hasAtLeastOneToolChainSupport) { + toolChainSupported = new IsXlfToolChainSupported(); + hasAtLeastOneToolChainSupport = toolChainSupported.isSupported(supportedOs, null, null); + } + + assertTrue(hasAtLeastOneToolChainSupport); + } + + // Helper function to set mock tool chain and test whether OS and compiler are supported. + private void osAndAndCompilerIsSupported(BaseManageBuilderToolChainSupported toolChainSupported, String supportedOsString, String[] unsupportedOsString, String compiler, String versionFlag) + { + toolChainSupported.setPlatformOs(new MockPlatformOS(supportedOsString)); + toolChainSupported.setCompilerSupported(new MockSupportedCompiler(compiler, versionFlag)); + IToolChain supportedOs = new MockToolChain(); + supportedOs.setOSList(new String[] {supportedOsString}); + assertTrue(toolChainSupported.isSupported(supportedOs, null, null)); + IToolChain unsupportedOs = new MockToolChain(); + unsupportedOs.setOSList(unsupportedOsString); + assertFalse(toolChainSupported.isSupported(unsupportedOs, null, null)); + } + +} diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockPlatformOS.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockPlatformOS.java new file mode 100644 index 0000000..b3a8ecf --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockPlatformOS.java @@ -0,0 +1,24 @@ +/** + * This class implements platform OS supported and outputs mocked OS. + * @author Uchuva - Managed Build project, Fall CS 427 + */ +package org.eclipse.photran.internal.tests.managed.build; + +import org.eclipse.photran.cdtinterface.managebuilder.IPlatformOS; + +public class MockPlatformOS implements IPlatformOS +{ + private String os; + + public MockPlatformOS(String os) + { + this.os = os; + } + + @Override + public String getOS() + { + return os; + } + +} diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockSupportedCompiler.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockSupportedCompiler.java new file mode 100644 index 0000000..b676bfb --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockSupportedCompiler.java @@ -0,0 +1,26 @@ +/** + * This class implements supported compiler and outputs result + * based on mocked compiler executable and version flag. + * @author Uchuva - Managed Build project, Fall CS 427 + */ + +package org.eclipse.photran.internal.tests.managed.build; + +import org.eclipse.photran.cdtinterface.managebuilder.ISupportedCompiler; + + +public class MockSupportedCompiler implements ISupportedCompiler +{ + private String compilerExecutable; + private String versionFlag; + public MockSupportedCompiler(String compilerExecutable, String versionFlag){ + this.compilerExecutable = compilerExecutable; + this.versionFlag = versionFlag; + } + + @Override + public boolean isSupported(String compilerExecutable, String versionFlag) + { + return this.compilerExecutable.equals(compilerExecutable) && this.versionFlag.equals(versionFlag); + } +} diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockToolChain.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockToolChain.java new file mode 100644 index 0000000..f2c3b5f --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MockToolChain.java @@ -0,0 +1,702 @@ +/** + * This class implements tool chain and outputs mocked tool chain. + * @author Uchuva - Managed Build project, Fall CS 427 + */ + +package org.eclipse.photran.internal.tests.managed.build; + +import org.eclipse.cdt.core.settings.model.extension.CTargetPlatformData; +import org.eclipse.cdt.managedbuilder.core.BuildException; +import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IFolderInfo; +import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; +import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOptionCategory; +import org.eclipse.cdt.managedbuilder.core.IOptionPathConverter; +import org.eclipse.cdt.managedbuilder.core.IOutputType; +import org.eclipse.cdt.managedbuilder.core.ITargetPlatform; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier; +import org.eclipse.cdt.managedbuilder.macros.IConfigurationBuildMacroSupplier; +import org.osgi.framework.Version; + +public class MockToolChain implements IToolChain +{ + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getId() + */ + @Override + public String getId() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getName() + */ + @Override + public String getName() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getBaseId() + */ + @Override + public String getBaseId() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getVersion() + */ + @Override + public Version getVersion() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IBuildObject#setVersion(org.osgi.framework.Version) + */ + @Override + public void setVersion(Version version) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getManagedBuildRevision() + */ + @Override + public String getManagedBuildRevision() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#createOption(org.eclipse.cdt.managedbuilder.core.IOption, java.lang.String, java.lang.String, boolean) + */ + @Override + public IOption createOption(IOption superClass, String Id, String name, + boolean isExtensionElement) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#removeOption(org.eclipse.cdt.managedbuilder.core.IOption) + */ + @Override + public void removeOption(IOption option) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getOption(java.lang.String) + */ + @Override + @Deprecated + public IOption getOption(String id) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getOptionById(java.lang.String) + */ + @Override + public IOption getOptionById(String id) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getOptionBySuperClassId(java.lang.String) + */ + @Override + public IOption getOptionBySuperClassId(String id) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getOptions() + */ + @Override + public IOption[] getOptions() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getChildCategories() + */ + @Override + public IOptionCategory[] getChildCategories() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#addOptionCategory(org.eclipse.cdt.managedbuilder.core.IOptionCategory) + */ + @Override + public void addOptionCategory(IOptionCategory category) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getOptionCategory(java.lang.String) + */ + @Override + public IOptionCategory getOptionCategory(String id) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#createOptions(org.eclipse.cdt.managedbuilder.core.IHoldsOptions) + */ + @Override + public void createOptions(IHoldsOptions superClass) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#getOptionToSet(org.eclipse.cdt.managedbuilder.core.IOption, boolean) + */ + @Override + public IOption getOptionToSet(IOption option, boolean adjustExtension) throws BuildException + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#needsRebuild() + */ + @Override + public boolean needsRebuild() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IHoldsOptions#setRebuildState(boolean) + */ + @Override + public void setRebuildState(boolean rebuild) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getParent() + */ + @Override + public IConfiguration getParent() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#createTargetPlatform(org.eclipse.cdt.managedbuilder.core.ITargetPlatform, java.lang.String, java.lang.String, boolean) + */ + @Override + public ITargetPlatform createTargetPlatform(ITargetPlatform superClass, String Id, String name, + boolean isExtensionElement) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetPlatform() + */ + @Override + public ITargetPlatform getTargetPlatform() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#removeLocalTargetPlatform() + */ + @Override + public void removeLocalTargetPlatform() + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getVersionsSupported() + */ + @Override + public String getVersionsSupported() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getConvertToId() + */ + @Override + public String getConvertToId() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setVersionsSupported(java.lang.String) + */ + @Override + public void setVersionsSupported(String versionsSupported) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setConvertToId(java.lang.String) + */ + @Override + public void setConvertToId(String convertToId) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#createBuilder(org.eclipse.cdt.managedbuilder.core.IBuilder, java.lang.String, java.lang.String, boolean) + */ + @Override + public IBuilder createBuilder(IBuilder superClass, String Id, String name, + boolean isExtensionElement) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#removeLocalBuilder() + */ + @Override + public void removeLocalBuilder() + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getBuilder() + */ + @Override + public IBuilder getBuilder() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#createTool(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String, java.lang.String, boolean) + */ + @Override + public ITool createTool(ITool superClass, String Id, String name, boolean isExtensionElement) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTools() + */ + @Override + public ITool[] getTools() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTool(java.lang.String) + */ + @Override + public ITool getTool(String id) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getToolsBySuperClassId(java.lang.String) + */ + @Override + public ITool[] getToolsBySuperClassId(String id) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getSuperClass() + */ + @Override + public IToolChain getSuperClass() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#isAbstract() + */ + @Override + public boolean isAbstract() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setIsAbstract(boolean) + */ + @Override + public void setIsAbstract(boolean b) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getUnusedChildren() + */ + @Override + public String getUnusedChildren() + { + // TODO Auto-generated method stub + return null; + } + + private String[] osList; + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getOSList() + */ + @Override + public String[] getOSList() + { + return osList; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setOSList(java.lang.String[]) + */ + @Override + public void setOSList(String[] OSs) + { + osList = OSs; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getArchList() + */ + @Override + public String[] getArchList() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setArchList(java.lang.String[]) + */ + @Override + public void setArchList(String[] archs) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getErrorParserIds() + */ + @Override + public String getErrorParserIds() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getErrorParserIds(org.eclipse.cdt.managedbuilder.core.IConfiguration) + */ + @Override + public String getErrorParserIds(IConfiguration config) + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getErrorParserList() + */ + @Override + public String[] getErrorParserList() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setErrorParserIds(java.lang.String) + */ + @Override + public void setErrorParserIds(String ids) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getDefaultLanguageSettingsProviderIds() + */ + @Override + public String getDefaultLanguageSettingsProviderIds() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getScannerConfigDiscoveryProfileId() + */ + @Override + public String getScannerConfigDiscoveryProfileId() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setScannerConfigDiscoveryProfileId(java.lang.String) + */ + @Override + public void setScannerConfigDiscoveryProfileId(String profileId) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetToolIds() + */ + @Override + public String getTargetToolIds() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setTargetToolIds(java.lang.String) + */ + @Override + public void setTargetToolIds(String targetToolIds) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetToolList() + */ + @Override + public String[] getTargetToolList() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getSecondaryOutputs() + */ + @Override + public IOutputType[] getSecondaryOutputs() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setSecondaryOutputs(java.lang.String) + */ + @Override + public void setSecondaryOutputs(String ids) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#isDirty() + */ + @Override + public boolean isDirty() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setDirty(boolean) + */ + @Override + public void setDirty(boolean isDirty) + { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#isExtensionElement() + */ + @Override + public boolean isExtensionElement() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#isSupported() + */ + @Override + public boolean isSupported() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getEnvironmentVariableSupplier() + */ + @Override + public IConfigurationEnvironmentVariableSupplier getEnvironmentVariableSupplier() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getBuildMacroSupplier() + */ + @Override + public IConfigurationBuildMacroSupplier getBuildMacroSupplier() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getOptionPathConverter() + */ + @Override + public IOptionPathConverter getOptionPathConverter() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getParentFolderInfo() + */ + @Override + public IFolderInfo getParentFolderInfo() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetPlatformData() + */ + @Override + public CTargetPlatformData getTargetPlatformData() + { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#supportsBuild(boolean) + */ + @Override + public boolean supportsBuild(boolean managed) + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#isSystemObject() + */ + @Override + public boolean isSystemObject() + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#matches(org.eclipse.cdt.managedbuilder.core.IToolChain) + */ + @Override + public boolean matches(IToolChain tc) + { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getUniqueRealName() + */ + @Override + public String getUniqueRealName() + { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/ModuleNameDifferentTest.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/ModuleNameDifferentTest.java new file mode 100644 index 0000000..77a0a1e --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/ModuleNameDifferentTest.java @@ -0,0 +1,128 @@ +/** + * Unit test class for testing module name dependency on file name using + * PhotranVPG + * + * @author Uchuva -- Use PhotranVPG to find dependencies for the given project + * (Managed Build project, Fall CS 427) + */ +package org.eclipse.photran.internal.tests.managed.build; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.photran.cdtinterface.makegen.DefaultFortranDependencyCalculator; +import org.eclipse.photran.internal.core.properties.SearchPathProperties; +import org.eclipse.photran.internal.core.vpg.PhotranVPG; +import org.eclipse.photran.internal.tests.Activator; +import org.eclipse.photran.internal.tests.PhotranWorkspaceTestCase; + +public class ModuleNameDifferentTest extends PhotranWorkspaceTestCase +{ + private static final String DIR = "vpg-test-code/managed-build/module-name-different/"; + + // Test module name matches file name + public void testModuleMatchFile() throws Exception + { + String DIR_test = DIR + "test1"; + IResource[] resources = new IResource[1]; + IFile module1 = importFile(Activator.getDefault(), DIR_test, "module1.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "module1"); + assertEquals("module1", fileName); + } + + // Test module name does not match file name + public void testModuleNotMatchFile() throws Exception + { + String DIR_test = DIR + "test2"; + IResource[] resources = new IResource[1]; + IFile module1 = importFile(Activator.getDefault(), DIR_test, "modules.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "module1"); + assertEquals("modules", fileName); + } + + // Test module name does not exist in the file + public void testNonexistentModuleName() throws Exception + { + String DIR_test = DIR + "test3"; + IResource[] resources = new IResource[1]; + IFile module1 = importFile(Activator.getDefault(), DIR_test, "modules.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "nonexistentModule"); + assertNull(fileName); + } + + // Test empty module name + public void testEmptyModuleName() throws Exception + { + String DIR_test = DIR + "test3"; + IResource[] resources = new IResource[1]; + IFile module1 = importFile(Activator.getDefault(), DIR_test, "modules.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, ""); + assertNull(fileName); + } + + // Test null module name + public void testNullModuleName() throws Exception + { + String DIR_test = DIR + "test3"; + IResource[] resources = new IResource[1]; + IFile module1 = importFile(Activator.getDefault(), DIR_test, "modules.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, null); + assertNull(fileName); + } + + // Test empty resources + public void testEmptyResources() throws Exception + { + IResource[] resources = new IResource[0]; + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "module1"); + assertNull(fileName); + } + + // Test null resources + public void testNullResources() throws Exception + { + IResource[] resources = null; + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "module1"); + assertNull(fileName); + } + + // Test set analysis/refactoring enable + public void testSetPropertyEnableVpg() throws Exception + { + // initial setting is false + String vpgDisableProperty = new SearchPathProperties().getProperty(project, SearchPathProperties.ENABLE_VPG_PROPERTY_NAME); + assertFalse(vpgDisableProperty.equals("false")); + + // set it to true + PhotranVPG.getInstance().setPropertyEnableVpg(project, true); + String vpgEnabledProperty = new SearchPathProperties().getProperty(project, SearchPathProperties.ENABLE_VPG_PROPERTY_NAME); + assertTrue(vpgEnabledProperty.equals("true")); + + // set it back to false + PhotranVPG.getInstance().setPropertyEnableVpg(project, false); + vpgDisableProperty = new SearchPathProperties().getProperty(project, SearchPathProperties.ENABLE_VPG_PROPERTY_NAME); + assertTrue(vpgDisableProperty.equals("false")); + } +} diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MulitpleModuleInFileTest.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MulitpleModuleInFileTest.java new file mode 100644 index 0000000..e52915a --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/tests/managed/build/MulitpleModuleInFileTest.java @@ -0,0 +1,104 @@ +/** + * Unit test class for testing multiple modules and files using PhotranVPG + * + * @author Uchuva -- Use PhotranVPG to find dependencies for the given project + * (Managed Build project, Fall CS 427) + */ + +package org.eclipse.photran.internal.tests.managed.build; + + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.photran.cdtinterface.makegen.DefaultFortranDependencyCalculator; +import org.eclipse.photran.internal.core.vpg.PhotranVPG; +import org.eclipse.photran.internal.tests.Activator; +import org.eclipse.photran.internal.tests.PhotranWorkspaceTestCase; + +public class MulitpleModuleInFileTest extends PhotranWorkspaceTestCase +{ + private static final String DIR = "vpg-test-code/managed-build/multiple-module-in-file/"; + + // Test for multiple modules in a single file, and main program + // has same order on how modules are defined in the source file + public void testMultipleModulesInOrder() throws Exception + { + String DIR_test = DIR + "testMultipleModulesInOrder"; + IResource[] resources = new IResource[2]; + IFile main = importFile(Activator.getDefault(), DIR_test, "main.f90"); + IFile module1 = importFile(Activator.getDefault(), DIR_test, "modules.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = main; + resources[1] = module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "module1"); + assertEquals("modules", fileName); + + fileName = calculator.getFileNameContainingModule(resources, "module2"); + assertEquals("modules", fileName); + } + + // Test for multiple modules in a single file, and main program + // has different order on how modules are defined in the source file + public void testMultipleModulesNotInOrder() throws Exception + { + String DIR_test = DIR + "testMultipleModulesNotInOrder"; + IResource[] resources = new IResource[2]; + IFile main = importFile(Activator.getDefault(), DIR_test, "main.f90"); + IFile modules = importFile(Activator.getDefault(), DIR_test, "modules.f90"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + resources[0] = main; + resources[1] = modules; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + String fileName = calculator.getFileNameContainingModule(resources, "module1"); + assertEquals("modules", fileName); + + fileName = calculator.getFileNameContainingModule(resources, "module2"); + assertEquals("modules", fileName); + } + + // Test different module in same file name and different folder + public void testDifferentFoldersIdenticalFilesContainsUniqueModule() throws Exception + { + String DIR_test = DIR + "testDifferentFoldersIdenticalFilesContainsUniqueModule/"; + String DIR_folder1_test = DIR_test + "folder1"; + String DIR_folder2_test = DIR_test + "folder2"; + IResource[] resources = new IResource[2]; + IFile module1 = importFile(Activator.getDefault(), DIR_folder1_test, "modules.f90", "folder1"); + IFile module2 = importFile(Activator.getDefault(), DIR_folder2_test, "modules.f90", "folder2"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + + resources[0] = module1; + resources[1] = module2; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + + String fileNameModule1 = calculator.getFileNameContainingModule(resources, "module1"); + assertEquals("folder1/modules", fileNameModule1); + + String fileNameModule2 = calculator.getFileNameContainingModule(resources, "module2"); + assertEquals("folder2/modules", fileNameModule2); + } + + // Test different module in same file name and different folder + public void testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects() throws Exception + { + String DIR_test = DIR + "testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/"; + String DIR_project1_test = DIR_test + "project1"; + String DIR_project2_folder1_test = DIR_test + "project2/folder1"; + IResource[] resources = new IResource[1]; + IFile project1_module1 = importFile(Activator.getDefault(), DIR_project1_test, "modules.f90"); + IFile project2_module1 = importFile(Activator.getDefault(), DIR_project2_folder1_test, "modules.f90", "folder1"); + PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor()); + + resources[0] = project2_module1; + + DefaultFortranDependencyCalculator calculator = new DefaultFortranDependencyCalculator(); + + String fileNameModule1 = calculator.getFileNameContainingModule(resources, "module1"); + assertEquals("folder1/modules", fileNameModule1); + } +} \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test1/module1.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test1/module1.f90 new file mode 100644 index 0000000..79fa747 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test1/module1.f90 @@ -0,0 +1,2 @@ +module module1 +end module module1 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test2/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test2/modules.f90 new file mode 100644 index 0000000..79fa747 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test2/modules.f90 @@ -0,0 +1,2 @@ +module module1 +end module module1 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test3/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test3/modules.f90 new file mode 100644 index 0000000..79fa747 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/module-name-different/test3/modules.f90 @@ -0,0 +1,2 @@ +module module1 +end module module1 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModule/folder1/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModule/folder1/modules.f90 new file mode 100644 index 0000000..79fa747 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModule/folder1/modules.f90 @@ -0,0 +1,2 @@ +module module1 +end module module1 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModule/folder2/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModule/folder2/modules.f90 new file mode 100644 index 0000000..8cabeca --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModule/folder2/modules.f90 @@ -0,0 +1,2 @@ +module module2 +end module module2 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/project1/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/project1/modules.f90 new file mode 100644 index 0000000..79fa747 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/project1/modules.f90 @@ -0,0 +1,2 @@ +module module1 +end module module1 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/project2/folder1/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/project2/folder1/modules.f90 new file mode 100644 index 0000000..79fa747 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testDifferentFoldersIdenticalFilesContainsUniqueModuleDifferentProjects/project2/folder1/modules.f90 @@ -0,0 +1,2 @@ +module module1 +end module module1 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesInOrder/main.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesInOrder/main.f90 new file mode 100644 index 0000000..1dd73a0 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesInOrder/main.f90 @@ -0,0 +1,4 @@ +program main + USE Module1 + USE Module2 +end program \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesInOrder/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesInOrder/modules.f90 new file mode 100644 index 0000000..4b30182 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesInOrder/modules.f90 @@ -0,0 +1,5 @@ +module module1 +end module module1 + +module module2 +end module module2 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesNotInOrder/main.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesNotInOrder/main.f90 new file mode 100644 index 0000000..9d3951b --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesNotInOrder/main.f90 @@ -0,0 +1,4 @@ +program main + USE Module2 + USE Module1 +end program \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesNotInOrder/modules.f90 b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesNotInOrder/modules.f90 new file mode 100644 index 0000000..4b30182 --- /dev/null +++ b/org.eclipse.photran.core.vpg.tests/vpg-test-code/managed-build/multiple-module-in-file/testMultipleModulesNotInOrder/modules.f90 @@ -0,0 +1,5 @@ +module module1 +end module module1 + +module module2 +end module module2 \ No newline at end of file diff --git a/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPG.java b/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPG.java index b0a1952..929d21d 100644 --- a/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPG.java +++ b/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPG.java @@ -39,6 +39,8 @@ * Photran's Virtual Program Graph. * * @author Jeff Overbey + * @author Uchuva -- Add setPropertyEnableVpg function to set Enable VPG property + * programmatically (Managed Build project, Fall CS 427) */ //public class PhotranVPG extends EclipseVPG public class PhotranVPG extends EclipseVPG @@ -544,6 +546,19 @@ return false; // Project may be closed, or something like that; see Bug 369094 } } + + /** + * Set the ENABLE_VPG_PROPERTY_NAME property for a given project + * + * @author Uchuva + * + * @param project - Project to set its ENABLE_VPG_PROPERTY_NAME property + * @param value - property value to set + */ + public void setPropertyEnableVpg(IProject project, boolean value) + { + new SearchPathProperties().setProperty(project, SearchPathProperties.ENABLE_VPG_PROPERTY_NAME, Boolean.toString(value)); + } public String describeWhyCannotProcessProject(IProject project) { diff --git a/org.eclipse.photran.managedbuilder.gnu.ui/plugin.xml b/org.eclipse.photran.managedbuilder.gnu.ui/plugin.xml index f1086bd..1c16208 100644 --- a/org.eclipse.photran.managedbuilder.gnu.ui/plugin.xml +++ b/org.eclipse.photran.managedbuilder.gnu.ui/plugin.xml @@ -594,7 +594,8 @@ name="%ToolChainName.Dbg" targetTool="photran.managedbuild.tool.gnu.fortran.linker.exe.debug" scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" - id="photran.managedbuild.toolchain.gnu.fortran.exe.debug"> + id="photran.managedbuild.toolchain.gnu.fortran.exe.debug" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported"> + id="photran.managedbuild.toolchain.gnu.fortran.exe.release" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported"> + id="photran.managedbuild.toolchain.gnu.fortran.macosx.exe.debug" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported"> + id="photran.managedbuild.toolchain.gnu.fortran.macosx.exe.release" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported"> + id="photran.managedbuild.toolchain.gnu.fortran.win32.exe.debug" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported"> + id="photran.managedbuild.toolchain.gnu.fortran.win32.exe.release" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.gnu.IsGnuToolChainSupported"> + id="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> + id="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> + id="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2171,7 +2175,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2215,7 +2220,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2269,7 +2275,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2314,7 +2321,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2368,7 +2376,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2423,7 +2432,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2477,7 +2487,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2521,7 +2532,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2575,7 +2587,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2619,7 +2632,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2673,7 +2687,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2727,7 +2742,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2785,7 +2801,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2832,7 +2849,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2890,7 +2908,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.x86_64.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2937,7 +2956,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug"> + superClass="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> @@ -2995,7 +3015,8 @@ buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release"> + superClass="photran.managedbuild.toolchain.intel.fortran.ipf.base" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.intel.IsIntelToolChainSupported"> diff --git a/org.eclipse.photran.managedbuilder.xlf.ui/plugin.xml b/org.eclipse.photran.managedbuilder.xlf.ui/plugin.xml index 049c197..ae2f632 100644 --- a/org.eclipse.photran.managedbuilder.xlf.ui/plugin.xml +++ b/org.eclipse.photran.managedbuilder.xlf.ui/plugin.xml @@ -418,7 +418,8 @@ name="%XLFToolChainName.Dbg" targetTool="photran.managedbuild.tool.macosx.fortran.xlf.linker.macosx.exe.debug" scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile" - id="photran.managedbuild.toolchain.xlf.fortran.macosx.exe.debug"> + id="photran.managedbuild.toolchain.xlf.fortran.macosx.exe.debug" + isToolChainSupported="org.eclipse.photran.cdtinterface.managebuilder.xlf.IsXlfToolChainSupported">