[jbosstools-commits] JBoss Tools SVN: r30491 - in trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core: src/org/jboss/tools/cdi/seam/solder/core and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Mon Apr 11 17:54:00 EDT 2011


Author: scabanovich
Date: 2011-04-11 17:54:00 -0400 (Mon, 11 Apr 2011)
New Revision: 30491

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java
Log:
JBIDE-8712
https://issues.jboss.org/browse/JBIDE-8712

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml	2011-04-11 21:24:02 UTC (rev 30490)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml	2011-04-11 21:54:00 UTC (rev 30491)
@@ -7,5 +7,9 @@
           class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderCoreExtension"
           runtime="org.jboss.seam.solder.core.CoreExtension">
     </cdiextension>
+    <cdiextension
+          class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderLoggerExtension"
+          runtime="org.jboss.seam.solder.logging.TypedMessageLoggerExtension">
+    </cdiextension>
 	</extension>
 </plugin>

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java	2011-04-11 21:24:02 UTC (rev 30490)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java	2011-04-11 21:54:00 UTC (rev 30491)
@@ -8,4 +8,7 @@
 	public String REQUIRES_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.core.Requires";
 	public String VETO_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.core.Veto";
 
+	public String MESSAGE_LOGGER_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.logging.MessageLogger";
+	public String MESSAGE_BUNDLE_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.messages.MessageBundle";
+
 }

Added: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java	2011-04-11 21:54:00 UTC (rev 30491)
@@ -0,0 +1,186 @@
+package org.jboss.tools.cdi.seam.solder.core;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.core.extension.ICDIExtension;
+import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
+import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
+import org.jboss.tools.cdi.internal.core.impl.CDIProject;
+import org.jboss.tools.cdi.internal.core.impl.ClassBean;
+import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
+import org.jboss.tools.cdi.internal.core.scanner.FileSet;
+import org.jboss.tools.common.model.XModelObject;
+
+public class CDISeamSolderLoggerExtension implements ICDIExtension, IBuildParticipantFeature {
+	CDICoreNature project;
+	LoggerDefinitionContext context = new LoggerDefinitionContext();
+
+	public Object getAdapter(Class adapter) {
+		return null;
+	}
+
+	public void setProject(CDICoreNature n) {
+		project = n;
+	}
+
+	public IDefinitionContextExtension getContext() {
+		return context;
+	}
+
+	public void beginVisiting() {
+	}
+
+	public void visitJar(IPath path, IPackageFragmentRoot root, XModelObject beansXML) {
+	}
+
+	public void visit(IFile file, IPath src, IPath webinf) {
+	}
+
+	public void buildDefinitions() {
+	}
+
+	public void buildDefinitions(FileSet fileSet) {
+		Map<IPath, Set<IType>> is = fileSet.getInterfaces();
+		for (IPath path: is.keySet()) {
+			Set<IType> ts = is.get(path);
+			for (IType t: ts) {
+				InterfaceDefinition i = new InterfaceDefinition(t);
+				if(i.isAnnotationPresent(CDISeamSolderConstants.MESSAGE_LOGGER_ANNOTATION_TYPE_NAME)) {
+					TypeDefinition d = new TypeDefinition();
+					d.setType(t, context.getRootContext());
+					((LoggerDefinitionContext)context.getWorkingCopy()).addMessageLogger(path, d);
+				} else if(i.isAnnotationPresent(CDISeamSolderConstants.MESSAGE_BUNDLE_ANNOTATION_TYPE_NAME)) {
+					TypeDefinition d = new TypeDefinition();
+					d.setType(t, context.getRootContext());
+					((LoggerDefinitionContext)context.getWorkingCopy()).addMessageBundle(path, d);
+				}
+			}
+		}
+	}
+
+	public void buildBeans() {
+		CDIProject p = ((CDIProject)project.getDelegate());
+		Map<IPath, TypeDefinition> loggers = context.getMessageLoggers();
+		for (TypeDefinition d: loggers.values()) {
+			ClassBean b = new ClassBean();
+			b.setDefinition(d);
+			b.setParent(p);
+			p.addBean(b);
+		}
+
+		Map<IPath, TypeDefinition> bundles = context.getMessageBundles();
+		for (TypeDefinition d: bundles.values()) {
+			ClassBean b = new ClassBean();
+			b.setDefinition(d);
+			b.setParent(p);
+			p.addBean(b);
+		}
+
+	}
+
+	class LoggerDefinitionContext implements IDefinitionContextExtension {
+		IRootDefinitionContext root;
+
+		Map<IPath, TypeDefinition> messageLoggers = new HashMap<IPath, TypeDefinition>();
+		Map<IPath, TypeDefinition> messageBundles = new HashMap<IPath, TypeDefinition>();
+	
+		LoggerDefinitionContext original;
+		LoggerDefinitionContext workingCopy;
+
+		private LoggerDefinitionContext copy(boolean clean) {
+			LoggerDefinitionContext copy = new LoggerDefinitionContext();
+			copy.root = root;
+			if(!clean) {
+				copy.messageLoggers.putAll(messageLoggers);
+				copy.messageBundles.putAll(messageBundles);
+			}
+
+			return copy;
+		}
+
+		public void newWorkingCopy(boolean forFullBuild) {
+			if(original != null) return;
+			workingCopy = copy(forFullBuild);
+			workingCopy.original = this;
+		}
+
+		public void applyWorkingCopy() {
+			if(original != null) {
+				original.applyWorkingCopy();
+				return;
+			}
+			if(workingCopy == null) {
+				return;
+			}
+			messageLoggers = workingCopy.messageLoggers;
+			messageBundles = workingCopy.messageBundles;
+			
+			workingCopy = null;
+		}
+
+		public void clean() {
+			messageLoggers.clear();
+			messageBundles.clear();			
+		}
+
+		public void clean(IPath path) {
+			messageLoggers.remove(path);
+			messageBundles.remove(path);
+		}
+
+		public void setRootContext(IRootDefinitionContext context) {
+			root = context;
+		}
+
+		public IRootDefinitionContext getRootContext() {
+			return root;
+		}
+
+		public IDefinitionContextExtension getWorkingCopy() {
+			if(original != null) {
+				return this;
+			}
+			if(workingCopy != null) {
+				return workingCopy;
+			}
+			workingCopy = copy(false);
+			workingCopy.original = this;
+			return workingCopy;
+		}
+	
+		public void addMessageLogger(IPath path, TypeDefinition def) {
+			messageLoggers.put(path, def);
+			root.addToParents(path);
+		}
+		
+		public void addMessageBundle(IPath path, TypeDefinition def) {
+			messageBundles.put(path, def);
+			root.addToParents(path);
+		}
+	
+		public Map<IPath, TypeDefinition> getMessageLoggers() {
+			return messageLoggers;
+		}
+		
+		public Map<IPath, TypeDefinition> getMessageBundles() {
+			return messageBundles;
+		}
+		
+	}
+
+	class InterfaceDefinition extends AbstractMemberDefinition {
+		InterfaceDefinition(IType type) {
+			setAnnotatable(type, type, context.getRootContext());
+		}
+	}
+
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain



More information about the jbosstools-commits mailing list