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>