Author: dazarov
Date: 2012-07-26 19:56:51 -0400 (Thu, 26 Jul 2012)
New Revision: 42746
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java
Log:
Make Quick Fix "Add tag library definition" work with KB Model instead of using
plain tag library list
https://issues.jboss.org/browse/JBIDE-12304
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java 2012-07-26
23:17:26 UTC (rev 42745)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java 2012-07-26
23:56:51 UTC (rev 42746)
@@ -99,6 +99,10 @@
if(prefix == null)
return new IJavaCompletionProposal[]{};
+ String tagName = getTagName(message);
+ if(tagName == null)
+ return new IJavaCompletionProposal[]{};
+
IFile file = MarkerResolutionUtils.getFile();
if(file == null)
return new IJavaCompletionProposal[]{};
@@ -126,22 +130,24 @@
ITagLibrary[] libraries = kbProject.getTagLibraries();
ArrayList<String> names = new ArrayList<String>();
+ boolean worked = false;
for(ITagLibrary l : libraries){
if(l instanceof TLDLibrary){
((TLDLibrary) l).createDefaultNameSpace();
}
INameSpace ns = l.getDefaultNameSpace();
if(ns != null && ns.getPrefix() != null &&
ns.getPrefix().equals(prefix)){
+ worked = true;
String uri = ns.getURI();
String resolutionName = getResolutionName(xmlDocument != null &&
xmlDocument.isXMLType(), true, prefix, uri);
- if(resolutionName != null && !names.contains(resolutionName)){
+ if(resolutionName != null && !names.contains(resolutionName) &&
l.getComponent(tagName) != null){
proposals.add(new AddTLDMarkerResolution(resolutionName, start, end, uri,
prefix));
names.add(resolutionName);
}
}
}
- if(proposals.size() == 0 && libs.containsKey(prefix)){
+ if(proposals.size() == 0 && libs.containsKey(prefix) && !worked){
String uri = libs.get(prefix);
String resolutionName = getResolutionName(xmlDocument != null &&
xmlDocument.isXMLType(), true, prefix, uri);
if(resolutionName != null){
@@ -183,6 +189,10 @@
if(prefix == null)
return new IMarkerResolution[]{};
+ String tagName = getTagName(message);
+ if(tagName == null)
+ return new IMarkerResolution[]{};
+
IFile file = (IFile)marker.getResource();
ELContext context = PageContextFactory.createPageContext(file);
@@ -203,22 +213,24 @@
ITagLibrary[] libraries = kbProject.getTagLibraries();
ArrayList<String> names = new ArrayList<String>();
+ boolean worked = false;
for(ITagLibrary l : libraries){
if(l instanceof TLDLibrary){
((TLDLibrary) l).createDefaultNameSpace();
}
INameSpace ns = l.getDefaultNameSpace();
if(ns != null && ns.getPrefix() != null &&
ns.getPrefix().equals(prefix)){
+ worked = true;
String uri = ns.getURI();
String resolutionName =
getResolutionName(marker.getType().equals(HTML_VALIDATOR_MARKER) ||
marker.isSubtypeOf(HTML_VALIDATOR_MARKER), marker.getType().equals(JSP_VALIDATOR_MARKER)
|| marker.isSubtypeOf(JSP_VALIDATOR_MARKER), prefix, uri);
- if(resolutionName != null && !names.contains(resolutionName)){
+ if(resolutionName != null && !names.contains(resolutionName) &&
l.getComponent(tagName) != null){
resolutions.add(new AddTLDMarkerResolution(file, resolutionName, start, end, uri,
prefix));
names.add(resolutionName);
}
}
}
- if(resolutions.size() == 0 && libs.containsKey(prefix)){
+ if(resolutions.size() == 0 && libs.containsKey(prefix) && !worked){
String uri = libs.get(prefix);
String resolutionName =
getResolutionName(marker.getType().equals(HTML_VALIDATOR_MARKER) ||
marker.isSubtypeOf(HTML_VALIDATOR_MARKER), marker.getType().equals(JSP_VALIDATOR_MARKER)
|| marker.isSubtypeOf(JSP_VALIDATOR_MARKER), prefix, uri);
if(resolutionName != null){
@@ -244,6 +256,22 @@
return prefix;
}
+ public static String getTagName(String message){
+ String tagName=""; //$NON-NLS-1$
+
+ int start = message.indexOf(":"); //$NON-NLS-1$
+ if(start < 0)
+ return null;
+
+ int end = message.indexOf(")", start); //$NON-NLS-1$
+ if(end < 0)
+ return null;
+
+ tagName = message.substring(start+1, end);
+
+ return tagName;
+ }
+
@Override
public boolean hasResolutions(IMarker marker) {
try{