Author: scabanovich
Date: 2011-03-28 21:06:29 -0400 (Mon, 28 Mar 2011)
New Revision: 30082
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/CDIBuilderDelegate.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/FileSet.java
Log:
JBIDE-3120
https://issues.jboss.org/browse/JBIDE-3120
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -34,6 +34,7 @@
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
@@ -337,8 +338,15 @@
if(f.getName().endsWith(".java")) {
ICompilationUnit unit = EclipseUtil.getCompilationUnit(f);
if(unit!=null) {
- IType[] ts = unit.getTypes();
- fileSet.add(f.getFullPath(), ts);
+ if(f.getName().equals("package-info.java")) {
+ IPackageDeclaration[] pkg = unit.getPackageDeclarations();
+ if(pkg != null && pkg.length > 0) {
+ fileSet.add(f.getFullPath(), pkg[0]);
+ }
+ } else {
+ IType[] ts = unit.getTypes();
+ fileSet.add(f.getFullPath(), ts);
+ }
}
}
else if(path.segmentCount() == srcs[i].segmentCount() + 2
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -24,6 +24,18 @@
/**
* Loads Eclipse extension point 'org.jboss.tools.cdi.core.cdiextensions'
+ * Element:
+ * 'cdiextension'
+ * Attributes:
+ * 'runtime' - Qualified name of CDI runtime extension implementation class.
+ * 'class' - Qualified name of JBoss Tools CDI model extension implementation
class.
+ * 'features' - It is not planned to add regular methods to this interface,
+ * all features that are to be provided by implementations, will be available
+ * through IAdaptable. In that way, adding to core support of a new feature
+ * will not require to implement new methods in existing extensions.
+ * In order to efficiently request only relevant implementations,
+ * extensions must register supported features in this attribute.
+ *
* @author Viacheslav Kabanovich
*
*/
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -10,18 +10,26 @@
******************************************************************************/
package org.jboss.tools.cdi.core.extension;
+import org.eclipse.core.runtime.IAdaptable;
+
/**
* This object represents CDI runtime extension in JBoss Tools CDI model.
* It is not necessarily one to one mapping between CDI runtime extension implementation
classes
* and JBoss Tools CDI model extension implementation classes.
* Mapping is set by Eclipse extension point
'org.jboss.tools.cdi.core.cdiextensions'
- * where attribute 'id' is assigned to a CDI runtime extension implementation
class qualified name
+ * where attribute 'runtime' is assigned to a CDI runtime extension
implementation class qualified name
* and attribute 'class' is assigned to a JBoss Tools CDI model extension
implementation class
* qualified name.
+ * It is not planned to add regular methods to this interface, all features that are to
be provided
+ * by implementations, will be available through IAdaptable. In that way, adding to core
support of
+ * a new feature will not require to implement new methods in existing extensions. In
order to
+ * let core efficiently request only relevant implementations, extensions must register
supported
+ * features in attribute 'features' of extension point.
*
+ *
* @author Viacheslav Kabanovich
*
*/
-public interface ICDIExtension {
+public interface ICDIExtension extends IAdaptable {
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -59,7 +59,7 @@
}
String name = annotation.getElementName();
annotationTypeName = EclipseJavaUtil.resolveType(declaringType, name);
- type = EclipseJavaUtil.findType(declaringType.getJavaProject(), annotationTypeName);
+ type = EclipseJavaUtil.findType(annotation.getJavaProject(), annotationTypeName);
} catch (JavaModelException e) {
CDICorePlugin.getDefault().logError(e);
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -19,6 +19,7 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IAnnotatable;
import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.CDICorePlugin;
@@ -62,7 +63,7 @@
}
protected void init(IType contextType, DefinitionContext context) throws CoreException
{
- resource = contextType.getResource();
+ resource = ((IJavaElement)member).getResource();
IAnnotation[] ts = member.getAnnotations();
for (int i = 0; i < ts.length; i++) {
AnnotationDeclaration a = new AnnotationDeclaration();
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -38,6 +38,9 @@
private Map<String, TypeDefinition> typeDefinitions = new HashMap<String,
TypeDefinition>();
private Map<String, AnnotationDefinition> annotations = new HashMap<String,
AnnotationDefinition>();
+ private Set<String> packages = new HashSet<String>();
+ private Map<String, PackageDefinition> packageDefinitions = new HashMap<String,
PackageDefinition>();
+
private Map<IPath, BeansXMLDefinition> beanXMLs = new HashMap<IPath,
BeansXMLDefinition>();
private DefinitionContext workingCopy;
@@ -53,6 +56,10 @@
copy.types.addAll(types);
copy.typeDefinitions.putAll(typeDefinitions);
copy.annotations.putAll(annotations);
+
+ copy.packages.addAll(packages);
+ copy.packageDefinitions.putAll(packageDefinitions);
+
for (IPath p: resources.keySet()) {
Set<String> set = resources.get(p);
if(set != null) {
@@ -112,6 +119,24 @@
}
}
+ public void addPackage(IPath file, String packageName, PackageDefinition def) {
+ if(file != null) {
+ Set<String> ts = resources.get(file);
+ if(ts == null) {
+ ts = new HashSet<String>();
+ resources.put(file, ts);
+ }
+ ts.add(packageName);
+ packages.add(packageName);
+ addToParents(file);
+ }
+ if(def != null) {
+ synchronized (packageDefinitions) {
+ packageDefinitions.put(def.getQualifiedName(), def);
+ }
+ }
+ }
+
public void addBeanXML(IPath path, BeansXMLDefinition def) {
synchronized (beanXMLs) {
beanXMLs.put(path, def);
@@ -137,12 +162,16 @@
childPaths.clear();
resources.clear();
types.clear();
+ packages.clear();
synchronized (typeDefinitions) {
typeDefinitions.clear();
}
synchronized (annotations) {
annotations.clear();
}
+ synchronized (packageDefinitions) {
+ packageDefinitions.clear();
+ }
synchronized (beanXMLs) {
beanXMLs.clear();
}
@@ -158,6 +187,10 @@
synchronized (annotations) {
annotations.remove(t);
}
+ packages.remove(t);
+ synchronized (packageDefinitions) {
+ packageDefinitions.remove(t);
+ }
}
synchronized (beanXMLs) {
beanXMLs.remove(path);
@@ -271,6 +304,8 @@
childPaths = workingCopy.childPaths;
typeDefinitions = workingCopy.typeDefinitions;
annotations = workingCopy.annotations;
+ packages = workingCopy.packages;
+ packageDefinitions = workingCopy.packageDefinitions;
beanXMLs = workingCopy.beanXMLs;
project.getDelegate().update();
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -19,6 +19,7 @@
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
import org.jboss.tools.cdi.core.IInterceptorBinding;
@@ -117,7 +118,7 @@
String p = params[i].trim();
int pi = params[i].indexOf(p);
- ValueInfo v = new ValueInfo();
+ ValueInfo v = new CheckingValueInfo(method);
v.setValue(params[i]);
v.valueStartPosition = start + pi;
v.valueLength = p.length();
@@ -126,7 +127,7 @@
String[] tokens = getParamTokens(p);
for (String q: tokens) {
if(!q.startsWith("@")) continue;
- v = new ValueInfo();
+ v = new CheckingValueInfo(method);
v.setValue(q);
v.valueStartPosition = start + params[i].indexOf(q);
v.valueLength = q.length();
@@ -270,4 +271,42 @@
return result.toArray(new String[0]);
}
+ class CheckingValueInfo extends ValueInfo {
+ IMethod m;
+ CheckingValueInfo(IMethod m) {
+ this.m = m;
+ }
+
+ void check() {
+ ISourceRange r = null;
+ try {
+ r = m.getSourceRange();
+ } catch (JavaModelException e) {
+ System.out.println("Method is obsolete: " + m);
+ }
+ if(r == null) {
+ valueStartPosition = 0;
+ valueLength = 0;
+ } else {
+ if(valueStartPosition + valueLength > r.getOffset() + r.getLength()) {
+ System.out.println("Method is modified: " + m);
+ valueStartPosition = 0;
+ valueLength = 0;
+ }
+ }
+
+ }
+
+ public int getStartPosition() {
+ check();
+ return valueStartPosition;
+ }
+
+ public int getLength() {
+ check();
+ return valueLength;
+ }
+
+ }
+
}
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.internal.core.impl.definition;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IPackageDeclaration;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class PackageDefinition extends AbstractMemberDefinition {
+ protected String qualifiedName;
+
+ public PackageDefinition() {}
+
+ public String getQualifiedName() {
+ return qualifiedName;
+ }
+
+ public void setPackage(IPackageDeclaration pkg, DefinitionContext context) {
+ IType contextType = null;
+ ICompilationUnit u = null;
+ if(pkg.getParent() instanceof ICompilationUnit) {
+ try {
+ u = ((ICompilationUnit)pkg.getParent()).getWorkingCopy(new NullProgressMonitor());
+ contextType = u.createType("class A {}", null, false, new
NullProgressMonitor());
+ } catch (JavaModelException e) {
+
+ }
+ }
+ super.setAnnotatable(pkg, contextType, context);
+ if (u != null) {
+ try {
+ u.discardWorkingCopy();
+ } catch (JavaModelException e) {
+
+ }
+ }
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/CDIBuilderDelegate.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/CDIBuilderDelegate.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/CDIBuilderDelegate.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -5,6 +5,7 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.CDICoreNature;
import org.jboss.tools.cdi.core.ICDIBuilderDelegate;
@@ -12,6 +13,7 @@
import org.jboss.tools.cdi.internal.core.impl.CDIProject;
import org.jboss.tools.cdi.internal.core.impl.definition.BeansXMLDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
+import org.jboss.tools.cdi.internal.core.impl.definition.PackageDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
import org.jboss.tools.common.model.XModelObject;
@@ -58,6 +60,14 @@
}
}
+ Map<IPath, IPackageDeclaration> pkgs = fileSet.getPackages();
+ for (IPath f: pkgs.keySet()) {
+ IPackageDeclaration pkg = pkgs.get(f);
+ PackageDefinition def = new PackageDefinition();
+ def.setPackage(pkg, context);
+ context.addPackage(f, def.getQualifiedName(), def);
+ }
+
for (IPath f: ps) {
XModelObject beansXML = fileSet.getBeanXML(f);
if(beansXML == null) continue;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/FileSet.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/FileSet.java 2011-03-29
00:38:33 UTC (rev 30081)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/scanner/FileSet.java 2011-03-29
01:06:29 UTC (rev 30082)
@@ -8,6 +8,7 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.common.model.XModelObject;
@@ -17,6 +18,7 @@
private Map<IPath, Set<IType>> annotations = new HashMap<IPath,
Set<IType>>();
private Map<IPath, Set<IType>> interfaces = new HashMap<IPath,
Set<IType>>();
private Map<IPath, Set<IType>> classes = new HashMap<IPath,
Set<IType>>();
+ private Map<IPath, IPackageDeclaration> packages = new HashMap<IPath,
IPackageDeclaration>();
private Map<IPath, XModelObject> beanXMLs = new HashMap<IPath,
XModelObject>();
public FileSet() {}
@@ -58,6 +60,12 @@
ts.add(type);
}
+ public void add(IPath path, IPackageDeclaration pkg) throws CoreException {
+ if(pkg == null) return;
+ allpaths.add(path);
+ packages.put(path, pkg);
+ }
+
public Set<IPath> getAllPaths() {
return allpaths;
}
@@ -78,6 +86,10 @@
return classes;
}
+ public Map<IPath, IPackageDeclaration> getPackages() {
+ return packages;
+ }
+
public XModelObject getBeanXML(IPath f) {
return beanXMLs.get(f);
}