Author: dazarov
Date: 2010-12-27 13:40:40 -0500 (Mon, 27 Dec 2010)
New Revision: 27752
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MarkerResolutionUtils.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeInjectedPointUnambiguousMarkerResolution.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeMethodBusinessMarkerResolution.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanComposite.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizard.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizardPage.java
Log:
https://issues.jboss.org/browse/JBIDE-7635
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -553,7 +553,7 @@
}
if(sourceType.isInterface()) {
IAnnotation annotation =
sourceType.getAnnotation(CDIConstants.LOCAL_ANNOTATION_TYPE_NAME);
- if (annotation == null) {
+ if (annotation == null || !annotation.exists()) {
annotation = sourceType.getAnnotation("Local"); //$NON-NLS-N1
}
if (annotation != null &&
CDIConstants.LOCAL_ANNOTATION_TYPE_NAME.equals(EclipseJavaUtil.resolveType(sourceType,
"Local"))) { //$NON-NLS-N1
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -95,6 +95,7 @@
public static String ADD_QUALIFIERS_TO_BEAN_WIZARD_REMOVE;
public static String ADD_QUALIFIERS_TO_BEAN_WIZARD_REMOVE_ALL;
public static String ADD_QUALIFIERS_TO_BEAN_WIZARD_CREATE_NEW_QUALIFIER;
+ public static String ADD_QUALIFIERS_TO_BEAN_WIZARD_SET_IS_NOT_UNIQUE;
public static String CDI_GENERATE_BEANS_XML;
public static String CDI_INSTALL_WIZARD_PAGE_FACET;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties 2010-12-27
18:40:40 UTC (rev 27752)
@@ -68,9 +68,8 @@
ADD_LOCAL_BEAN_MARKER_RESOLUTION_TITLE=Add @LocalBean annotation to
''{0}'' class
DELETE_ALL_DISPOSER_DUPLICANT_MARKER_RESOLUTION_TITLE=Delete @Disposes annotations from
all methods except ''{0}'' method
DELETE_ALL_INJECTED_CONSTRUCTORS_MARKER_RESOLUTION_TITLE=Delete @Inject annotations from
all constructors except ''{0}'' constructor
-MAKE_INJECTED_POINT_UNAMBIGUOUS_TITLE=Make injected point unambiguous by adding to it
''{0}'' bean
+MAKE_INJECTED_POINT_UNAMBIGUOUS_TITLE=Make injected point unambiguous by specifying
''{0}'' bean
-
ADD_QUALIFIERS_TO_BEAN_WIZARD_TITLE=Add Qualifiers to the Bean
ADD_QUALIFIERS_TO_BEAN_WIZARD_AVAILABLE=Available:
ADD_QUALIFIERS_TO_BEAN_WIZARD_IN_BEAN=In the Bean:
@@ -80,6 +79,7 @@
ADD_QUALIFIERS_TO_BEAN_WIZARD_REMOVE=< Remove
ADD_QUALIFIERS_TO_BEAN_WIZARD_REMOVE_ALL=<< Remove All
ADD_QUALIFIERS_TO_BEAN_WIZARD_CREATE_NEW_QUALIFIER=Create New Qualifier
+ADD_QUALIFIERS_TO_BEAN_WIZARD_SET_IS_NOT_UNIQUE=This set of qualifiers is not unique
CDI_GENERATE_BEANS_XML=Generate beans.xml file:
CDI_INSTALL_WIZARD_PAGE_FACET=Context and Dependency Injection (CDI) Facet
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -112,20 +112,23 @@
new DeleteAllInjectedConstructorsMarkerResolution(method, file)
};
}
- }/*else if(messageId == CDIValidationErrorManager.UNSATISFIED_INJECTION_POINTS_ID ||
+ }else if(messageId == CDIValidationErrorManager.UNSATISFIED_INJECTION_POINTS_ID ||
messageId == CDIValidationErrorManager.AMBIGUOUS_INJECTION_POINTS_ID){
- List<IBean> beans = findBeans(file, start);
- IMarkerResolution[] resolutions = new IMarkerResolution[beans.size()];
- for(int i = 0; i < beans.size(); i++){
- resolutions[i] = new MakeInjectedPointUnambiguousMarkerResolution(beans, file, i);
+ IInjectionPoint injectionPoint = findInjectionPoint(file, start);
+ if(injectionPoint != null){
+ List<IBean> beans = findBeans(injectionPoint);
+ IMarkerResolution[] resolutions = new IMarkerResolution[beans.size()];
+ for(int i = 0; i < beans.size(); i++){
+ resolutions[i] = new MakeInjectedPointUnambiguousMarkerResolution(injectionPoint,
beans, file, i);
+ }
+ return resolutions;
}
- return resolutions;
- }*/
+ }
}
return new IMarkerResolution[] {};
}
- private List<IBean> findBeans(IFile file, int start){
+ private IInjectionPoint findInjectionPoint(IFile file, int start){
IJavaElement element = findJavaElement(file, start);
if(element == null)
return null;
@@ -143,18 +146,13 @@
Set<IBean> allBeans = cdiProject.getBeans(file.getFullPath());
- //System.out.println("All beans - "+allBeans.size());
- //System.out.println("java element - "+element.getClass());
-
- IInjectionPoint injectionPoint = CDIUtil.findInjectionPoint(allBeans, element, start);
- if(injectionPoint == null){
- return null;
- }
-
+ return CDIUtil.findInjectionPoint(allBeans, element, start);
+ }
+
+ private List<IBean> findBeans(IInjectionPoint injectionPoint){
+ ICDIProject cdiProject = injectionPoint.getCDIProject();
Set<IBean> beanSet = cdiProject.getBeans(false, injectionPoint);
- //System.out.println("Beans on injected point - "+beanSet.size());
-
List<IBean> beanList = CDIUtil.sortBeans(beanSet);
return beanList;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeInjectedPointUnambiguousMarkerResolution.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeInjectedPointUnambiguousMarkerResolution.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeInjectedPointUnambiguousMarkerResolution.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -16,15 +16,33 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IMarkerResolution2;
import org.eclipse.ui.internal.Workbench;
+import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.IInjectionPoint;
+import org.jboss.tools.cdi.core.IInjectionPointField;
+import org.jboss.tools.cdi.core.IInjectionPointMethod;
+import org.jboss.tools.cdi.core.IInjectionPointParameter;
import org.jboss.tools.cdi.core.IQualifier;
import org.jboss.tools.cdi.ui.CDIUIMessages;
+import org.jboss.tools.cdi.ui.CDIUIPlugin;
+import org.jboss.tools.cdi.ui.wizard.AddQualifiersToBeanComposite;
import org.jboss.tools.cdi.ui.wizard.AddQualifiersToBeanWizard;
+import org.jboss.tools.common.EclipseUtil;
/**
* @author Daniel Azarov
@@ -32,11 +50,13 @@
public class MakeInjectedPointUnambiguousMarkerResolution implements IMarkerResolution2
{
private String label;
private IFile file;
+ private IInjectionPoint injectionPoint;
private List<IBean> beans;
private IBean selectedBean;
- public MakeInjectedPointUnambiguousMarkerResolution(List<IBean> beans, IFile file,
int index){
+ public MakeInjectedPointUnambiguousMarkerResolution(IInjectionPoint injectionPoint,
List<IBean> beans, IFile file, int index){
this.file = file;
+ this.injectionPoint = injectionPoint;
this.beans = beans;
this.selectedBean = beans.get(index);
this.label = MessageFormat.format(CDIUIMessages.MAKE_INJECTED_POINT_UNAMBIGUOUS_TITLE,
new Object[]{selectedBean.getBeanClass().getElementName()});
@@ -48,16 +68,94 @@
public void run(IMarker marker) {
if(checkBeans()){
- //System.out.println("Should show dialog here.");
Shell shell = Workbench.getInstance().getActiveWorkbenchWindow().getShell();
- AddQualifiersToBeanWizard wizard = new AddQualifiersToBeanWizard(selectedBean);
+ AddQualifiersToBeanWizard wizard = new AddQualifiersToBeanWizard(injectionPoint,
beans, selectedBean);
WizardDialog dialog = new WizardDialog(shell, wizard);
- dialog.open();
- }else{
- //System.out.println("Should update injected point without dialog");
+ int status = dialog.open();
+ if(status != WizardDialog.OK)
+ return;
+
+ List<IQualifier> deployed = wizard.getDeployedQualifiers();
+ addQualifiersToBean(deployed);
+ try {
+ Thread.sleep(3000);
+ Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
+ } catch (InterruptedException e) {
+ // do nothing
+ }
}
+ addQualifiersToInjectedPoint();
}
+ private void addQualifiersToBean(List<IQualifier> deployed){
+ IFile file = (IFile)selectedBean.getBeanClass().getResource();
+ try{
+ ICompilationUnit original = EclipseUtil.getCompilationUnit(file);
+ ICompilationUnit compilationUnit = original.getWorkingCopy(new
NullProgressMonitor());
+
+ IType type = compilationUnit.findPrimaryType();
+ if(type != null){
+ for(IQualifier qualifier : deployed){
+ MarkerResolutionUtils.addAnnotation(qualifier.getSourceType().getFullyQualifiedName(),
compilationUnit, type);
+ }
+ }
+
+ compilationUnit.commitWorkingCopy(false, new NullProgressMonitor());
+ compilationUnit.discardWorkingCopy();
+ }catch(CoreException ex){
+ CDIUIPlugin.getDefault().logError(ex);
+ }
+ }
+
+ private void addQualifiersToInjectedPoint(){
+ try{
+ ICompilationUnit original =
injectionPoint.getClassBean().getBeanClass().getCompilationUnit();
+ ICompilationUnit compilationUnit = original.getWorkingCopy(new
NullProgressMonitor());
+
+ Set<IQualifier> qualifiers = selectedBean.getQualifiers();
+ for(IQualifier qualifier : qualifiers){
+ String qualifierName = qualifier.getSourceType().getFullyQualifiedName();
+ if(!qualifierName.equals(CDIConstants.ANY_QUALIFIER_TYPE_NAME) &&
!qualifierName.equals(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME)){
+ IJavaElement element = getInjectedJavaElement(compilationUnit);
+ MarkerResolutionUtils.addQualifier(qualifierName, compilationUnit, element);
+ }
+ }
+
+ compilationUnit.commitWorkingCopy(false, new NullProgressMonitor());
+ compilationUnit.discardWorkingCopy();
+ }catch(CoreException ex){
+ CDIUIPlugin.getDefault().logError(ex);
+ }
+ }
+
+ private IJavaElement getInjectedJavaElement(ICompilationUnit compolationUnit){
+ if(injectionPoint instanceof IInjectionPointField){
+ IField field = ((IInjectionPointField)injectionPoint).getField();
+ IType type = field.getDeclaringType();
+ IType t = compolationUnit.getType(type.getElementName());
+ IField f = t.getField(field.getElementName());
+
+ return f;
+ }else if(injectionPoint instanceof IInjectionPointMethod){
+ IMethod method = ((IInjectionPointMethod)injectionPoint).getMethod();
+ IType type = method.getDeclaringType();
+ IType t = compolationUnit.getType(type.getElementName());
+ IMethod m = t.getMethod(method.getElementName(), method.getParameterTypes());
+
+ return m;
+ }else if(injectionPoint instanceof IInjectionPointParameter){
+ String paramName = ((IInjectionPointParameter)injectionPoint).getName();
+ IMethod method =
((IInjectionPointParameter)injectionPoint).getBeanMethod().getMethod();
+ IType type = method.getDeclaringType();
+ IType t = compolationUnit.getType(type.getElementName());
+ IMethod m = t.getMethod(method.getElementName(), method.getParameterTypes());
+ ITypeParameter p = m.getTypeParameter(paramName);
+
+ return p;
+ }
+ return null;
+ }
+
private boolean checkBeans(){
Set<IQualifier> qualifiers = selectedBean.getQualifiers();
if(qualifiers.size() == 0)
@@ -66,32 +164,14 @@
for(IBean bean: beans){
if(bean.equals(selectedBean))
continue;
- if(checkBeanQualifiers(bean, qualifiers))
+ if(AddQualifiersToBeanComposite.checkBeanQualifiers(bean, qualifiers))
return true;
}
return false;
}
- private boolean checkBeanQualifiers(IBean bean, Set<IQualifier> qualifiers){
- for(IQualifier qualifier : qualifiers){
- if(!isBeanContainQualifier(bean.getQualifiers(), qualifier)){
- return false;
- }
- }
- if(bean.getQualifiers().size() == qualifiers.size())
- return true;
- return false;
- }
- private boolean isBeanContainQualifier(Set<IQualifier> qualifiers, IQualifier
qualifier){
- for(IQualifier q : qualifiers){
- if(q.getSourceType().getFullyQualifiedName().equals(qualifier.getSourceType().getFullyQualifiedName()))
- return true;
- }
- return false;
- }
-
public String getDescription() {
return null;
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeMethodBusinessMarkerResolution.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeMethodBusinessMarkerResolution.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MakeMethodBusinessMarkerResolution.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -41,29 +41,7 @@
private static final String PRIVATE = "private"; //$NON-NLS-1$
private static final String PROTECTED = "protected"; //$NON-NLS-1$
private static final String SPACE = " "; //$NON-NLS-1$
- private static final String DOT = "."; //$NON-NLS-1$
- static final HashSet<String> primitives = new HashSet<String>();
- static{
- primitives.add("void"); //$NON-NLS-1$
- primitives.add("int"); //$NON-NLS-1$
- primitives.add("java.lang.Integer"); //$NON-NLS-1$
- primitives.add("char"); //$NON-NLS-1$
- primitives.add("java.lang.Character"); //$NON-NLS-1$
- primitives.add("boolean"); //$NON-NLS-1$
- primitives.add("java.lang.Boolean"); //$NON-NLS-1$
- primitives.add("short"); //$NON-NLS-1$
- primitives.add("java.lang.Short"); //$NON-NLS-1$
- primitives.add("long"); //$NON-NLS-1$
- primitives.add("java.lang.Long"); //$NON-NLS-1$
- primitives.add("float"); //$NON-NLS-1$
- primitives.add("java.lang.Float"); //$NON-NLS-1$
- primitives.add("double"); //$NON-NLS-1$
- primitives.add("java.lang.Double"); //$NON-NLS-1$
- primitives.add("byte"); //$NON-NLS-1$
- primitives.add("java.lang.Byte"); //$NON-NLS-1$
- primitives.add("java.lang.String"); //$NON-NLS-1$
- }
private String label;
private IMethod method;
@@ -161,31 +139,9 @@
private void addImport(IType originalType, String simpleName, ICompilationUnit
compilationUnit) throws JavaModelException{
String qualifiedName = EclipseJavaUtil.resolveType(originalType, simpleName);
- addImport(qualifiedName, compilationUnit);
+ MarkerResolutionUtils.addImport(qualifiedName, compilationUnit);
}
- private void addImport(String qualifiedName, ICompilationUnit compilationUnit) throws
JavaModelException{
- if(primitives.contains(qualifiedName))
- return;
-
- IPackageDeclaration[] packages = compilationUnit.getPackageDeclarations();
-
- if(qualifiedName.indexOf(DOT) >= 0){
- String typePackage = qualifiedName.substring(0,qualifiedName.lastIndexOf(DOT));
-
- for(IPackageDeclaration packageDeclaration : packages){
- if(packageDeclaration.getElementName().equals(typePackage))
- return;
- }
- }
-
- if(qualifiedName != null){
- IImportDeclaration importDeclaration = compilationUnit.getImport(qualifiedName);
- if(importDeclaration == null || !importDeclaration.exists())
- compilationUnit.createImport(qualifiedName, null, new NullProgressMonitor());
- }
-
- }
public String getDescription() {
return null;
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MarkerResolutionUtils.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MarkerResolutionUtils.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MarkerResolutionUtils.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.ui.marker;
+
+import java.util.HashSet;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IAnnotatable;
+import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.IBuffer;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IImportDeclaration;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageDeclaration;
+import org.eclipse.jdt.core.ISourceReference;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeParameter;
+import org.eclipse.jdt.core.JavaModelException;
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.common.model.util.EclipseJavaUtil;
+
+/**
+ * @author Daniel Azarov
+ */
+public class MarkerResolutionUtils {
+ public static final String DOT = "."; //$NON-NLS-1$
+ public static final String SPACE = " "; //$NON-NLS-1$
+ public static final String AT = "@"; //$NON-NLS-1$
+
+ static final HashSet<String> primitives = new HashSet<String>();
+ static{
+ primitives.add("void"); //$NON-NLS-1$
+ primitives.add("int"); //$NON-NLS-1$
+ primitives.add("java.lang.Integer"); //$NON-NLS-1$
+ primitives.add("char"); //$NON-NLS-1$
+ primitives.add("java.lang.Character"); //$NON-NLS-1$
+ primitives.add("boolean"); //$NON-NLS-1$
+ primitives.add("java.lang.Boolean"); //$NON-NLS-1$
+ primitives.add("short"); //$NON-NLS-1$
+ primitives.add("java.lang.Short"); //$NON-NLS-1$
+ primitives.add("long"); //$NON-NLS-1$
+ primitives.add("java.lang.Long"); //$NON-NLS-1$
+ primitives.add("float"); //$NON-NLS-1$
+ primitives.add("java.lang.Float"); //$NON-NLS-1$
+ primitives.add("double"); //$NON-NLS-1$
+ primitives.add("java.lang.Double"); //$NON-NLS-1$
+ primitives.add("byte"); //$NON-NLS-1$
+ primitives.add("java.lang.Byte"); //$NON-NLS-1$
+ primitives.add("java.lang.String"); //$NON-NLS-1$
+ }
+
+ public static void addImport(String qualifiedName, ICompilationUnit compilationUnit)
throws JavaModelException{
+ if(primitives.contains(qualifiedName))
+ return;
+
+ IPackageDeclaration[] packages = compilationUnit.getPackageDeclarations();
+
+ if(qualifiedName.indexOf(DOT) >= 0){
+ String typePackage = qualifiedName.substring(0,qualifiedName.lastIndexOf(DOT));
+
+ for(IPackageDeclaration packageDeclaration : packages){
+ if(packageDeclaration.getElementName().equals(typePackage))
+ return;
+ }
+ }
+
+ if(qualifiedName != null){
+ IImportDeclaration importDeclaration = compilationUnit.getImport(qualifiedName);
+ if(importDeclaration == null || !importDeclaration.exists())
+ compilationUnit.createImport(qualifiedName, null, new NullProgressMonitor());
+ }
+
+ }
+
+ public static void addAnnotation(String qualifiedName, ICompilationUnit compilationUnit,
ISourceReference element) throws JavaModelException{
+ addImport(qualifiedName, compilationUnit);
+
+ String lineDelim = compilationUnit.findRecommendedLineSeparator();
+
+ IBuffer buffer = compilationUnit.getBuffer();
+ String shortName = getShortName(qualifiedName);
+
+ buffer.replace(element.getSourceRange().getOffset(), 0, AT+shortName+lineDelim);
+
+ synchronized(compilationUnit) {
+ compilationUnit.reconcile(ICompilationUnit.NO_AST, true, null, null);
+ }
+ }
+
+ public static void addQualifier(String qualifiedName, ICompilationUnit compilationUnit,
IJavaElement element) throws JavaModelException{
+ addImport(qualifiedName, compilationUnit);
+
+ String lineDelim = SPACE;
+
+ IBuffer buffer = compilationUnit.getBuffer();
+ String shortName = getShortName(qualifiedName);
+
+ IAnnotation annotation = getAnnotation(element,
CDIConstants.INJECT_ANNOTATION_TYPE_NAME);
+
+ buffer.replace(annotation.getSourceRange().getOffset()+annotation.getSourceRange().getLength(),
0, lineDelim+AT+shortName);
+
+ synchronized(compilationUnit) {
+ compilationUnit.reconcile(ICompilationUnit.NO_AST, true, null, null);
+ }
+ }
+
+ public static String getShortName(String qualifiedName){
+ int lastDot = qualifiedName.lastIndexOf(DOT);
+ String name;
+ if(lastDot < 0)
+ name = qualifiedName;
+ else
+ name = qualifiedName.substring(lastDot+1);
+ return name;
+ }
+
+ public static IAnnotation getAnnotation(IJavaElement element, String qualifiedName){
+ if(element instanceof IAnnotatable){
+ String name = getShortName(qualifiedName);
+ IAnnotation annotation = ((IAnnotatable)element).getAnnotation(qualifiedName);
+ if (annotation == null || !annotation.exists()) {
+ annotation = ((IAnnotatable)element).getAnnotation(name);
+ }
+ IMember member=null;
+ if(element instanceof IMember){
+ member = (IMember)element;
+ }else if(element instanceof ITypeParameter){
+ member = ((ITypeParameter)element).getDeclaringMember();
+ }
+ if (member != null && annotation != null &&
qualifiedName.equals(EclipseJavaUtil.resolveType(member.getDeclaringType(), name))) {
+ return annotation;
+ }
+ }
+ return null;
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/MarkerResolutionUtils.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanComposite.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanComposite.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanComposite.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -1,9 +1,17 @@
package org.jboss.tools.cdi.ui.wizard;
+import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
@@ -14,8 +22,11 @@
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
@@ -31,12 +42,21 @@
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.Workbench;
import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IQualifier;
import org.jboss.tools.cdi.ui.CDIUIMessages;
+import org.jboss.tools.cdi.ui.CDIUIPlugin;
+import org.jboss.tools.cdi.ui.marker.MarkerResolutionUtils;
public class AddQualifiersToBeanComposite extends Composite {
private static Font font;
+ private IInjectionPoint injectionPoint;
+ private IBean bean;
+ private java.util.List<IBean> beans;
+ private WizardPage wizard;
// original qualifiers on the bean
private ArrayList<IQualifier> originalQualifiers;
@@ -46,6 +66,9 @@
// current qualifiers on the bean
private ArrayList<IQualifier> deployed = new ArrayList<IQualifier>();
+
+ // original + deployed
+ ArrayList<IQualifier> total = new ArrayList<IQualifier>();
private ListViewer availableListViewer;
private ListViewer deployedListViewer;
@@ -55,20 +78,47 @@
protected boolean isComplete = true;
- public AddQualifiersToBeanComposite(Composite parent, IBean bean) {
+ public AddQualifiersToBeanComposite(Composite parent, WizardPage wizard) {
super(parent, SWT.NONE);
+ this.wizard = wizard;
+ this.injectionPoint =
((AddQualifiersToBeanWizard)wizard.getWizard()).getInjectionPoint();
+ this.bean = ((AddQualifiersToBeanWizard)wizard.getWizard()).getBean();
+ this.beans = ((AddQualifiersToBeanWizard)wizard.getWizard()).getBeans();
originalQualifiers = new ArrayList<IQualifier>(bean.getQualifiers());
+ loadAvailableQualifiers();
+
+ createControl();
+ }
+
+ private void loadAvailableQualifiers(){
+ String beanTypeName = bean.getBeanClass().getFullyQualifiedName();
+ String beanPackage =
beanTypeName.substring(0,beanTypeName.lastIndexOf(MarkerResolutionUtils.DOT));
+
+ String injectionPointTypeName =
injectionPoint.getClassBean().getBeanClass().getFullyQualifiedName();
+ String injectionPointPackage =
injectionPointTypeName.substring(0,injectionPointTypeName.lastIndexOf(MarkerResolutionUtils.DOT));
+
+ boolean samePackage = beanPackage.equals(injectionPointPackage);
+
IQualifier[] qs = bean.getCDIProject().getQualifiers();
qualifiers = new ArrayList<IQualifier>();
for(IQualifier q : qs){
- if(!originalQualifiers.contains(q))
- qualifiers.add(q);
+ if(!originalQualifiers.contains(q)){
+ boolean isPublic = true;
+ try{
+ isPublic = Flags.isPublic(q.getSourceType().getFlags());
+ }catch(JavaModelException ex){
+ CDIUIPlugin.getDefault().logError(ex);
+ }
+ String qualifierTypeName = q.getSourceType().getFullyQualifiedName();
+ String qualifierPackage =
qualifierTypeName.substring(0,qualifierTypeName.lastIndexOf(MarkerResolutionUtils.DOT));
+ if(isPublic || (samePackage &&
injectionPointPackage.equals(qualifierPackage)))
+ qualifiers.add(q);
+ }
}
- createControl();
}
public void setVisible(boolean visible) {
@@ -90,6 +140,42 @@
});
}
+ private boolean checkBeans(){
+ total.clear();
+ total.addAll(originalQualifiers);
+ total.addAll(deployed);
+ HashSet<IQualifier> qfs = new HashSet<IQualifier>(total);
+
+ for(IBean b: beans){
+ if(b.equals(bean))
+ continue;
+ if(checkBeanQualifiers(b, qfs))
+ return false;
+
+ }
+ return true;
+ }
+
+ public static boolean checkBeanQualifiers(IBean bean, Set<IQualifier>
qualifiers){
+ for(IQualifier qualifier : qualifiers){
+ if(!isBeanContainQualifier(bean.getQualifiers(), qualifier)){
+ return false;
+ }
+ }
+ if(bean.getQualifiers().size() == qualifiers.size())
+ return true;
+ return false;
+ }
+
+ public static boolean isBeanContainQualifier(Set<IQualifier> qualifiers,
IQualifier qualifier){
+ for(IQualifier q : qualifiers){
+ if(q.getSourceType().getFullyQualifiedName().equals(qualifier.getSourceType().getFullyQualifiedName()))
+ return true;
+ }
+ return false;
+ }
+
+
protected void createControl() {
GridLayout layout = new GridLayout();
layout.horizontalSpacing = 4;
@@ -111,6 +197,13 @@
});
Label label = new Label(this, SWT.NONE);
+ GridData data = new GridData(GridData.FILL_HORIZONTAL |
GridData.VERTICAL_ALIGN_BEGINNING);
+ data.horizontalSpan = 3;
+ label.setLayoutData(data);
+ label.setText(MessageFormat.format(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_MESSAGE,
+ new Object[]{bean.getBeanClass().getElementName()}));
+
+ label = new Label(this, SWT.NONE);
label.setText(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_AVAILABLE);
label = new Label(this, SWT.NONE);
@@ -120,7 +213,7 @@
label.setText(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_IN_BEAN);
List availableList = new List(this, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL |
SWT.V_SCROLL);
- GridData data = new GridData(GridData.FILL_BOTH);
+ data = new GridData(GridData.FILL_BOTH);
data.heightHint = 200;
data.widthHint = 150;
availableList.setLayoutData(data);
@@ -135,7 +228,7 @@
if (o1 instanceof IQualifier && o2 instanceof IQualifier) {
IQualifier q1 = (IQualifier) o1;
IQualifier q2 = (IQualifier) o2;
- return
(q1.getSourceType().getFullyQualifiedName().compareToIgnoreCase(q2.getSourceType().getFullyQualifiedName()));
+ return
(q1.getSourceType().getElementName().compareToIgnoreCase(q2.getSourceType().getElementName()));
}
return super.compare(viewer, o1, o2);
@@ -219,7 +312,7 @@
if (o1 instanceof IQualifier && o2 instanceof IQualifier) {
IQualifier q1 = (IQualifier) o1;
IQualifier q2 = (IQualifier) o2;
- return
(q1.getSourceType().getFullyQualifiedName().compareToIgnoreCase(q2.getSourceType().getFullyQualifiedName()));
+ return
(q1.getSourceType().getElementName().compareToIgnoreCase(q2.getSourceType().getElementName()));
}
return super.compare(viewer, o1, o2);
@@ -245,7 +338,27 @@
createQualifier.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
- // TODO
+ Shell shell = Workbench.getInstance().getActiveWorkbenchWindow().getShell();
+ NewQualifierCreationWizard wizard = new NewQualifierCreationWizard();
+ StructuredSelection selection = new StructuredSelection(new
Object[]{bean.getBeanClass()});
+
+ wizard.init(Workbench.getInstance(), selection);
+ WizardDialog dialog = new WizardDialog(shell, wizard);
+ int status = dialog.open();
+ if(status == WizardDialog.OK){
+ // reload qualifiers
+ try {
+ Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
+ } catch (InterruptedException e) {
+ // do nothing
+ }
+
+ qualifiers.clear();
+
+ loadAvailableQualifiers();
+
+ refresh();
+ }
}
});
@@ -317,6 +430,15 @@
}
removeAll.setEnabled(deployed.size() > 0);
+
+ // check uniqueness of qualifiers
+ isComplete = checkBeans();
+ if(isComplete)
+ wizard.setMessage("");
+ else
+ wizard.setMessage(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_SET_IS_NOT_UNIQUE,
IMessageProvider.ERROR);
+
+ wizard.setPageComplete(isComplete);
}
protected void add(boolean all) {
@@ -394,6 +516,10 @@
public boolean isComplete() {
return isComplete;
}
+
+ public ArrayList<IQualifier> getDeployedQualifiers(){
+ return deployed;
+ }
class QualifiersListLabelProvider implements ILabelProvider{
@@ -417,7 +543,11 @@
public String getText(Object element) {
if(element instanceof IQualifier){
IQualifier qualifier = (IQualifier)element;
- return qualifier.getSourceType().getFullyQualifiedName();
+ String qualifierTypeName = qualifier.getSourceType().getFullyQualifiedName();
+ String qualifierPackage =
qualifierTypeName.substring(0,qualifierTypeName.lastIndexOf(MarkerResolutionUtils.DOT));
+ String name = qualifier.getSourceType().getElementName();
+
+ return name+" - "+qualifierPackage;
}
return "";
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizard.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizard.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizard.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -10,15 +10,24 @@
******************************************************************************/
package org.jboss.tools.cdi.ui.wizard;
+import java.util.List;
+
import org.eclipse.jface.wizard.Wizard;
import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.IInjectionPoint;
+import org.jboss.tools.cdi.core.IQualifier;
import org.jboss.tools.cdi.ui.CDIUIMessages;
import org.jboss.tools.common.model.ui.ModelUIImages;
public class AddQualifiersToBeanWizard extends Wizard{
+ private IInjectionPoint injectionPoint;
+ private List<IBean> beans;
private IBean bean;
+ private AddQualifiersToBeanWizardPage page;
- public AddQualifiersToBeanWizard(IBean bean){
+ public AddQualifiersToBeanWizard(IInjectionPoint injectionPoint, List<IBean>
beans, IBean bean){
+ this.injectionPoint = injectionPoint;
+ this.beans = beans;
this.bean = bean;
setWindowTitle(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_TITLE);
@@ -26,15 +35,27 @@
}
public void addPages() {
- addPage(new AddQualifiersToBeanWizardPage(""));
+ page = new AddQualifiersToBeanWizardPage("");
+ addPage(page);
}
-
@Override
public boolean performFinish() {
- return false;
+ return true;
}
+ public List<IQualifier> getDeployedQualifiers(){
+ return page.getDeployedQualifiers();
+ }
+
+ public IInjectionPoint getInjectionPoint(){
+ return injectionPoint;
+ }
+
+ public List<IBean> getBeans(){
+ return beans;
+ }
+
public IBean getBean(){
return bean;
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizardPage.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizardPage.java 2010-12-27
16:54:36 UTC (rev 27751)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/AddQualifiersToBeanWizardPage.java 2010-12-27
18:40:40 UTC (rev 27752)
@@ -11,22 +11,29 @@
package org.jboss.tools.cdi.ui.wizard;
import java.text.MessageFormat;
+import java.util.ArrayList;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.widgets.Composite;
+import org.jboss.tools.cdi.core.IQualifier;
import org.jboss.tools.cdi.ui.CDIUIMessages;
public class AddQualifiersToBeanWizardPage extends WizardPage{
+ private AddQualifiersToBeanComposite composite;
+
protected AddQualifiersToBeanWizardPage(String pageName) {
super(pageName);
setTitle(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_TITLE);
}
public void createControl(Composite parent) {
- setControl(new AddQualifiersToBeanComposite(parent,
((AddQualifiersToBeanWizard)getWizard()).getBean()));
- setMessage(MessageFormat.format(CDIUIMessages.ADD_QUALIFIERS_TO_BEAN_WIZARD_MESSAGE,
- new
Object[]{((AddQualifiersToBeanWizard)getWizard()).getBean().getBeanClass().getElementName()}));
+ composite = new AddQualifiersToBeanComposite(parent, this);
+ setControl(composite);
}
-
+
+ public ArrayList<IQualifier> getDeployedQualifiers(){
+ return composite.getDeployedQualifiers();
+ }
+
}