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">