Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Schindl2013-05-08 22:05:26 +0000
committerTom Schindl2013-05-08 22:05:26 +0000
commit5be5cb1b2ab19af828fc9a69a6ad3e229f7dc214 (patch)
tree937301dc480f5f0be49ad6aa532ac8c0651a8ddd
parentd2513a4500eeb5e3418ddf40bc92fc506b2063cf (diff)
downloadorg.eclipse.efxclipse-5be5cb1b2ab19af828fc9a69a6ad3e229f7dc214.tar.gz
org.eclipse.efxclipse-5be5cb1b2ab19af828fc9a69a6ad3e229f7dc214.tar.xz
org.eclipse.efxclipse-5be5cb1b2ab19af828fc9a69a6ad3e229f7dc214.zip
initial check in
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/.classpath7
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/.gitignore2
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/.project28
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.resources.prefs2
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.runtime.prefs2
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.jdt.core.prefs7
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/META-INF/MANIFEST.MF11
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/OSGI-INF/l10n/bundle.properties3
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/about.html28
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/build.properties6
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/pom.xml34
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.adapter/src/org/eclipse/pde/core/IClasspathContributor.java58
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/.classpath7
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/.gitignore2
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/.project28
-rw-r--r--bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project.swpbin0 -> 12288 bytes
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.resources.prefs2
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.runtime.prefs2
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.jdt.core.prefs7
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/IP-TODO.txt1
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/META-INF/MANIFEST.MF12
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/OSGI-INF/l10n/bundle.properties3
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/about.html28
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/build.properties7
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/fragment.xml6
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/pom.xml34
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/schema/pluginClasspathContributors.exsd119
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.pde.fragment/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java510
-rwxr-xr-xreleng/org.eclipse.fx.ide.releng/pom.xml2
29 files changed, 958 insertions, 0 deletions
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.classpath b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.classpath
new file mode 100755
index 000000000..b1dabee38
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.gitignore b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.gitignore
new file mode 100755
index 000000000..4dc009173
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.gitignore
@@ -0,0 +1,2 @@
+/target
+/bin
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.project b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.project
new file mode 100755
index 000000000..f83f8fd35
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.fx.ide.pde.adapter</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.resources.prefs b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.resources.prefs
new file mode 100755
index 000000000..4824b8026
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.runtime.prefs b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.runtime.prefs
new file mode 100755
index 000000000..deae05a97
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\r\n
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.jdt.core.prefs b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 000000000..f42de363a
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/META-INF/MANIFEST.MF
new file mode 100755
index 000000000..a0bb4f29c
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.fx.ide.pde.adapter
+Bundle-Version: 0.8.1.qualifier
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.jdt.core;bundle-version="[3.7.0,3.9.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: org.eclipse.pde.core
+Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/OSGI-INF/l10n/bundle.properties b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/OSGI-INF/l10n/bundle.properties
new file mode 100755
index 000000000..02d9d97d9
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,3 @@
+#Properties file for org.eclipse.fx.ide.pde.adapter
+Bundle-Vendor = BestSolution.at
+Bundle-Name = Adaptors for PDE \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/about.html b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/about.html
new file mode 100755
index 000000000..ecd1378e9
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The BestSolution.at makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the BestSolution.at, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/build.properties b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/build.properties
new file mode 100755
index 000000000..bad151d65
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ OSGI-INF/
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/pom.xml b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/pom.xml
new file mode 100755
index 000000000..061b98663
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/pom.xml
@@ -0,0 +1,34 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>e(fx)clipse - IDE - PDE Classpath Enhancer</name>
+ <groupId>org.eclipse.fx.ide</groupId>
+ <artifactId>org.eclipse.fx.ide.pde.adapter</artifactId>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.fx.ide</groupId>
+ <artifactId>releng</artifactId>
+ <relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
+ <version>0.8.1-SNAPSHOT</version>
+ </parent>
+
+ <build>
+ <resources>
+ <!-- to ensure that the feature lookup of the ui test works -->
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>META-INF/</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.adapter/src/org/eclipse/pde/core/IClasspathContributor.java b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/src/org/eclipse/pde/core/IClasspathContributor.java
new file mode 100755
index 000000000..3ad08a834
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.adapter/src/org/eclipse/pde/core/IClasspathContributor.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2013 BestSolution.at and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BestSolution.at - initial API and implementation
+ * IBM Corporation - ongoing enhancements
+ *******************************************************************************/
+package org.eclipse.pde.core;
+
+import java.util.List;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+
+/**
+ * Implementors of this interface can contribute additional {@link IClasspathEntry}
+ * to a plug-in project as the classpath is computed. The contributor is consulted
+ * when the initial classpath for a plug-in project is calculated as well as whenever
+ * a new bundle dependency is created.
+ * <p>
+ * A classpath contributor is declared as an extension (<code>org.eclipse.pde.core.pluginClasspathContributors</code>).
+ * </p>
+ * <p>
+ * The added classpath entries are only stored as long as the project classpath is and will
+ * not be considered during plug-in or feature export.
+ * </p>
+ *
+ * @since 3.9
+ */
+public interface IClasspathContributor {
+
+ /**
+ * Get any additional classpath entries to add to a project when its classpath is
+ * first computed. The provided {@link BundleDescription} describes the plug-in
+ * project that the classpath is being computed for. Additional PDE model information
+ * can be obtained using {@link PluginRegistry#findModel(BundleDescription)}.
+ *
+ * @param project the bundle descriptor for the plug-in project having its classpath computed
+ * @return additional classpath entries to add to the project, possibly empty, must not be <code>null</code>
+ */
+ public List<IClasspathEntry> getInitialEntries(BundleDescription project);
+
+ /**
+ * Get any additional classpath entries to add to a project when a new bundle
+ * is being added to the project classpath as a dependency. The {@link BundleDescription}
+ * is provided for both the plug-in that the classpath is being calculated for and
+ * the dependency being added. The dependency may be a project in the workspace or an
+ * external bundle from the target platform.
+ *
+ * @param project the bundle descriptor for the plug-in project having its classpath computed
+ * @param addedDependency the bundle descriptor for the bundle being added to the classpath as a dependency
+ * @return additional classpath entries to add to the project, possibly empty, must not be <code>null</code>
+ */
+ public List<IClasspathEntry> getEntriesForDependency(BundleDescription project, BundleDescription addedDependency);
+}
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.classpath b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.classpath
new file mode 100755
index 000000000..b1dabee38
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.gitignore b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.gitignore
new file mode 100755
index 000000000..4dc009173
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.gitignore
@@ -0,0 +1,2 @@
+/target
+/bin
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project
new file mode 100755
index 000000000..6c989117a
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.fx.ide.pde.fragment</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project.swp b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project.swp
new file mode 100644
index 000000000..5d253cbb1
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.project.swp
Binary files differ
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.resources.prefs b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.resources.prefs
new file mode 100755
index 000000000..4824b8026
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.runtime.prefs b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.runtime.prefs
new file mode 100755
index 000000000..deae05a97
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\r\n
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.jdt.core.prefs b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 000000000..f42de363a
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/IP-TODO.txt b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/IP-TODO.txt
new file mode 100755
index 000000000..8072add0d
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/IP-TODO.txt
@@ -0,0 +1 @@
+Class is copied from PDE 3.9 \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/META-INF/MANIFEST.MF
new file mode 100755
index 000000000..316dd8b32
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.fx.ide.pde.fragment;singleton:=true
+Bundle-Version: 0.8.1.qualifier
+Fragment-Host: org.eclipse.pde.core;bundle-version="[3.7.0,3.9.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Equinox-BundleType: fxpatch.fragment
+Require-Bundle: org.eclipse.fx.ide.jdt.core;bundle-version="0.8.1",
+ org.eclipse.fx.ide.pde.adapter;bundle-version="0.8.1"
+Bundle-Vendor: %Bundle-Vendor
+Export-Package: org.eclipse.pde.core
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/OSGI-INF/l10n/bundle.properties b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/OSGI-INF/l10n/bundle.properties
new file mode 100755
index 000000000..15d7826d0
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,3 @@
+#Properties file for org.eclipse.fx.ide.pde.fragment
+Bundle-Vendor = BestSolution.at
+Bundle-Name = Fragment which patches PDE \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/about.html b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/about.html
new file mode 100755
index 000000000..ecd1378e9
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 2, 2006</p>
+<h3>License</h3>
+
+<p>The BestSolution.at makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the BestSolution.at, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/build.properties b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/build.properties
new file mode 100755
index 000000000..ec79a6ae8
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ OSGI-INF/,\
+ fragment.xml
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/fragment.xml b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/fragment.xml
new file mode 100755
index 000000000..f4374ca4b
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/fragment.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<fragment>
+ <extension-point id="pluginClasspathContributors" name="pluginClasspathContributors" schema="schema/pluginClasspathContributors.exsd"/>
+
+</fragment>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/pom.xml b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/pom.xml
new file mode 100755
index 000000000..060f703cc
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/pom.xml
@@ -0,0 +1,34 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <name>e(fx)clipse - IDE - PDE Patch Fragment</name>
+ <groupId>org.eclipse.fx.ide</groupId>
+ <artifactId>org.eclipse.fx.ide.pde.fragment</artifactId>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.fx.ide</groupId>
+ <artifactId>releng</artifactId>
+ <relativePath>../../../releng/org.eclipse.fx.ide.releng/pom.xml</relativePath>
+ <version>0.8.1-SNAPSHOT</version>
+ </parent>
+
+ <build>
+ <resources>
+ <!-- to ensure that the feature lookup of the ui test works -->
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>META-INF/</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/schema/pluginClasspathContributors.exsd b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/schema/pluginClasspathContributors.exsd
new file mode 100755
index 000000000..11b06d70c
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/schema/pluginClasspathContributors.exsd
@@ -0,0 +1,119 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.pde.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.pde.core" id="pluginClasspathContributors" name="Plug-in Classpath Contributors"/>
+ </appinfo>
+ <documentation>
+ This extension point provides a mechanism to contribute additional classpath entries to a plug-in project when the PDE classpath is computered. Each plug-in classpath contributor is consulted for additional entries when the initial classpath is calculated as well as whenever a new bundle dependency is added to the project.
+
+The additional classpath entries are only stored as long as the project classpath is. The additional entries will not be considered during plug-in or feature export.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="contributor"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="contributor">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ The class that implements the plug-in classpath contributor. The class must implement &lt;code&gt;IClasspathContributor&lt;/code&gt;
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.pde.core.IClasspathContributor"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ 3.9
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ The following is an example of the classpath contributor
+
+&lt;p&gt;
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.pde.core.pluginClasspathContributors&quot;&gt;
+ &lt;contribtor
+ class=&quot;at.bestsolution.efxclipse.tooling.pde.core.JavaFXClassPathExtender&quot;&gt;
+ &lt;/contribtor&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ Each contributor must provide a class that implements &lt;code&gt;org.eclipse.pde.core.IClasspathContributor&lt;/code&gt;
+ </documentation>
+ </annotation>
+
+
+ <annotation>
+ <appinfo>
+ <meta.section type="copyright"/>
+ </appinfo>
+ <documentation>
+ Copyright (c) 2013 BestSolution.at and others.&amp;lt;br&amp;gt;
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+&amp;lt;a href=&amp;quot;http://www.eclipse.org/legal/epl-v10.html&amp;quot;&amp;gt;http://www.eclipse.org/legal/epl-v10.html&amp;lt;/a&amp;gt;
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/bundles/tooling/org.eclipse.fx.ide.pde.fragment/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java
new file mode 100755
index 000000000..3e9e01f8a
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.pde.fragment/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java
@@ -0,0 +1,510 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.core;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.jdt.core.*;
+import org.eclipse.osgi.service.resolver.*;
+import org.eclipse.pde.core.IClasspathContributor;
+import org.eclipse.pde.core.build.IBuild;
+import org.eclipse.pde.core.build.IBuildEntry;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.build.IBuildPropertiesConstants;
+import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
+
+public class RequiredPluginsClasspathContainer extends PDEClasspathContainer implements IClasspathContainer {
+
+ private IPluginModelBase fModel;
+ private IBuild fBuild;
+
+ private static boolean DEBUG = false;
+
+ private IClasspathEntry[] fEntries = null;
+
+ /**
+ * Cached list of {@link IClasspathContributor} from plug-in extensions
+ * @see #getClasspathContributors()
+ */
+ private List<IClasspathContributor> fClasspathContributors = null;
+
+ static {
+ DEBUG = PDECore.getDefault().isDebugging() && "true".equals(Platform.getDebugOption("org.eclipse.pde.core/classpath")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Constructor for RequiredPluginsClasspathContainer.
+ */
+ public RequiredPluginsClasspathContainer(IPluginModelBase model) {
+ this(model, null);
+ }
+
+ public RequiredPluginsClasspathContainer(IPluginModelBase model, IBuild build) {
+ fModel = model;
+ fBuild = build;
+ System.err.println("LAUNCHING PATCHED CLASSPATH CONTAINER");
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jdt.core.IClasspathContainer#getKind()
+ */
+ public int getKind() {
+ return K_APPLICATION;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jdt.core.IClasspathContainer#getPath()
+ */
+ public IPath getPath() {
+ return PDECore.REQUIRED_PLUGINS_CONTAINER_PATH;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jdt.core.IClasspathContainer#getDescription()
+ */
+ public String getDescription() {
+ return PDECoreMessages.RequiredPluginsClasspathContainer_description;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jdt.core.IClasspathContainer#getClasspathEntries()
+ */
+ public IClasspathEntry[] getClasspathEntries() {
+ if (fModel == null) {
+ if (DEBUG) {
+ System.out.println("********Returned an empty container"); //$NON-NLS-1$
+ System.out.println();
+ }
+ return new IClasspathEntry[0];
+ }
+ if (fEntries == null) {
+ fEntries = computePluginEntries();
+ }
+ if (DEBUG) {
+ System.out.println("Dependencies for plugin '" + fModel.getPluginBase().getId() + "':"); //$NON-NLS-1$ //$NON-NLS-2$
+ for (int i = 0; i < fEntries.length; i++) {
+ System.out.println(fEntries[i]);
+ }
+ System.out.println();
+ }
+ return fEntries;
+ }
+
+ private IClasspathEntry[] computePluginEntries() {
+ System.err.println("COMPUTING ENTRIES");
+ ArrayList<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
+ try {
+ BundleDescription desc = fModel.getBundleDescription();
+ if (desc == null)
+ return new IClasspathEntry[0];
+
+ Map<BundleDescription, ArrayList<Rule>> map = retrieveVisiblePackagesFromState(desc);
+
+ // Add any library entries contributed via classpath contributor extension (Bug 363733)
+ for (IClasspathContributor cc : getClasspathContributors()) {
+ System.err.println("Consulting " + cc);
+ List<IClasspathEntry> classpathEntries = cc.getInitialEntries(desc);
+ if (classpathEntries == null || classpathEntries.isEmpty()) {
+ continue;
+ }
+ entries.addAll(classpathEntries);
+ }
+
+ HashSet<BundleDescription> added = new HashSet<BundleDescription>();
+
+ // to avoid cycles, e.g. when a bundle imports a package it exports
+ added.add(desc);
+
+ HostSpecification host = desc.getHost();
+ if (host != null) {
+ addHostPlugin(host, added, map, entries);
+ } else if ("true".equals(System.getProperty("pde.allowCycles"))) { //$NON-NLS-1$ //$NON-NLS-2$
+ BundleDescription[] fragments = desc.getFragments();
+ for (int i = 0; i < fragments.length; i++) {
+ if (fragments[i].isResolved()) {
+ addPlugin(fragments[i], false, map, entries);
+ }
+ }
+ }
+
+ // add dependencies
+ BundleSpecification[] required = desc.getRequiredBundles();
+ for (int i = 0; i < required.length; i++) {
+ addDependency((BundleDescription) required[i].getSupplier(), added, map, entries);
+ }
+
+ if (fBuild == null)
+ fBuild = ClasspathUtilCore.getBuild(fModel);
+ if (fBuild != null)
+ addSecondaryDependencies(desc, added, entries);
+
+ // add Import-Package
+ // sort by symbolicName_version to get a consistent order
+ Map<String, BundleDescription> sortedMap = new TreeMap<String, BundleDescription>();
+ Iterator<BundleDescription> iter = map.keySet().iterator();
+ while (iter.hasNext()) {
+ BundleDescription bundle = iter.next();
+ sortedMap.put(bundle.toString(), bundle);
+ }
+
+ iter = sortedMap.values().iterator();
+ while (iter.hasNext()) {
+ BundleDescription bundle = iter.next();
+ IPluginModelBase model = PluginRegistry.findModel(bundle);
+ if (model != null && model.isEnabled())
+ addDependencyViaImportPackage(model.getBundleDescription(), added, map, entries);
+ }
+
+ if (fBuild != null)
+ addExtraClasspathEntries(added, entries);
+
+ } catch (CoreException e) {
+ }
+ return entries.toArray(new IClasspathEntry[entries.size()]);
+ }
+
+ /**
+ * Return the list of {@link IClasspathContributor}s provided by the
+ * <code>org.eclipse.pde.core.pluginClasspathContributors</code> extension point.
+ * @return list of classpath contributors from the extension point
+ */
+ private List<IClasspathContributor> getClasspathContributors() {
+ if (fClasspathContributors == null) {
+ fClasspathContributors = new ArrayList<IClasspathContributor>();
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IConfigurationElement[] elements = registry.getConfigurationElementsFor("org.eclipse.pde.core.pluginClasspathContributors"); //$NON-NLS-1$
+ for (int i = 0; i < elements.length; i++) {
+ try {
+ fClasspathContributors.add((IClasspathContributor) elements[i].createExecutableExtension("class")); //$NON-NLS-1$
+ } catch (CoreException e) {
+ PDECore.log(e.getStatus());
+ }
+ }
+ }
+ return fClasspathContributors;
+ }
+
+ private Map<BundleDescription, ArrayList<Rule>> retrieveVisiblePackagesFromState(BundleDescription desc) {
+ Map<BundleDescription, ArrayList<Rule>> visiblePackages = new HashMap<BundleDescription, ArrayList<Rule>>();
+ StateHelper helper = Platform.getPlatformAdmin().getStateHelper();
+ addVisiblePackagesFromState(helper, desc, visiblePackages);
+ if (desc.getHost() != null)
+ addVisiblePackagesFromState(helper, (BundleDescription) desc.getHost().getSupplier(), visiblePackages);
+ return visiblePackages;
+ }
+
+ private void addVisiblePackagesFromState(StateHelper helper, BundleDescription desc, Map<BundleDescription, ArrayList<Rule>> visiblePackages) {
+ if (desc == null)
+ return;
+ ExportPackageDescription[] exports = helper.getVisiblePackages(desc);
+ for (int i = 0; i < exports.length; i++) {
+ BundleDescription exporter = exports[i].getExporter();
+ if (exporter == null)
+ continue;
+ ArrayList<Rule> list = visiblePackages.get(exporter);
+ if (list == null) {
+ list = new ArrayList<Rule>();
+ visiblePackages.put(exporter, list);
+ }
+ Rule rule = getRule(helper, desc, exports[i]);
+ if (!list.contains(rule))
+ list.add(rule);
+ }
+ }
+
+ private Rule getRule(StateHelper helper, BundleDescription desc, ExportPackageDescription export) {
+ Rule rule = new Rule();
+ rule.discouraged = helper.getAccessCode(desc, export) == StateHelper.ACCESS_DISCOURAGED;
+ String name = export.getName();
+ rule.path = (name.equals(".")) ? new Path("*") : new Path(name.replaceAll("\\.", "/") + "/*"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ return rule;
+ }
+
+ protected void addDependencyViaImportPackage(BundleDescription desc, HashSet<BundleDescription> added, Map<BundleDescription, ArrayList<Rule>> map, ArrayList<IClasspathEntry> entries) throws CoreException {
+ if (desc == null || !added.add(desc))
+ return;
+
+ addPlugin(desc, true, map, entries);
+
+ if (hasExtensibleAPI(desc) && desc.getContainingState() != null) {
+ BundleDescription[] fragments = desc.getFragments();
+ for (int i = 0; i < fragments.length; i++) {
+ if (fragments[i].isResolved())
+ addDependencyViaImportPackage(fragments[i], added, map, entries);
+ }
+ }
+ }
+
+ private void addDependency(BundleDescription desc, HashSet<BundleDescription> added, Map<BundleDescription, ArrayList<Rule>> map, ArrayList<IClasspathEntry> entries) throws CoreException {
+ addDependency(desc, added, map, entries, true);
+ }
+
+ private void addDependency(BundleDescription desc, HashSet<BundleDescription> added, Map<BundleDescription, ArrayList<Rule>> map, ArrayList<IClasspathEntry> entries, boolean useInclusion) throws CoreException {
+ if (desc == null || !added.add(desc))
+ return;
+
+ BundleDescription[] fragments = hasExtensibleAPI(desc) ? desc.getFragments() : new BundleDescription[0];
+
+ // add fragment patches before host
+ for (int i = 0; i < fragments.length; i++) {
+ if (fragments[i].isResolved() && ClasspathUtilCore.isPatchFragment(fragments[i])) {
+ addDependency(fragments[i], added, map, entries, useInclusion);
+ }
+ }
+
+ addPlugin(desc, useInclusion, map, entries);
+
+ // add fragments that are not patches after the host
+ for (int i = 0; i < fragments.length; i++) {
+ if (fragments[i].isResolved() && !ClasspathUtilCore.isPatchFragment(fragments[i])) {
+ addDependency(fragments[i], added, map, entries, useInclusion);
+ }
+ }
+
+ BundleSpecification[] required = desc.getRequiredBundles();
+ for (int i = 0; i < required.length; i++) {
+ if (required[i].isExported()) {
+ addDependency((BundleDescription) required[i].getSupplier(), added, map, entries, useInclusion);
+ }
+ }
+ }
+
+ private boolean addPlugin(BundleDescription desc, boolean useInclusions, Map<BundleDescription, ArrayList<Rule>> map, ArrayList<IClasspathEntry> entries) throws CoreException {
+ IPluginModelBase model = PluginRegistry.findModel(desc);
+ if (model == null || !model.isEnabled())
+ return false;
+
+ IResource resource = model.getUnderlyingResource();
+ Rule[] rules = useInclusions ? getInclusions(map, model) : null;
+
+ BundleDescription hostBundle = fModel.getBundleDescription();
+ if (desc == null)
+ return false;
+
+ // Add any library entries contributed via classpath contributor extension (Bug 363733)
+ for (IClasspathContributor cc : getClasspathContributors()) {
+ List<IClasspathEntry> classpathEntries = cc.getEntriesForDependency(hostBundle, desc);
+ if (classpathEntries == null || classpathEntries.isEmpty()) {
+ continue;
+ }
+ entries.addAll(classpathEntries);
+ }
+
+ if (resource != null) {
+ addProjectEntry(resource.getProject(), rules, entries);
+ } else {
+ addExternalPlugin(model, rules, entries);
+ }
+ return true;
+ }
+
+ private Rule[] getInclusions(Map<BundleDescription, ArrayList<Rule>> map, IPluginModelBase model) {
+ BundleDescription desc = model.getBundleDescription();
+ if (desc == null || "false".equals(System.getProperty("pde.restriction")) //$NON-NLS-1$ //$NON-NLS-2$
+ || !(fModel instanceof IBundlePluginModelBase) || TargetPlatformHelper.getTargetVersion() < 3.1)
+ return null;
+
+ Rule[] rules;
+
+ if (desc.getHost() != null)
+ rules = getInclusions(map, (BundleDescription) desc.getHost().getSupplier());
+ else
+ rules = getInclusions(map, desc);
+
+ return (rules.length == 0 && !ClasspathUtilCore.hasBundleStructure(model)) ? null : rules;
+ }
+
+ private Rule[] getInclusions(Map<BundleDescription, ArrayList<Rule>> map, BundleDescription desc) {
+ ArrayList<?> list = map.get(desc);
+ return list != null ? (Rule[]) list.toArray(new Rule[list.size()]) : new Rule[0];
+ }
+
+ private void addHostPlugin(HostSpecification hostSpec, HashSet<BundleDescription> added, Map<BundleDescription, ArrayList<Rule>> map, ArrayList<IClasspathEntry> entries) throws CoreException {
+ BaseDescription desc = hostSpec.getSupplier();
+
+ if (desc instanceof BundleDescription) {
+ BundleDescription host = (BundleDescription) desc;
+
+ // add host plug-in
+ if (added.add(host) && addPlugin(host, false, map, entries)) {
+ BundleSpecification[] required = host.getRequiredBundles();
+ for (int i = 0; i < required.length; i++) {
+ addDependency((BundleDescription) required[i].getSupplier(), added, map, entries);
+ }
+
+ // add Import-Package
+ ImportPackageSpecification[] imports = host.getImportPackages();
+ for (int i = 0; i < imports.length; i++) {
+ BaseDescription supplier = imports[i].getSupplier();
+ if (supplier instanceof ExportPackageDescription) {
+ addDependencyViaImportPackage(((ExportPackageDescription) supplier).getExporter(), added, map, entries);
+ }
+ }
+ }
+ }
+ }
+
+ private boolean hasExtensibleAPI(BundleDescription desc) {
+ IPluginModelBase model = PluginRegistry.findModel(desc);
+ return model != null ? ClasspathUtilCore.hasExtensibleAPI(model) : false;
+ }
+
+ protected void addExtraClasspathEntries(HashSet<BundleDescription> added, ArrayList<IClasspathEntry> entries) {
+ IBuildEntry[] buildEntries = fBuild.getBuildEntries();
+ for (int i = 0; i < buildEntries.length; i++) {
+ String name = buildEntries[i].getName();
+ if (name.equals(IBuildPropertiesConstants.PROPERTY_JAR_EXTRA_CLASSPATH) || name.startsWith(IBuildPropertiesConstants.PROPERTY_EXTRAPATH_PREFIX)) {
+ addExtraClasspathEntries(added, entries, buildEntries[i].getTokens());
+ }
+ }
+ }
+
+ protected void addExtraClasspathEntries(HashSet<BundleDescription> added, ArrayList<IClasspathEntry> entries, String[] tokens) {
+ for (int i = 0; i < tokens.length; i++) {
+ IPath path = Path.fromPortableString(tokens[i]);
+ if (!path.isAbsolute()) {
+ File file = new File(fModel.getInstallLocation(), path.toString());
+ if (file.exists()) {
+ IFile resource = PDECore.getWorkspace().getRoot().getFileForLocation(new Path(file.getAbsolutePath()));
+ if (resource != null && resource.getProject().equals(fModel.getUnderlyingResource().getProject())) {
+ addExtraLibrary(resource.getFullPath(), null, entries);
+ continue;
+ }
+ }
+ if (path.segmentCount() >= 3 && "..".equals(path.segment(0))) { //$NON-NLS-1$
+ path = path.removeFirstSegments(1);
+ path = Path.fromPortableString("platform:/plugin/").append(path); //$NON-NLS-1$
+ } else {
+ continue;
+ }
+ }
+
+ if (!path.toPortableString().startsWith("platform:")) { //$NON-NLS-1$
+ addExtraLibrary(path, null, entries);
+ } else {
+ int count = path.getDevice() == null ? 4 : 3;
+ if (path.segmentCount() >= count) {
+ String pluginID = path.segment(count - 2);
+ if (added.contains(pluginID))
+ continue;
+ IPluginModelBase model = PluginRegistry.findModel(pluginID);
+ if (model != null && model.isEnabled()) {
+ path = path.setDevice(null);
+ path = path.removeFirstSegments(count - 1);
+ if (model.getUnderlyingResource() == null) {
+ File file = new File(model.getInstallLocation(), path.toOSString());
+ if (file.exists()) {
+ addExtraLibrary(new Path(file.getAbsolutePath()), model, entries);
+ }
+ } else {
+ IProject project = model.getUnderlyingResource().getProject();
+ IFile file = project.getFile(path);
+ if (file.exists()) {
+ addExtraLibrary(file.getFullPath(), model, entries);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void addSecondaryDependencies(BundleDescription desc, HashSet<BundleDescription> added, ArrayList<IClasspathEntry> entries) {
+ try {
+ IBuildEntry entry = fBuild.getEntry(IBuildEntry.SECONDARY_DEPENDENCIES);
+ if (entry != null) {
+ String[] tokens = entry.getTokens();
+ for (int i = 0; i < tokens.length; i++) {
+ String pluginId = tokens[i];
+ // Get PluginModelBase first to resolve system.bundle entry if it exists
+ IPluginModelBase model = PluginRegistry.findModel(pluginId);
+ if (model != null) {
+ BundleDescription bundleDesc = model.getBundleDescription();
+ if (added.contains(bundleDesc))
+ continue;
+ Map<BundleDescription, ArrayList<Rule>> rules = new HashMap<BundleDescription, ArrayList<Rule>>();
+ findExportedPackages(bundleDesc, desc, rules);
+ addDependency(bundleDesc, added, rules, entries, true);
+ }
+ }
+ }
+ } catch (CoreException e) {
+ return;
+ }
+ }
+
+ protected final void findExportedPackages(BundleDescription desc, BundleDescription projectDesc, Map<BundleDescription, ArrayList<Rule>> map) {
+ if (desc != null) {
+ Stack<BaseDescription> stack = new Stack<BaseDescription>();
+ stack.add(desc);
+ while (!stack.isEmpty()) {
+ BundleDescription bdesc = (BundleDescription) stack.pop();
+ ExportPackageDescription[] expkgs = bdesc.getExportPackages();
+ ArrayList<Rule> rules = new ArrayList<Rule>();
+ for (int i = 0; i < expkgs.length; i++) {
+ Rule rule = new Rule();
+ rule.discouraged = restrictPackage(projectDesc, expkgs[i]);
+ rule.path = new Path(expkgs[i].getName().replaceAll("\\.", "/") + "/*"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ rules.add(rule);
+ }
+ map.put(bdesc, rules);
+
+ // Look at re-exported Require-Bundles for any other exported packages
+ BundleSpecification[] requiredBundles = bdesc.getRequiredBundles();
+ for (int i = 0; i < requiredBundles.length; i++)
+ if (requiredBundles[i].isExported()) {
+ BaseDescription bd = requiredBundles[i].getSupplier();
+ if (bd != null && bd instanceof BundleDescription)
+ stack.add(bd);
+ }
+ }
+ }
+ }
+
+ private boolean restrictPackage(BundleDescription desc, ExportPackageDescription pkg) {
+ String[] friends = (String[]) pkg.getDirective(ICoreConstants.FRIENDS_DIRECTIVE);
+ if (friends != null) {
+ String symbolicName = desc.getSymbolicName();
+ for (int i = 0; i < friends.length; i++) {
+ if (symbolicName.equals(friends[i]))
+ return false;
+
+ }
+ return true;
+ }
+ return (((Boolean) pkg.getDirective(ICoreConstants.INTERNAL_DIRECTIVE)).booleanValue());
+ }
+
+ private void addExtraLibrary(IPath path, IPluginModelBase model, ArrayList<IClasspathEntry> entries) {
+ if (path.segmentCount() > 1) {
+ IPath srcPath = null;
+ if (model != null) {
+ IPath shortPath = path.removeFirstSegments(path.matchingFirstSegments(new Path(model.getInstallLocation())));
+ srcPath = ClasspathUtilCore.getSourceAnnotation(model, shortPath.toString());
+ } else {
+ String filename = ClasspathUtilCore.getSourceZipName(path.lastSegment());
+ IPath candidate = path.removeLastSegments(1).append(filename);
+ if (PDECore.getWorkspace().getRoot().getFile(candidate).exists())
+ srcPath = candidate;
+ }
+ IClasspathEntry clsEntry = JavaCore.newLibraryEntry(path, srcPath, null);
+ if (!entries.contains(clsEntry))
+ entries.add(clsEntry);
+ }
+ }
+}
diff --git a/releng/org.eclipse.fx.ide.releng/pom.xml b/releng/org.eclipse.fx.ide.releng/pom.xml
index 5c4a79448..e621b3c5d 100755
--- a/releng/org.eclipse.fx.ide.releng/pom.xml
+++ b/releng/org.eclipse.fx.ide.releng/pom.xml
@@ -27,6 +27,8 @@
<module>../../bundles/tooling/org.eclipse.fx.ide.ui</module>
<module>../../bundles/tooling/org.eclipse.fx.ide.jdt.ui</module>
<module>../../bundles/tooling/org.eclipse.fx.ide.java6</module>
+ <module>../../bundles/tooling/org.eclipse.fx.ide.pde.adapter</module>
+ <module>../../bundles/tooling/org.eclipse.fx.ide.pde.fragment</module>
<!-- CSS Tooling -->
<module>../../bundles/tooling/org.eclipse.fx.ide.css</module>

Back to the top