[jbosstools-commits] JBoss Tools SVN: r42496 - in trunk/common/plugins: org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Jul 10 17:42:56 EDT 2012


Author: dazarov
Date: 2012-07-10 17:42:54 -0400 (Tue, 10 Jul 2012)
New Revision: 42496

Modified:
   trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/AddSuppressWarningsMarkerResolution.java
   trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/ConfigureProblemSeverityResolutionGenerator.java
   trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/TempJavaProblemAnnotation.java
Log:
Make Quick Fix "Add @SuppressWarnings" work on Temporary annotations https://issues.jboss.org/browse/JBIDE-12303

Modified: trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/AddSuppressWarningsMarkerResolution.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/AddSuppressWarningsMarkerResolution.java	2012-07-10 21:40:25 UTC (rev 42495)
+++ trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/AddSuppressWarningsMarkerResolution.java	2012-07-10 21:42:54 UTC (rev 42496)
@@ -35,13 +35,18 @@
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.internal.core.JavaElement;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jpt.common.core.internal.utility.jdt.ASTTools;
 import org.eclipse.ltk.core.refactoring.TextChange;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.text.edits.InsertEdit;
 import org.eclipse.text.edits.ReplaceEdit;
@@ -60,7 +65,7 @@
  * @author Daniel Azarov
  */
 public class AddSuppressWarningsMarkerResolution implements
