Author: scabanovich
Date: 2009-08-20 08:13:49 -0400 (Thu, 20 Aug 2009)
New Revision: 17184
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbBuilder.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/taglib/TagLibriryManager.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-4768
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java 2009-08-20
12:12:24 UTC (rev 17183)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java 2009-08-20
12:13:49 UTC (rev 17184)
@@ -10,9 +10,20 @@
******************************************************************************/
package org.jboss.tools.jst.web.kb;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import org.eclipse.core.internal.events.InternalBuilder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.QualifiedName;
+import org.jboss.tools.common.model.XJob;
+import org.jboss.tools.common.model.XJob.XRunnable;
import org.jboss.tools.jst.web.WebModelPlugin;
+import org.jboss.tools.jst.web.kb.internal.KbBuilder;
+import org.jboss.tools.jst.web.kb.internal.KbProject;
public class KbProjectFactory {
@@ -30,11 +41,18 @@
public static IKbProject getKbProject(IProject project, boolean resolve) {
if(project == null || !project.exists() || !project.isOpen()) return null;
try {
- if(!project.hasNature(IKbProject.NATURE_ID)) return null;
+ if(!project.hasNature(IKbProject.NATURE_ID)) {
+ String s = project.getPersistentProperty(NATURE_MOCK);
+ if(s != null && "true".equals(s)) {
+ return getMockKbProject(project);
+ }
+ return null;
+ }
} catch (CoreException e) {
//ignore - all checks are done above
return null;
}
+ mockProjectStore.remove(project);
IKbProject kbProject;
try {
@@ -47,4 +65,61 @@
return null;
}
+ public static QualifiedName NATURE_MOCK = new QualifiedName("",
IKbProject.NATURE_ID + ".mock");
+
+ static HashMap<IProject, IKbProject> mockProjectStore = new HashMap<IProject,
IKbProject>();
+ static HashSet<IProject> underConstruction = new HashSet<IProject>();
+
+ static IKbProject getMockKbProject(final IProject project) {
+ IKbProject result = mockProjectStore.get(project);
+ if(result != null) {
+ return result;
+ }
+ if(underConstruction.contains(project)) {
+ return null;
+ }
+ underConstruction.add(project);
+ final KbProject mock = new KbProject();
+ class KbBuilderEx extends KbBuilder {
+ protected KbProject getKbProject() {
+ return mock;
+ }
+ public void build() {
+ try {
+ build(INCREMENTAL_BUILD, null, new NullProgressMonitor());
+ } catch (CoreException e) {
+ WebModelPlugin.getPluginLog().logError(e);
+ }
+ }
+ };
+ XJob.addRunnable(new XRunnable(){
+ public void run() {
+// System.out.println("build begin");
+ long t0 = System.currentTimeMillis();
+ mock.setProject(project);
+ KbBuilderEx builder = new KbBuilderEx();
+ setProjectToBuilder(builder, project);
+ builder.build();
+ mockProjectStore.put(project, mock);
+ underConstruction.remove(project);
+// long dt = System.currentTimeMillis() - t0;
+// System.out.println("build end " + dt);
+ }
+
+ public String getId() {
+ return "Creating Mock Kb Project";
+ }
+ });
+ return mock;
+ }
+
+ static void setProjectToBuilder(KbBuilder builder, IProject project) {
+ try {
+ Method m = InternalBuilder.class.getDeclaredMethod("setProject", new
Class[]{IProject.class});
+ m.setAccessible(true);
+ m.invoke(builder, project);
+ } catch (Exception e) {
+ WebModelPlugin.getPluginLog().logError(e);
+ }
+ }
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbBuilder.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbBuilder.java 2009-08-20
12:12:24 UTC (rev 17183)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbBuilder.java 2009-08-20
12:13:49 UTC (rev 17184)
@@ -39,7 +39,7 @@
KbResourceVisitor resourceVisitor = null;
- KbProject getKbProject() {
+ protected KbProject getKbProject() {
IProject p = getProject();
if(p == null) return null;
return (KbProject)KbProjectFactory.getKbProject(p, false);
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java 2009-08-20
12:12:24 UTC (rev 17183)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java 2009-08-20
12:13:49 UTC (rev 17184)
@@ -305,6 +305,11 @@
* @throws IOException
*/
public void store() throws IOException {
+ try {
+ if(!project.hasNature(IKbProject.NATURE_ID)) return;
+ } catch (CoreException e) {
+ //ignore
+ }
File file = getStorageFile();
file.getParentFile().mkdirs();
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/taglib/TagLibriryManager.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/taglib/TagLibriryManager.java 2009-08-20
12:12:24 UTC (rev 17183)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/taglib/TagLibriryManager.java 2009-08-20
12:13:49 UTC (rev 17184)
@@ -28,8 +28,7 @@
*/
public static ITagLibrary[] getLibraries(IProject project, String uri) {
IKbProject kbProject = KbProjectFactory.getKbProject(project, true);
- if(kbProject==null) {
- WebKbPlugin.getDefault().logWarning("Project " + project.getName() + "
doesn't have KB nature."); //$NON-NLS-1$ //$NON-NLS-2$
+ if(kbProject == null) {
return new ITagLibrary[0];
}
return kbProject.getTagLibraries(uri);