Merge branch 'master' of ssh://git.eclipse.org/gitroot/e4/org.eclipse.e4.utils
Conflicts:
.gitignore
diff --git a/.gitignore b/.gitignore
index 2db576b..e90d179 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.metadata
bin/
*~
*.rej
diff --git a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java
index b81a640..b18214d 100644
--- a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java
+++ b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java
@@ -10,17 +10,28 @@
******************************************************************************/
package org.eclipse.e4.core.functionalprog.optionmonad;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
/**
* An Option instance that does not contain any value.
*
* @param <T> The type that this Option is encapsulating.
*/
public final class None<T> implements Option<T> {
+ private final IStatus additionalInfo;
+
+ /**
+ * Construct a None<T>.
+ */
+ public None() { additionalInfo = Status.CANCEL_STATUS; }
/**
* Construct a None<T>.
*/
- public None() {}
+ public None(IStatus additionalInfo) {
+ this.additionalInfo = Nulls.valueOrSubstitute(additionalInfo, Status.CANCEL_STATUS);
+ }
/**
* A convenience factory method meant to be imported statically and that
@@ -33,6 +44,17 @@
*/
public static <T> Option<T> none() { return new None<T>(); }
+ /**
+ * A convenience factory method meant to be imported statically and that
+ * eliminates a lot of the boilerplate that Java generics impose.
+ *
+ * @param <T> The type of Option object to create. Usually inferred
+ * automatically by the compiler.
+ *
+ * @return a new None<T>.
+ */
+ public static <T> Option<T> none(IStatus additionalInfo) { return new None<T>(additionalInfo); }
+
/* (non-Javadoc)
* @see org.eclipse.e4.core.functionalprog.optionmonad.Option#get()
*/
@@ -60,4 +82,11 @@
public boolean hasValue() {
return false;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.core.functionalprog.optionmonad.Option#getStatus()
+ */
+ public IStatus getStatus() {
+ return additionalInfo;
+ }
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java
index 7b5ec43..09a5175 100644
--- a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java
+++ b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java
@@ -9,6 +9,8 @@
* David Orme - initial API and implementation
******************************************************************************/
package org.eclipse.e4.core.functionalprog.optionmonad;
+
+import org.eclipse.core.runtime.IStatus;
/**
* A Java implementation of the "Option Monad" design pattern. (Note that this
@@ -64,6 +66,17 @@
*
* @return true if this Option contains a value or false if it is empty.
*/
- public boolean hasValue();
+ public boolean hasValue();
+
+ /**
+ * Returns an IStatus providing further information on this result. If
+ * clients do not explicitly provide an IStatus result, then Some(value)
+ * will return Status.OK_STATUS and None will return Status.CANCEL_STATUS.
+ * Alternatively, clients can supply their own IStatus to return along with
+ * Some(value) or None.
+ *
+ * @return IStatus additional information on this operation.
+ */
+ public IStatus getStatus();
}
diff --git a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java
index f6521d7..40eb1e6 100644
--- a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java
+++ b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java
@@ -10,6 +10,9 @@
******************************************************************************/
package org.eclipse.e4.core.functionalprog.optionmonad;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
/**
* An Option instance that contains a value.
*
@@ -17,6 +20,7 @@
*/
public final class Some<T> implements Option<T> {
private final T value;
+ private final IStatus additionalInfo;
/**
* Construct an Option with Some(value).
@@ -25,6 +29,17 @@
*/
public Some(T value) {
this.value = value;
+ this.additionalInfo = Status.OK_STATUS;
+ }
+
+ /**
+ * Construct an Option with Some(value).
+ *
+ * @param value The value to encapsulate.
+ */
+ public Some(T value, IStatus additionalInfo) {
+ this.value = value;
+ this.additionalInfo = Nulls.valueOrSubstitute(additionalInfo, Status.OK_STATUS);
}
/**
@@ -38,6 +53,19 @@
*/
public static <T> Option<T> some(T value) { return new Some<T>(value); }
+ /**
+ * A convenience factory method meant to be imported statically and that
+ * eliminates a lot of the boilerplate that Java generics impose.
+ *
+ * @param <T> The type of Option object to create. Usually inferred
+ * automatically by the compiler.
+ * @param additionalInfo An IStatus providing more information on this operation.
+ *
+ * @return a new Some<T> containing the specified value.
+ */
+ public static <T> Option<T> some(T value, IStatus additionalInfo) { return new Some<T>(value, additionalInfo); }
+
+
/* (non-Javadoc)
* @see org.eclipse.e4.core.functionalprog.optionmonad.Option#get()
*/
@@ -65,5 +93,12 @@
public boolean hasValue() {
return true;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.e4.core.functionalprog.optionmonad.Option#getStatus()
+ */
+ public IStatus getStatus() {
+ return additionalInfo;
+ }
}
diff --git a/org.eclipse.e4.utils.releng/.project b/org.eclipse.e4.utils.releng/.project
new file mode 100644
index 0000000..73c5280
--- /dev/null
+++ b/org.eclipse.e4.utils.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.e4.utils.releng</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.e4.utils.releng/pom.xml b/org.eclipse.e4.utils.releng/pom.xml
new file mode 100644
index 0000000..af6de4e
--- /dev/null
+++ b/org.eclipse.e4.utils.releng/pom.xml
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>com.coconut_palm_software.xscalawt.lib</artifactId>
+ <groupId>com.coconut_palm_software</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <scala.version>2.9.0</scala.version>
+ <tycho-version>0.11.0</tycho-version>
+ <maven-scala-plugin-version>2.14</maven-scala-plugin-version>
+ <encoding>UTF-8</encoding>
+ </properties>
+
+ <prerequisites>
+ <maven>3.0</maven>
+ </prerequisites>
+
+ <modules>
+ <!-- Use this if you want a local target platform rather than the one in the cloud
+ <module>../xscalawt.targetplatform</module>
+ -->
+ <module>../com.coconut_palm_software.xscalawt</module>
+ <module>../com.coconut_palm_software.xscalawt.feature</module>
+ <module>../com.coconut_palm_software.xscalawt.site</module>
+ </modules>
+
+ <repositories>
+ <repository>
+ <id>helios</id>
+ <name>Eclipse Helios p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.eclipse.org/releases/helios/</url>
+ </repository>
+
+ <repository>
+ <id>scala-tools.release</id>
+ <name>Scala Tools maven release repository</name>
+ <url>http://scala-tools.org/repo-releases</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scala-tools.snapshot</id>
+ <name>Scala Tools maven snapshot repository</name>
+ <url>http://scala-tools.org/repo-snapshots</url>
+ <snapshots>
+ <updatePolicy>daily</updatePolicy>
+ </snapshots>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>org.sonatype.tycho</id>
+ <name>Tycho snapshot repository</name>
+ <url>https://repository.sonatype.org/content/repositories/snapshots</url>
+ <snapshots>
+ <updatePolicy>daily</updatePolicy>
+ </snapshots>
+ </pluginRepository>
+ <pluginRepository>
+ <id>scala-tools.release</id>
+ <name>Scala Tools maven release repository</name>
+ <url>http://scala-tools.org/repo-releases</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ <pluginRepository>
+ <id>scala-tools.snapshot</id>
+ <name>Scala Tools maven snapshot repository</name>
+ <url>http://scala-tools.org/repo-snapshots</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <profiles>
+ <profile>
+ <id>scala-2.8.0</id>
+ <activation>
+ <property>
+ <name>scala.version</name>
+ <value>2.8.0</value>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.0.final</id>
+ <name>Scala Refactoring Scala 2.8.0.final p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.0.final</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.0.final</id>
+ <name>Scalariform Scala 2.8.0.final p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.0.final</url>
+ </repository>
+ <repository>
+ <id>scala-toolchain-2.8.0.final</id>
+ <name>Scala Toolchain 2.8.0.final p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.0.final</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>scala-2.8.1</id>
+ <activation>
+ <property>
+ <name>scala.version</name>
+ <value>2.8.1</value>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.1.final</id>
+ <name>Scala Refactoring Scala 2.8.1.final p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.1.final</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.1.final</id>
+ <name>Scalariform Scala 2.8.1.final p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.1.final</url>
+ </repository>
+ <repository>
+ <id>scala-toolchain-2.8.1.final</id>
+ <name>Scala Toolchain 2.8.1.final p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.1.final</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>scala-2.8.1.RC2</id>
+ <activation>
+ <property>
+ <name>scala.version</name>
+ <value>2.8.1.RC2</value>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.1.RC2</id>
+ <name>Scala Refactoring Scala 2.8.1.RC2 p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.1.RC2</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.1.RC2</id>
+ <name>Scalariform Scala 2.8.1.RC2 p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.1.RC2</url>
+ </repository>
+ <repository>
+ <id>scala-toolchain-2.8.1.RC2</id>
+ <name>Scala Toolchain 2.8.1.RC2 p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.1.RC2</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>scala-2.8.0-maintenance</id>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.0.final</id>
+ <name>Scala Refactoring Scala 2.8.0.final p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.0.final</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.0.final</id>
+ <name>Scalariform Scala 2.8.0.final p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.0.final</url>
+ </repository>
+ <repository>
+ <id>scala-toolchain-2.8.0.final-maintenance</id>
+ <name>Scala Toolchain 2.8.0.final-maintenance p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.0.final-maintenance</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>scala-2.8.x</id>
+ <activation>
+ <property>
+ <name>scala.version</name>
+ <value>2.8.1-SNAPSHOT</value>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.1.alpha</id>
+ <name>Scala Refactoring Scala 2.8.1.alpha p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.1.alpha</url>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.1.alpha</id>
+ <name>Scalariform Scala 2.8.1.alpha p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.1.alpha</url>
+ </repository>
+ <repository>
+ <id>scala-toolchain-2.8.1.alpha</id>
+ <name>Scala Toolchain 2.8.1.alpha p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.1.alpha</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>scala-trunk</id>
+ <activation>
+ <property>
+ <name>scala.version</name>
+ <value>2.9.0-SNAPSHOT</value>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-trunk</id>
+ <name>Scala Refactoring Scala trunk p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-trunk</url>
+ </repository>
+ <repository>
+ <id>scalariform-trunk</id>
+ <name>Scalariform Scala trunk p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-trunk</url>
+ </repository>
+ <repository>
+ <id>scala-toolchain-trunk</id>
+ <name>Scala Toolchain trunk p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-trunk</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>local-scala-2.8.0</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-ide</groupId>
+ <artifactId>org.scala-ide.scala.library</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-ide</groupId>
+ <artifactId>org.scala-ide.scala.compiler</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.0.final</id>
+ <name>Scala Refactoring Scala 2.8.0.final p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.0.final</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.0.final</id>
+ <name>Scalariform Scala 2.8.0.final p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.0.final</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>local-scala-2.8.1</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-ide</groupId>
+ <artifactId>org.scala-ide.scala.library</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-ide</groupId>
+ <artifactId>org.scala-ide.scala.compiler</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-2.8.1.alpha</id>
+ <name>Scala Refactoring Scala 2.8.1.alpha p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-2.8.1.alpha</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-2.8.1.alpha</id>
+ <name>Scalariform Scala 2.8.1.alpha p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-2.8.1.alpha</url>
+ </repository>
+ </repositories>
+ </profile>
+ <profile>
+ <id>local-scala-trunk</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-ide</groupId>
+ <artifactId>org.scala-ide.scala.library</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-ide</groupId>
+ <artifactId>org.scala-ide.scala.compiler</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>scala-refactoring-trunk</id>
+ <name>Scala Refactoring Scala trunk p2 repository</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scala-refactoring-trunk</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>scalariform-trunk</id>
+ <name>Scalariform Scala trunk p2 repo</name>
+ <layout>p2</layout>
+ <url>http://download.scala-ide.org/scalariform-trunk</url>
+ </repository>
+ </repositories>
+ </profile>
+ </profiles>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.sonatype.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <extensions>true</extensions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.sonatype.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <resolver>p2</resolver>
+ <environments>
+ <environment>
+ <os>linux</os>
+ <ws>gtk</ws>
+ <arch>x86</arch>
+ </environment>
+ <environment>
+ <os>win32</os>
+ <ws>win32</ws>
+ <arch>x86</arch>
+ </environment>
+ <!-- For some reason, adding this breaks the build?
+ <environment> <os>macosx</os> <ws>carbon</ws> <arch>x86</arch>
+ </environment> <environment> <os>macosx</os> <ws>cocoa</ws>
+ <arch>x86_64</arch> </environment>
+ -->
+ </environments>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
+
+</project>