-		IMarkerResolution2 {
+		IMarkerResolution2, IJavaCompletionProposal {
 	public static final String SUPPRESS_WARNINGS_ANNOTATION = "SuppressWarnings";
 	public static final String SPACE = " ";  //$NON-NLS-1$
 	public static final String DOT = ".";  //$NON-NLS-1$
@@ -73,6 +78,7 @@
 	private String preferenceKey;
 	private String label;
 	private String description;
+	private ICompilationUnit cu;
 	
 	public AddSuppressWarningsMarkerResolution(IFile file, IJavaElement element, String preferenceKey){
 		this.file = file;
@@ -92,6 +98,13 @@
 		description = getPreview();
 	}
 	
+	public AddSuppressWarningsMarkerResolution(IFile file, IJavaElement element, String preferenceKey, ICompilationUnit compilationUnit){
+		this(file, element, preferenceKey);
+		this.cu = compilationUnit;
+		
+		description = getPreview();
+	}
+	
 	private String getPreview(){
 		TextChange previewChange = getPreviewChange();
 		
@@ -122,12 +135,16 @@
 	private TextChange getPreviewChange(){
 		if(element != null && preferenceKey != null){
 			try {
-				ICompilationUnit original = EclipseUtil.getCompilationUnit(file);
+				ICompilationUnit original = (cu != null) ? cu : EclipseUtil.getCompilationUnit(file);
 				if(original == null) {
 					return null;
 				}
+				ICompilationUnit compilationUnit = original.getWorkingCopy(new NullProgressMonitor());
 				
-				return getChange(original);
+				TextChange change = getChange(compilationUnit);
+				
+				compilationUnit.discardWorkingCopy();
+				return change;
 			} catch (JavaModelException e) {
 				CommonUIPlugin.getDefault().logError(e);
 			}
@@ -156,18 +173,24 @@
 
 	@Override
 	public void run(IMarker marker) {
-		if(element != null && preferenceKey != null){
+		ICompilationUnit original = EclipseUtil.getCompilationUnit(file);
+		if(original != null) {
+			do_run(original, false);
+		}
+	}
+	
+	private void do_run(ICompilationUnit original, boolean leaveDirty){
+		if(element != null && preferenceKey != null && original != null){
 			disablePreference();
 			try {
-				ICompilationUnit original = EclipseUtil.getCompilationUnit(file);
-				if(original == null) {
-					return;
-				}
 				ICompilationUnit compilationUnit = original.getWorkingCopy(new NullProgressMonitor());
 				
 				CompilationUnitChange change = getChange(compilationUnit);
 				
 				if(change != null){
+					if(leaveDirty){
+						change.setSaveMode(TextFileChange.LEAVE_DIRTY);
+					}
 					change.perform(new NullProgressMonitor());
 					original.reconcile(ICompilationUnit.NO_AST, false, null, new NullProgressMonitor());
 				}
@@ -451,5 +474,35 @@
 		}
 		
 	}
+
+	@Override
+	public void apply(IDocument document) {
+		do_run(cu, true);
+	}
+
+	@Override
+	public Point getSelection(IDocument document) {
+		return null;
+	}
+
+	@Override
+	public String getAdditionalProposalInfo() {
+		return description;
+	}
+
+	@Override
+	public String getDisplayString() {
+		return label;
+	}
+
+	@Override
+	public IContextInformation getContextInformation() {
+		return null;
+	}
+
+	@Override
+	public int getRelevance() {
+		return 100;
+	}
 	
 }

Modified: trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/ConfigureProblemSeverityResolutionGenerator.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/ConfigureProblemSeverityResolutionGenerator.java	2012-07-10 21:40:25 UTC (rev 42495)
+++ trunk/common/plugins/org.jboss.tools.common.ui/src/org/jboss/tools/common/ui/marker/ConfigureProblemSeverityResolutionGenerator.java	2012-07-10 21:42:54 UTC (rev 42496)
@@ -12,6 +12,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
@@ -85,6 +87,18 @@
 		}
 		return null;
 	}
+
+	private IJavaElement findJavaElement(TempJavaProblemAnnotation annotation, int position){
+		try {
+			ICompilationUnit compilationUnit = annotation.getCompilationUnit();
+			if(compilationUnit != null){
+				return compilationUnit.getElementAt(position);
+			}
+		} catch (CoreException e) {
+			CommonUIPlugin.getDefault().logError(e);
+		}
+		return null;
+	}
 	
 	private ILocalVariable findParameter(IMethod method, int position) throws JavaModelException{
 		for(ILocalVariable parameter : method.getParameters()){
@@ -156,9 +170,45 @@
 		String preferenceKey = getPreferenceKey(annotation);
 		String preferencePageId = getPreferencePageId(annotation);
 		if(preferenceKey != null && preferencePageId != null){
+			if(annotation instanceof TempJavaProblemAnnotation){
+				TempJavaProblemAnnotation tAnnotation = (TempJavaProblemAnnotation)annotation;
+				int position = getPosition(tAnnotation);
+				IFile file = getFile(tAnnotation);
+				if(file != null){
+					IJavaElement element = findJavaElement(tAnnotation, position);
+					if(element != null){
+						if(element instanceof IMethod){
+							try{
+								ILocalVariable parameter = findParameter((IMethod)element, position);
+								if(parameter != null){
+									proposals.add(new AddSuppressWarningsMarkerResolution(file, parameter, preferenceKey, tAnnotation.getCompilationUnit()));
+								}
+							}catch(JavaModelException ex){
+								CommonUIPlugin.getDefault().logError(ex);
+							}
+						}
+						proposals.add(new AddSuppressWarningsMarkerResolution(file, element, preferenceKey, tAnnotation.getCompilationUnit()));
+					}
+				}
+			}
 			proposals.add(new ConfigureProblemSeverityMarkerResolution(preferencePageId, preferenceKey));
 		}
 		return proposals;
 	}
+	
+	private int getPosition(TempJavaProblemAnnotation annotation){
+		return annotation.getPosition();
+	}
+	
+	private IFile getFile(TempJavaProblemAnnotation annotation){
+		if(annotation.getCompilationUnit() != null){
+			try {
+				return (IFile)annotation.getCompilationUnit().getUnderlyingResource();
+			} catch (JavaModelException e) {
+				CommonUIPlugin.getDefault().logError(e);
+			}
+		}
+		return null;
+	}
 
 }

Modified: trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/TempJavaProblemAnnotation.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/TempJavaProblemAnnotation.java	2012-07-10 21:40:25 UTC (rev 42495)
+++ trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/TempJavaProblemAnnotation.java	2012-07-10 21:42:54 UTC (rev 42496)
@@ -30,4 +30,8 @@
 	public Map getAttributes() {
 		return problem.getAttributes();
 	}
+	
+	public int getPosition(){
+		return problem.getSourceStart();
+	}
 }
\ No newline at end of file



More information about the jbosstools-commits mailing list