resource improvements
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java index c829e31..fc003b5 100644 --- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java +++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslation.java
@@ -15,8 +15,10 @@ import java.util.Vector; import org.eclipse.core.filebuffers.FileBuffers; +import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.ResourcesPlugin; @@ -84,14 +86,24 @@ mangledName = createMangledName(); } + public JsTranslation(IStructuredDocument htmlDocument, IJavaProject javaProj, boolean listenForChanges) { + fLock = new byte[0]; + fJavaProject = javaProj; + fHtmlDocument = htmlDocument; + setBaseLocation(); + translator = new JsTranslator(htmlDocument, fModelBaseLocation,listenForChanges); + mangledName = createMangledName(); + } + public IJavaProject getJavaProject() { return fJavaProject; } private IPackageFragmentRoot getDocScope(boolean reset) { if(fDocumentScope==null) { - fDocumentScope = new DocumentContextFragmentRoot(fJavaProject, getFile(), WebRootFinder.getWebContentFolder(fJavaProject.getProject()), WebRootFinder.getServerContextRoot(fJavaProject.getProject()), JsWebNature.VIRTUAL_SCOPE_ENTRY); - fDocumentScope.setIncludedFiles(translator.getRawImports()); + IProject project = getJavaProject().getProject(); + IResource absoluteRoot = ((IContainer)getJavaProject().getResource()).findMember( WebRootFinder.getWebContentFolder(fJavaProject.getProject())); + fDocumentScope = new DocumentContextFragmentRoot(fJavaProject, getFile(), WebRootFinder.getWebContentFolder(fJavaProject.getProject()), WebRootFinder.getServerContextRoot(fJavaProject.getProject()), JsWebNature.VIRTUAL_SCOPE_ENTRY); fDocumentScope.setIncludedFiles(translator.getRawImports()); return fDocumentScope; } @@ -130,6 +142,13 @@ return WebRootFinder.getWebContentFolder(fJavaProject.getProject()).toString(); } + public String getDirectoryUnderRoot() { + String webRoot = getWebRoot() ; + IPath projectWebRootPath = getJavaProject().getPath().append(webRoot); + IPath filePath = new Path(fModelBaseLocation).removeLastSegments(1); + return filePath.removeFirstSegments(projectWebRootPath.matchingFirstSegments(filePath)).toString(); + } + /** * Originally from ReconcileStepForJava. Creates an ICompilationUnit from * the contents of the JSP document. @@ -139,9 +158,10 @@ private ICompilationUnit createCompilationUnit() throws JavaModelException { //System.out.println("------------------------- CREATING CU ----------------------------"); LibrarySuperType superType = new LibrarySuperType(SUPER_TYPE_LIBRARY, fJavaProject, SUPER_TYPE_NAME); - String webRoot = getWebRoot() ; + IPackageFragmentRoot root = getDocScope(true); - ICompilationUnit cu = root.getPackageFragment(webRoot).getCompilationUnit(getMangledName() + JsDataTypes.BASE_FILE_EXTENSION).getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor()); + //String directoryUnderWebroot = getDirectoryUnderRoot(); + ICompilationUnit cu = root.getPackageFragment("").getCompilationUnit(getMangledName() + JsDataTypes.BASE_FILE_EXTENSION).getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor()); //ICompilationUnit cu = fDocumentScope.getDefaultPackageFragment().getCompilationUnit(getMangledName() + JsDataTypes.BASE_FILE_EXTENSION,SUPER_TYPE_NAME).getWorkingCopy(getWorkingCopyOwner(), getProblemRequestor(), getProgressMonitor()); IBuffer buffer; @@ -252,9 +272,13 @@ } public String getJavaPath() { - String webRoot = getWebRoot() ; - IPackageFragmentRoot root = getDocScope(false); - String cuPath = root.getPath().append("/" + webRoot).append("/" + getMangledName() + JsDataTypes.BASE_FILE_EXTENSION ).toString(); + //String webRoot = getWebRoot() ; + //IPackageFragmentRoot root = getDocScope(false); + //String cuPath = root.getPath().append("/" + getMangledName() + JsDataTypes.BASE_FILE_EXTENSION ).toString(); + //ICompilationUnit cu = getCompilationUnit(); + //IPath realCuPath = cu.getPath(); + IPath rootPath = new Path(fModelBaseLocation).removeLastSegments(1); + String cuPath = rootPath.append("/" + getMangledName() + JsDataTypes.BASE_FILE_EXTENSION ).toString(); return cuPath; }
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java index 74b7ebd..cbb2e29 100644 --- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java +++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapter.java
@@ -48,6 +48,8 @@ if(listenForProjectChanges) { ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE); + }else { + fJSPTranslation = new JsTranslation(fHtmlDocument, getJavaProject(), listenForProjectChanges); } }
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java index b05fa06..5b178d5 100644 --- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java +++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslationAdapterFactory.java
@@ -41,7 +41,7 @@ public JsTranslationAdapterFactory(boolean listenForProjectChanges) { super(IJsTranslation.class, true); - listenForProjectChanges = listenForProjectChanges; + this.listenForProjectChanges = listenForProjectChanges; } public INodeAdapterFactory copy() { return new JsTranslationAdapterFactory(listenForProjectChanges);
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java index 49271d0..49b6d53 100644 --- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java +++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/JsTranslator.java
@@ -69,6 +69,7 @@ private int missingEndTagRegionStart = -1; + private void advanceNextNode() { setCurrentNode(getCurrentNode().getNext()); } @@ -76,6 +77,7 @@ public JsTranslator(IStructuredDocument document, String fileName) { super("JavaScript translation for : " + fileName); fStructuredDocument = document; + fStructuredDocument.addDocumentListener(this); setPriority(Job.LONG); setSystem(true); @@ -83,6 +85,18 @@ reset(); } + public JsTranslator(IStructuredDocument document, String fileName, boolean listenForChanges) { + super("JavaScript translation for : " + fileName); + fStructuredDocument = document; + if(listenForChanges) { + fStructuredDocument.addDocumentListener(this); + setPriority(Job.LONG); + setSystem(true); + schedule(); + } + reset(); + } + public String getJsText() { synchronized(finished) { return fScriptText.toString(); @@ -212,8 +226,7 @@ } private void finishedTranslation() { - System.out.println("Updating CU Buffer.."); - + if(compUnitBuff!=null) compUnitBuff.setContents(fScriptText.toString()); }
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java index 0096beb..35e1afb 100644 --- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java +++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/internal/java/search/JsSearchDocument.java
@@ -130,7 +130,7 @@ // handle unsupported if (model instanceof IDOMModel) { IDOMModel xmlModel = (IDOMModel) model; - JsTranslationAdapterFactory factory = new JsTranslationAdapterFactory(); + JsTranslationAdapterFactory factory = new JsTranslationAdapterFactory(false); xmlModel.getFactoryRegistry().addFactory(factory); IDOMDocument doc = xmlModel.getDocument(); JsTranslationAdapter adapter = (JsTranslationAdapter) doc.getAdapterFor(IJsTranslation.class);
diff --git a/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java b/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java index 7100e60..914756c 100644 --- a/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java +++ b/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/hyperlink/JSDTHyperlinkDetector.java
@@ -23,6 +23,7 @@ import org.eclipse.wst.jsdt.core.ISourceRange; import org.eclipse.wst.jsdt.core.ISourceReference; import org.eclipse.wst.jsdt.core.JavaModelException; +import org.eclipse.wst.jsdt.internal.core.JavaElement; import org.eclipse.wst.jsdt.web.core.internal.java.IJsTranslation; import org.eclipse.wst.jsdt.web.core.internal.java.JsTranslation; import org.eclipse.wst.jsdt.web.core.internal.java.JsTranslationAdapter; @@ -73,7 +74,7 @@ ICompilationUnit myUnit = jspTranslation.getCompilationUnit(); while(!(unit instanceof ICompilationUnit || unit instanceof IClassFile || unit==null)) { - unit = ((ILocalVariable) element).getParent(); + unit = ((JavaElement) unit).getParent(); } if(unit instanceof ICompilationUnit) { ICompilationUnit cu = (ICompilationUnit)unit;