summaryrefslogtreecommitdiffstats
authorMarcel Bruch2012-01-14 15:53:36 (EST)
committer Marcel Bruch2012-01-14 15:53:36 (EST)
commitc1b0b4972db6bdd8f0158a0aa914678700c523d5 (patch) (side-by-side diff)
treeaef4cf6fb854aca82bbbbcd985641e728a6a88c1
parentaade13443812016252ce7751e770b69ce6ffc7bb (diff)
downloadorg.eclipse.recommenders-c1b0b4972db6bdd8f0158a0aa914678700c523d5.zip
org.eclipse.recommenders-c1b0b4972db6bdd8f0158a0aa914678700c523d5.tar.gz
org.eclipse.recommenders-c1b0b4972db6bdd8f0158a0aa914678700c523d5.tar.bz2
added drafts of extdoc providers
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--plugins/org.eclipse.recommenders.codesearch.server/META-INF/MANIFEST.MF2
-rw-r--r--plugins/org.eclipse.recommenders.completion.rcp.calls/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.recommenders.completion.rcp.calls/src/org/eclipse/recommenders/internal/completion/rcp/calls/net/BayesNetWrapper.java2
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/plugin.xml19
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/CallsProvider.java163
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/ExtdocResourceProxy.java96
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/examples/ExamplesProvider.java93
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/OverridesProvider.java (copied from plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SubclassingDirectivesProvider.java)208
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SelfCallsProvider.java (renamed from plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SubclassingDirectivesProvider.java)122
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/ProviderContentPart.java3
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/SwtUtils.java7
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/CouchDataAccess.java8
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/ExtdocResource.java42
-rw-r--r--plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/wiring/BundleActivator.java3
-rw-r--r--plugins/org.eclipse.recommenders.extdoc/src/org/eclipse/recommenders/extdoc/IExtdocResource.java34
16 files changed, 585 insertions, 225 deletions
diff --git a/plugins/org.eclipse.recommenders.codesearch.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.recommenders.codesearch.server/META-INF/MANIFEST.MF
index 1097925..e47d033 100644
--- a/plugins/org.eclipse.recommenders.codesearch.server/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.recommenders.codesearch.server/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@ Bundle-Vendor: Eclipse Code Recommenders
Export-Package: org.eclipse.recommenders.codesearch.server.resources
Require-Bundle: org.eclipse.recommenders.utils,
org.eclipse.recommenders.codesearch,
- org.apache.lucene;bundle-version="3.0.0",
+ org.apache.lucene;bundle-version="2.9.0",
com.google.guava,
org.eclipse.recommenders.utils.gson,
org.apache.commons.io,
diff --git a/plugins/org.eclipse.recommenders.completion.rcp.calls/META-INF/MANIFEST.MF b/plugins/org.eclipse.recommenders.completion.rcp.calls/META-INF/MANIFEST.MF
index b2d336e..18c8390 100644
--- a/plugins/org.eclipse.recommenders.completion.rcp.calls/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.recommenders.completion.rcp.calls/META-INF/MANIFEST.MF
@@ -34,7 +34,9 @@ Require-Bundle: org.eclipse.ui,
org.apache.commons.lang3
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.recommenders.internal.completion.rcp.calls.store,
+Export-Package: org.eclipse.recommenders.internal.completion.rcp.calls.engine,
+ org.eclipse.recommenders.internal.completion.rcp.calls.net,
+ org.eclipse.recommenders.internal.completion.rcp.calls.store,
org.eclipse.recommenders.internal.completion.rcp.calls.store.bak,
org.eclipse.recommenders.internal.completion.rcp.calls.store.jobs,
org.eclipse.recommenders.internal.completion.rcp.calls.store.structs,
diff --git a/plugins/org.eclipse.recommenders.completion.rcp.calls/src/org/eclipse/recommenders/internal/completion/rcp/calls/net/BayesNetWrapper.java b/plugins/org.eclipse.recommenders.completion.rcp.calls/src/org/eclipse/recommenders/internal/completion/rcp/calls/net/BayesNetWrapper.java
index 4a100e2..54759a5 100644
--- a/plugins/org.eclipse.recommenders.completion.rcp.calls/src/org/eclipse/recommenders/internal/completion/rcp/calls/net/BayesNetWrapper.java
+++ b/plugins/org.eclipse.recommenders.completion.rcp.calls/src/org/eclipse/recommenders/internal/completion/rcp/calls/net/BayesNetWrapper.java
@@ -156,7 +156,7 @@ public class BayesNetWrapper implements IObjectMethodCallsNet {
@Override
public void setDefinition(final IMethodName newDefinition) {
- final String identifier = newDefinition.getIdentifier();
+ final String identifier = newDefinition == null ? NetworkUtils.STATE_DUMMY_DEF : newDefinition.getIdentifier();
if (definitionNode.getOutcomes().contains(identifier)) {
junctionTreeAlgorithm.addEvidence(definitionNode, identifier);
}
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/META-INF/MANIFEST.MF b/plugins/org.eclipse.recommenders.extdoc.rcp/META-INF/MANIFEST.MF
index e8a4827..53dc980 100644
--- a/plugins/org.eclipse.recommenders.extdoc.rcp/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/META-INF/MANIFEST.MF
@@ -19,7 +19,9 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.core.resources,
org.eclipse.recommenders.webclient,
org.eclipse.recommenders.extdoc,
- org.eclipse.recommenders.utils.gson
+ org.eclipse.recommenders.utils.gson,
+ org.eclipse.recommenders.completion.rcp.calls,
+ org.eclipse.recommenders.udc
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Vendor: Eclipse Code Recommenders
Bundle-Activator: org.eclipse.recommenders.internal.extdoc.rcp.wiring.ExtdocPlugin
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/plugin.xml b/plugins/org.eclipse.recommenders.extdoc.rcp/plugin.xml
index 540a5f9..7f75b60 100644
--- a/plugins/org.eclipse.recommenders.extdoc.rcp/plugin.xml
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/plugin.xml
@@ -27,9 +27,24 @@
name="Javadoc">
</provider>
<provider
- class="org.eclipse.recommenders.injection.ExtensionFactory:org.eclipse.recommenders.internal.extdoc.rcp.providers.subclassing.SubclassingDirectivesProvider"
+ class="org.eclipse.recommenders.injection.ExtensionFactory:org.eclipse.recommenders.internal.extdoc.rcp.providers.subclassing.OverridesProvider"
image="icons/provider.subclassing.gif"
- name="Subclassing Directives">
+ name="Overrides">
+ </provider>
+ <provider
+ class="org.eclipse.recommenders.injection.ExtensionFactory:org.eclipse.recommenders.internal.extdoc.rcp.providers.subclassing.SelfCallsProvider"
+ image="icons/provider.subclassing-patterns.gif"
+ name="Self Calls">
+ </provider>
+ <provider
+ class="org.eclipse.recommenders.injection.ExtensionFactory:org.eclipse.recommenders.internal.extdoc.rcp.providers.examples.ExamplesProvider"
+ image="icons/provider.examples.gif"
+ name="Snippets">
+ </provider>
+ <provider
+ class="org.eclipse.recommenders.injection.ExtensionFactory:org.eclipse.recommenders.internal.extdoc.rcp.providers.CallsProvider"
+ image="icons/provider.calls.png"
+ name="Calls (Dynamic)">
</provider>
</extension>
<extension
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/CallsProvider.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/CallsProvider.java
new file mode 100644
index 0000000..88f21a1
--- a/dev/null
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/CallsProvider.java
@@ -0,0 +1,163 @@
+/**
+ * Copyright (c) 2011 Stefan Henss.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * Stefan Henss - initial API and implementation.
+ */
+package org.eclipse.recommenders.internal.extdoc.rcp.providers;
+
+import static org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils.createLabel;
+import static org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils.createSourceCodeArea;
+
+import java.util.Collection;
+
+import javax.inject.Inject;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.ILocalVariable;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.recommenders.commons.udc.ObjectUsage;
+import org.eclipse.recommenders.extdoc.CodeExamples;
+import org.eclipse.recommenders.extdoc.CodeSnippet;
+import org.eclipse.recommenders.extdoc.rcp.providers.ExtdocProvider;
+import org.eclipse.recommenders.extdoc.rcp.providers.JavaSelectionSubscriber;
+import org.eclipse.recommenders.internal.completion.rcp.calls.engine.AstBasedObjectUsageResolver;
+import org.eclipse.recommenders.internal.completion.rcp.calls.net.IObjectMethodCallsNet;
+import org.eclipse.recommenders.internal.completion.rcp.calls.store.bak.IProjectModelFacade;
+import org.eclipse.recommenders.internal.completion.rcp.calls.store.bak.ProjectServices;
+import org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils;
+import org.eclipse.recommenders.rcp.events.JavaSelectionEvent;
+import org.eclipse.recommenders.utils.Tuple;
+import org.eclipse.recommenders.utils.names.IMethodName;
+import org.eclipse.recommenders.utils.names.ITypeName;
+import org.eclipse.recommenders.utils.rcp.JavaElementResolver;
+import org.eclipse.recommenders.utils.rcp.JdtUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.google.common.base.Optional;
+
+public final class CallsProvider extends ExtdocProvider {
+
+ private final ProjectServices projectServices;
+ private final JavaElementResolver jdtResolver;
+ private IJavaProject javaProject;
+ private IType receiverType;
+ private IObjectMethodCallsNet model;
+
+ @Inject
+ public CallsProvider(final ProjectServices projectServices, final JavaElementResolver jdtResolver) {
+ this.projectServices = projectServices;
+ this.jdtResolver = jdtResolver;
+ }
+
+ @JavaSelectionSubscriber
+ public Status onVariableSelection(final ILocalVariable type, final JavaSelectionEvent event, final Composite parent) {
+
+ Optional<ASTNode> opt = event.getSelectedNode();
+ if (!opt.isPresent()) {
+ return Status.NOT_AVAILABLE;
+ }
+ javaProject = type.getJavaProject();
+ String typeSignature = type.getTypeSignature();
+ Optional<IType> varType = JdtUtils.findTypeFromSignature(typeSignature, type);
+ if (!varType.isPresent()) {
+ return Status.NOT_AVAILABLE;
+ }
+ receiverType = varType.get();
+ if (!acquireModel()) {
+ return Status.NOT_AVAILABLE;
+ }
+
+ ASTNode node = opt.get();
+ MethodDeclaration method = null;
+ for (ASTNode p = node; p != null; p = p.getParent()) {
+ if (p instanceof MethodDeclaration) {
+ method = (MethodDeclaration) p;
+ break;
+ }
+ }
+ if (method == null) {
+ return Status.NOT_AVAILABLE;
+ }
+
+ final AstBasedObjectUsageResolver r = new AstBasedObjectUsageResolver();
+ final ObjectUsage usage = r.findObjectUsage(type.getElementName(), method);
+
+ model.setQuery(usage);
+ final Collection<Tuple<IMethodName, Double>> methodCalls = model.getRecommendedMethodCalls(0.05d);
+ releaseModel();
+ runSyncInUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+ Composite container = SwtUtils.createComposite(parent);
+ createLabel(container, "work in progress", true, false, SWT.COLOR_DARK_RED, true);
+ for (Tuple<IMethodName, Double> rec : methodCalls) {
+ int percentage = (int) Math.rint(rec.getSecond() * 100);
+ String text = rec.getFirst().getName() + " - " + percentage + "%";
+ createLabel(container, text, false, true, SWT.COLOR_BLACK, false);
+ }
+
+ }
+ });
+ return Status.OK;
+ }
+
+ private boolean acquireModel() {
+
+ final IProjectModelFacade modelFacade = projectServices.getModelFacade(javaProject);
+
+ final ITypeName recReceiverType = jdtResolver.toRecType(receiverType);
+ if (modelFacade.hasModel(recReceiverType)) {
+ model = modelFacade.acquireModel(recReceiverType);
+ }
+ return model != null;
+ }
+
+ private void releaseModel() {
+ if (model != null) {
+ final IProjectModelFacade modelFacade = projectServices.getModelFacade(javaProject);
+ modelFacade.releaseModel(model);
+ model = null;
+ }
+ }
+
+ private class TypeSelfcallDirectivesRenderer implements Runnable {
+
+ private final CodeExamples examples;
+ private final Composite parent;
+ private Composite container;
+
+ public TypeSelfcallDirectivesRenderer(final IType type, final CodeExamples examples, final Composite parent) {
+ this.examples = examples;
+ this.parent = parent;
+ }
+
+ @Override
+ public void run() {
+ createContainer();
+ addDirectives();
+ }
+
+ private void createContainer() {
+ container = new Composite(parent, SWT.NO_BACKGROUND);
+ container.setLayout(new GridLayout());
+ }
+
+ private void addDirectives() {
+
+ for (final CodeSnippet snippet : examples.getExamples()) {
+ createSourceCodeArea(container, snippet.getCode());
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/ExtdocResourceProxy.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/ExtdocResourceProxy.java
new file mode 100644
index 0000000..6a37c81
--- a/dev/null
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/ExtdocResourceProxy.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2010, 2011 Darmstadt University of Technology.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * Marcel Bruch - initial API and implementation.
+ */
+package org.eclipse.recommenders.internal.extdoc.rcp.providers;
+
+import javax.inject.Inject;
+
+import org.eclipse.recommenders.extdoc.ClassOverrideDirectives;
+import org.eclipse.recommenders.extdoc.ClassOverridePatterns;
+import org.eclipse.recommenders.extdoc.ClassSelfcallDirectives;
+import org.eclipse.recommenders.extdoc.CodeExamples;
+import org.eclipse.recommenders.extdoc.IExtdocResource;
+import org.eclipse.recommenders.extdoc.MethodSelfcallDirectives;
+import org.eclipse.recommenders.internal.extdoc.rcp.wiring.ExtdocModule.Extdoc;
+import org.eclipse.recommenders.utils.names.IMethodName;
+import org.eclipse.recommenders.utils.names.ITypeName;
+import org.eclipse.recommenders.webclient.WebServiceClient;
+import org.eclipse.recommenders.webclient.exceptions.NotFoundException;
+
+/**
+ * A proxy for remote server interface. Note that all its methods may return {@code null}!
+ */
+public class ExtdocResourceProxy implements IExtdocResource {
+
+ private final WebServiceClient webclient;
+
+ @Inject
+ public ExtdocResourceProxy(@Extdoc final WebServiceClient webclient) {
+ this.webclient = webclient;
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public ClassOverrideDirectives findClassOverrideDirectives(final ITypeName type) {
+ ClassOverrideDirectives res = null;
+ try {
+ res = webclient.doPostRequest(URL_CLASS_OVERRIDES, type, ClassOverrideDirectives.class);
+ } catch (final NotFoundException e) {
+ // ignore 404s
+ System.out.println(e);
+ }
+ return res;
+ }
+
+ @Override
+ public ClassSelfcallDirectives findClassSelfcallDirectives(final ITypeName type) {
+ ClassSelfcallDirectives res = null;
+ try {
+ res = webclient.doPostRequest(URL_CLASS_SELF_CALLS, type, ClassSelfcallDirectives.class);
+ } catch (final NotFoundException e) {
+ // ignore 404s
+ }
+ return res;
+ }
+
+ @Override
+ public MethodSelfcallDirectives findMethodSelfcallDirectives(final IMethodName method) {
+ MethodSelfcallDirectives res = null;
+ try {
+ res = webclient.doPostRequest("method-selfcalls", method, MethodSelfcallDirectives.class);
+ } catch (final NotFoundException e) {
+ // ignore 404s
+ }
+ return res;
+ }
+
+ @Override
+ public ClassOverridePatterns findClassOverridePatterns(final ITypeName type) {
+ ClassOverridePatterns res = null;
+ try {
+ res = webclient.doPostRequest(URL_CLASS_OVERRIDE_PATTERNS, type, ClassOverridePatterns.class);
+ } catch (final NotFoundException e) {
+ // ignore 404s
+ }
+ return res;
+ }
+
+ @Override
+ public CodeExamples findCodeExamples(final ITypeName type) {
+ CodeExamples res = null;
+ try {
+ res = webclient.doPostRequest(URL_TYPE_USAGE_SNIPPETS, type, CodeExamples.class);
+ } catch (final NotFoundException e) {
+ // ignore 404s
+ }
+ return res;
+ }
+
+}
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/examples/ExamplesProvider.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/examples/ExamplesProvider.java
new file mode 100644
index 0000000..90cad3d
--- a/dev/null
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/examples/ExamplesProvider.java
@@ -0,0 +1,93 @@
+/**
+ * Copyright (c) 2011 Stefan Henss.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * Stefan Henss - initial API and implementation.
+ */
+package org.eclipse.recommenders.internal.extdoc.rcp.providers.examples;
+
+import static org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils.createSourceCodeArea;
+
+import javax.inject.Inject;
+
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeRoot;
+import org.eclipse.recommenders.extdoc.CodeExamples;
+import org.eclipse.recommenders.extdoc.CodeSnippet;
+import org.eclipse.recommenders.extdoc.rcp.providers.ExtdocProvider;
+import org.eclipse.recommenders.extdoc.rcp.providers.JavaSelectionSubscriber;
+import org.eclipse.recommenders.internal.extdoc.rcp.providers.ExtdocResourceProxy;
+import org.eclipse.recommenders.rcp.events.JavaSelectionEvent;
+import org.eclipse.recommenders.utils.names.ITypeName;
+import org.eclipse.recommenders.utils.rcp.JavaElementResolver;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+public final class ExamplesProvider extends ExtdocProvider {
+
+ private final ExtdocResourceProxy proxy;
+ private final JavaElementResolver resolver;
+
+ @Inject
+ public ExamplesProvider(final ExtdocResourceProxy proxy, final JavaElementResolver resolver) {
+ this.proxy = proxy;
+ this.resolver = resolver;
+
+ }
+
+ @JavaSelectionSubscriber
+ public Status onTypeRootSelection(final ITypeRoot root, final JavaSelectionEvent event, final Composite parent) {
+ final IType type = root.findPrimaryType();
+ if (type != null) {
+ return onTypeSelection(type, event, parent);
+ }
+ return Status.NOT_AVAILABLE;
+ }
+
+ @JavaSelectionSubscriber
+ public Status onTypeSelection(final IType type, final JavaSelectionEvent event, final Composite parent) {
+ final ITypeName typeName = resolver.toRecType(type);
+ final CodeExamples examples = proxy.findCodeExamples(typeName);
+ if (examples == null) {
+ return Status.NOT_AVAILABLE;
+ }
+ runSyncInUiThread(new TypeSelfcallDirectivesRenderer(type, examples, parent));
+ return Status.OK;
+ }
+
+ private class TypeSelfcallDirectivesRenderer implements Runnable {
+
+ private final CodeExamples examples;
+ private final Composite parent;
+ private Composite container;
+
+ public TypeSelfcallDirectivesRenderer(final IType type, final CodeExamples examples, final Composite parent) {
+ this.examples = examples;
+ this.parent = parent;
+ }
+
+ @Override
+ public void run() {
+ createContainer();
+ addDirectives();
+ }
+
+ private void createContainer() {
+ container = new Composite(parent, SWT.NO_BACKGROUND);
+ container.setLayout(new GridLayout());
+ }
+
+ private void addDirectives() {
+
+ for (final CodeSnippet snippet : examples.getExamples()) {
+ createSourceCodeArea(container, snippet.getCode());
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SubclassingDirectivesProvider.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/OverridesProvider.java
index a5a610f..5220ceb 100644
--- a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SubclassingDirectivesProvider.java
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/OverridesProvider.java
@@ -10,33 +10,38 @@
*/
package org.eclipse.recommenders.internal.extdoc.rcp.providers.subclassing;
+import static com.google.common.collect.Collections2.filter;
+import static com.google.common.collect.Lists.newLinkedList;
import static java.lang.String.format;
+import static java.util.Arrays.asList;
import static org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils.createGridComposite;
import static org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils.createLabel;
import static org.eclipse.recommenders.rcp.events.JavaSelectionEvent.JavaSelectionLocation.METHOD_DECLARATION;
import static org.eclipse.recommenders.utils.TreeBag.newTreeBag;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map.Entry;
+
import javax.inject.Inject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeRoot;
import org.eclipse.recommenders.extdoc.ClassOverrideDirectives;
-import org.eclipse.recommenders.extdoc.ClassSelfcallDirectives;
-import org.eclipse.recommenders.extdoc.MethodSelfcallDirectives;
+import org.eclipse.recommenders.extdoc.ClassOverridePatterns;
+import org.eclipse.recommenders.extdoc.MethodPattern;
import org.eclipse.recommenders.extdoc.rcp.providers.ExtdocProvider;
import org.eclipse.recommenders.extdoc.rcp.providers.JavaSelectionSubscriber;
+import org.eclipse.recommenders.internal.extdoc.rcp.providers.ExtdocResourceProxy;
import org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils;
-import org.eclipse.recommenders.internal.extdoc.rcp.wiring.ExtdocModule.Extdoc;
import org.eclipse.recommenders.rcp.events.JavaSelectionEvent;
import org.eclipse.recommenders.utils.Names;
import org.eclipse.recommenders.utils.TreeBag;
import org.eclipse.recommenders.utils.names.IMethodName;
import org.eclipse.recommenders.utils.names.ITypeName;
import org.eclipse.recommenders.utils.rcp.JavaElementResolver;
-import org.eclipse.recommenders.utils.rcp.JdtUtils;
-import org.eclipse.recommenders.webclient.WebServiceClient;
-import org.eclipse.recommenders.webclient.exceptions.NotFoundException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@@ -45,18 +50,20 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
import com.google.common.eventbus.EventBus;
-public final class SubclassingDirectivesProvider extends ExtdocProvider {
+public final class OverridesProvider extends ExtdocProvider {
- private final WebServiceClient webclient;
+ private final ExtdocResourceProxy proxy;
private final JavaElementResolver resolver;
private final EventBus workspaceBus;
@Inject
- public SubclassingDirectivesProvider(@Extdoc final WebServiceClient webclient, final JavaElementResolver resolver,
+ public OverridesProvider(final ExtdocResourceProxy proxy, final JavaElementResolver resolver,
final EventBus workspaceBus) {
- this.webclient = webclient;
+ this.proxy = proxy;
this.resolver = resolver;
this.workspaceBus = workspaceBus;
@@ -66,56 +73,39 @@ public final class SubclassingDirectivesProvider extends ExtdocProvider {
public Status onTypeRootSelection(final ITypeRoot root, final JavaSelectionEvent event, final Composite parent) {
final IType type = root.findPrimaryType();
if (type != null) {
- onTypeSelection(type, event, parent);
+ return onTypeSelection(type, event, parent);
}
- return Status.OK;
- }
+ return Status.NOT_AVAILABLE;
+ }
@JavaSelectionSubscriber
public Status onTypeSelection(final IType type, final JavaSelectionEvent event, final Composite parent) {
- renderClassOverrideDirectives(type, parent);
- renderClassSelfcallDirectives(type, parent);
- return Status.OK;
+ boolean hasData = false;
+ hasData |= renderClassOverrideDirectives(type, parent);
+ hasData |= renderClassOverridesPatterns(type, parent);
+ return hasData ? Status.OK : Status.NOT_AVAILABLE;
}
- private void renderClassOverrideDirectives(final IType type, final Composite parent) {
- try {
- final ITypeName typeName = resolver.toRecType(type);
- final ClassOverrideDirectives overrides = webclient.doPostRequest("class-overrides", typeName,
- ClassOverrideDirectives.class);
+ private boolean renderClassOverrideDirectives(final IType type, final Composite parent) {
+ final ITypeName typeName = resolver.toRecType(type);
+ final ClassOverrideDirectives overrides = proxy.findClassOverrideDirectives(typeName);
+ if (overrides != null) {
runSyncInUiThread(new TypeOverrideDirectivesRenderer(type, overrides, parent));
- } catch (final NotFoundException e) {
- // TODO: responds to 404 sever reply AND service(!) not reachable!
+ return true;
}
+ return false;
}
- private void renderClassSelfcallDirectives(final IType type, final Composite parent) {
- try {
- final ITypeName typeName = resolver.toRecType(type);
- final ClassSelfcallDirectives selfcalls = webclient.doPostRequest("class-selfcalls", typeName,
- ClassSelfcallDirectives.class);
- runSyncInUiThread(new TypeSelfcallDirectivesRenderer(type, selfcalls, parent));
- } catch (final NotFoundException e) {
- // TODO: responds to 404 sever reply AND service(!) not reachable!
+ private boolean renderClassOverridesPatterns(final IType type, final Composite parent) {
+ final ITypeName typeName = resolver.toRecType(type);
+ final ClassOverridePatterns patterns = proxy.findClassOverridePatterns(typeName);
+ if (patterns != null) {
+ runSyncInUiThread(new OverridePatternsRenderer(type, patterns, parent));
+ return true;
}
+ return false;
}
- @JavaSelectionSubscriber
- public Status onMethodSelection(final IMethod method, final JavaSelectionEvent event, final Composite parent) {
-
- for (IMethod current = method; current != null; current = JdtUtils.findOverriddenMethod(current).orNull()) {
- try {
- final IMethodName methodName = resolver.toRecMethod(current);
- final MethodSelfcallDirectives selfcalls = webclient.doPostRequest("method-selfcalls", methodName,
- MethodSelfcallDirectives.class);
- runSyncInUiThread(new MethodSelfcallDirectivesRenderer(method, selfcalls, parent));
- break;
- } catch (final NotFoundException e) {
- }
- }
- return Status.OK;
- }
-
static String percentageToRecommendationPhrase(final int percentage) {
if (percentage >= 95) {
return "always";
@@ -209,77 +199,65 @@ public final class SubclassingDirectivesProvider extends ExtdocProvider {
}
- private class TypeSelfcallDirectivesRenderer implements Runnable {
+ private class OverridePatternsRenderer implements Runnable {
private final IType type;
- private final ClassSelfcallDirectives directive;
+ private final ClassOverridePatterns directive;
private final Composite parent;
private Composite container;
- public TypeSelfcallDirectivesRenderer(final IType type, final ClassSelfcallDirectives selfcalls,
- final Composite parent) {
+ double totalNumberOfExamples;
+ private List<MethodPattern> patterns;
+
+ public OverridePatternsRenderer(final IType type, final ClassOverridePatterns directive, final Composite parent) {
this.type = type;
- this.directive = selfcalls;
+ this.directive = directive;
this.parent = parent;
+ setPatterns(directive);
+ computeTotalNumberOfExamples();
+ filterInfrequentPatterns();
+ sortPatterns();
}
- @Override
- public void run() {
- createContainer();
- addHeader();
- addDirectives();
+ private void setPatterns(final ClassOverridePatterns patterns) {
+ this.patterns = asList(patterns.getPatterns());
}
- private void createContainer() {
- container = new Composite(parent, SWT.NO_BACKGROUND);
- container.setLayout(new GridLayout());
- }
-
- private void addHeader() {
- final String message = format("Based on %d direct subclasses of %s we created the following statistics:",
- directive.getNumberOfSubclasses(), type.getElementName());
- new Label(container, SWT.NONE).setText(message);
+ private void filterInfrequentPatterns() {
+ patterns = newLinkedList(filter(patterns, new Predicate<MethodPattern>() {
+ @Override
+ public boolean apply(final MethodPattern input) {
+ int numberOfObservations = input.getNumberOfObservations();
+ return (numberOfObservations / totalNumberOfExamples) > 0.1;
+ }
+ }));
}
- private void addDirectives() {
- final int numberOfSubclasses = directive.getNumberOfSubclasses();
- final TreeBag<IMethodName> b = newTreeBag(directive.getCalls());
-
- final Composite group = createGridComposite(container, 4, 0, 0, 0, 0);
- for (final IMethodName method : b.elementsOrderedByFrequency()) {
-
- final int frequency = b.count(method);
- final int percentage = (int) Math.round(frequency * 100.0d / numberOfSubclasses);
+ private void sortPatterns() {
+ Collections.sort(patterns, new Comparator<MethodPattern>() {
- createLabel(group, " " + percentageToRecommendationPhrase(percentage), true, false, SWT.COLOR_BLACK,
- true);
- createLabel(group, "override", false);
- createMethodLink(group, method);
- createLabel(group, format(" - (%d %% - %d times)", percentage, frequency), true);
- }
+ @Override
+ public int compare(final MethodPattern o1, final MethodPattern o2) {
+ return o2.getNumberOfObservations() - o1.getNumberOfObservations();
+ }
+ });
}
- }
- private class MethodSelfcallDirectivesRenderer implements Runnable {
-
- private final IMethod method;
- private final MethodSelfcallDirectives directive;
- private final Composite parent;
-
- private Composite container;
-
- public MethodSelfcallDirectivesRenderer(final IMethod method, final MethodSelfcallDirectives selfcalls,
- final Composite parent) {
- this.method = method;
- this.directive = selfcalls;
- this.parent = parent;
+ private void computeTotalNumberOfExamples() {
+ for (MethodPattern pattern : patterns) {
+ totalNumberOfExamples += pattern.getNumberOfObservations();
+ }
}
@Override
public void run() {
createContainer();
addHeader();
- addDirectives();
+
+ int i = 1;
+ for (MethodPattern pattern : patterns) {
+ addDirectives(pattern, i++);
+ }
}
private void createContainer() {
@@ -288,27 +266,41 @@ public final class SubclassingDirectivesProvider extends ExtdocProvider {
}
private void addHeader() {
- final String message = format("Based on %d direct implementors of %s we created the following statistics:",
- directive.getNumberOfDefinitions(), method.getElementName());
- new Label(container, SWT.NONE).setText(message);
+ new Label(container, SWT.None);
+ final String message = format(
+ "Based on the above examples, we identified the following patterns\nhow this class is typically extended:",
+ directive.getPatterns().length, type.getElementName());
+ createLabel(container, message, true);
}
- private void addDirectives() {
- final int numberOfSubclasses = directive.getNumberOfDefinitions();
- final TreeBag<IMethodName> b = newTreeBag(directive.getCalls());
+ private void addDirectives(final MethodPattern pattern, final int index) {
+ int patternPercentage = (int) Math.rint(100 * pattern.getNumberOfObservations() / totalNumberOfExamples);
+ String text = format("Pattern #%d (%d%% - %d examples):", index, patternPercentage,
+ pattern.getNumberOfObservations());
+ createLabel(container, text, true, false, SWT.COLOR_DARK_GRAY, true);
final Composite group = createGridComposite(container, 4, 0, 0, 0, 0);
- for (final IMethodName method : b.elementsOrderedByFrequency()) {
+ List<Entry<IMethodName, Double>> s = Lists.newLinkedList(pattern.getMethods().entrySet());
+ Collections.sort(s, new Comparator<Entry<IMethodName, Double>>() {
- final int frequency = b.count(method);
- final int percentage = (int) Math.round(frequency * 100.0d / numberOfSubclasses);
+ @Override
+ public int compare(final Entry<IMethodName, Double> o1, final Entry<IMethodName, Double> o2) {
+ // return o2.getValue().compareTo(o1.getValue());
+ return o1.getKey().getName().compareTo(o2.getKey().getName());
+ }
+ });
+
+ for (Entry<IMethodName, Double> entry : s) {
+ final int percentage = (int) Math.rint(entry.getValue() * 100);
createLabel(group, " " + percentageToRecommendationPhrase(percentage), true, false, SWT.COLOR_BLACK,
true);
- createLabel(group, "call", false);
- createMethodLink(group, method);
- createLabel(group, format(" - (%d %% - %d times)", percentage, frequency), true);
+ createLabel(group, "override", false);
+ createMethodLink(group, entry.getKey());
+ createLabel(group, format(" - (%d %%)", percentage), true);
}
+ new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL);
+
}
}
}
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SubclassingDirectivesProvider.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SelfCallsProvider.java
index a5a610f..06db678 100644
--- a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SubclassingDirectivesProvider.java
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/providers/subclassing/SelfCallsProvider.java
@@ -21,13 +21,12 @@ import javax.inject.Inject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeRoot;
-import org.eclipse.recommenders.extdoc.ClassOverrideDirectives;
import org.eclipse.recommenders.extdoc.ClassSelfcallDirectives;
import org.eclipse.recommenders.extdoc.MethodSelfcallDirectives;
import org.eclipse.recommenders.extdoc.rcp.providers.ExtdocProvider;
import org.eclipse.recommenders.extdoc.rcp.providers.JavaSelectionSubscriber;
+import org.eclipse.recommenders.internal.extdoc.rcp.providers.ExtdocResourceProxy;
import org.eclipse.recommenders.internal.extdoc.rcp.ui.SwtUtils;
-import org.eclipse.recommenders.internal.extdoc.rcp.wiring.ExtdocModule.Extdoc;
import org.eclipse.recommenders.rcp.events.JavaSelectionEvent;
import org.eclipse.recommenders.utils.Names;
import org.eclipse.recommenders.utils.TreeBag;
@@ -35,8 +34,6 @@ import org.eclipse.recommenders.utils.names.IMethodName;
import org.eclipse.recommenders.utils.names.ITypeName;
import org.eclipse.recommenders.utils.rcp.JavaElementResolver;
import org.eclipse.recommenders.utils.rcp.JdtUtils;
-import org.eclipse.recommenders.webclient.WebServiceClient;
-import org.eclipse.recommenders.webclient.exceptions.NotFoundException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@@ -47,16 +44,16 @@ import org.eclipse.swt.widgets.Link;
import com.google.common.eventbus.EventBus;
-public final class SubclassingDirectivesProvider extends ExtdocProvider {
+public final class SelfCallsProvider extends ExtdocProvider {
- private final WebServiceClient webclient;
+ private final ExtdocResourceProxy proxy;
private final JavaElementResolver resolver;
private final EventBus workspaceBus;
@Inject
- public SubclassingDirectivesProvider(@Extdoc final WebServiceClient webclient, final JavaElementResolver resolver,
+ public SelfCallsProvider(final ExtdocResourceProxy proxy, final JavaElementResolver resolver,
final EventBus workspaceBus) {
- this.webclient = webclient;
+ this.proxy = proxy;
this.resolver = resolver;
this.workspaceBus = workspaceBus;
@@ -66,55 +63,35 @@ public final class SubclassingDirectivesProvider extends ExtdocProvider {
public Status onTypeRootSelection(final ITypeRoot root, final JavaSelectionEvent event, final Composite parent) {
final IType type = root.findPrimaryType();
if (type != null) {
- onTypeSelection(type, event, parent);
+ return onTypeSelection(type, event, parent);
}
- return Status.OK;
- }
+ return Status.NOT_AVAILABLE;
+ }
@JavaSelectionSubscriber
public Status onTypeSelection(final IType type, final JavaSelectionEvent event, final Composite parent) {
- renderClassOverrideDirectives(type, parent);
- renderClassSelfcallDirectives(type, parent);
- return Status.OK;
- }
-
- private void renderClassOverrideDirectives(final IType type, final Composite parent) {
- try {
- final ITypeName typeName = resolver.toRecType(type);
- final ClassOverrideDirectives overrides = webclient.doPostRequest("class-overrides", typeName,
- ClassOverrideDirectives.class);
- runSyncInUiThread(new TypeOverrideDirectivesRenderer(type, overrides, parent));
- } catch (final NotFoundException e) {
- // TODO: responds to 404 sever reply AND service(!) not reachable!
- }
- }
-
- private void renderClassSelfcallDirectives(final IType type, final Composite parent) {
- try {
- final ITypeName typeName = resolver.toRecType(type);
- final ClassSelfcallDirectives selfcalls = webclient.doPostRequest("class-selfcalls", typeName,
- ClassSelfcallDirectives.class);
- runSyncInUiThread(new TypeSelfcallDirectivesRenderer(type, selfcalls, parent));
- } catch (final NotFoundException e) {
- // TODO: responds to 404 sever reply AND service(!) not reachable!
+ final ITypeName typeName = resolver.toRecType(type);
+ final ClassSelfcallDirectives selfcalls = proxy.findClassSelfcallDirectives(typeName);
+ if (selfcalls == null) {
+ return Status.NOT_AVAILABLE;
}
+ runSyncInUiThread(new TypeSelfcallDirectivesRenderer(type, selfcalls, parent));
+ return Status.OK;
}
@JavaSelectionSubscriber
public Status onMethodSelection(final IMethod method, final JavaSelectionEvent event, final Composite parent) {
for (IMethod current = method; current != null; current = JdtUtils.findOverriddenMethod(current).orNull()) {
- try {
- final IMethodName methodName = resolver.toRecMethod(current);
- final MethodSelfcallDirectives selfcalls = webclient.doPostRequest("method-selfcalls", methodName,
- MethodSelfcallDirectives.class);
+ final IMethodName methodName = resolver.toRecMethod(current);
+ final MethodSelfcallDirectives selfcalls = proxy.findMethodSelfcallDirectives(methodName);
+ if (selfcalls != null) {
runSyncInUiThread(new MethodSelfcallDirectivesRenderer(method, selfcalls, parent));
- break;
- } catch (final NotFoundException e) {
+ return Status.OK;
}
}
- return Status.OK;
- }
+ return Status.NOT_AVAILABLE;
+ }
static String percentageToRecommendationPhrase(final int percentage) {
if (percentage >= 95) {
@@ -153,62 +130,6 @@ public final class SubclassingDirectivesProvider extends ExtdocProvider {
return link;
}
- // ========================================================================
- // TODO: Review the renderer code is redundant and needs refactoring after all providers have been written to
- // identify more common parts.
-
- private class TypeOverrideDirectivesRenderer implements Runnable {
-
- private final IType type;
- private final ClassOverrideDirectives directive;
- private final Composite parent;
- private Composite container;
-
- public TypeOverrideDirectivesRenderer(final IType type, final ClassOverrideDirectives directive,
- final Composite parent) {
- this.type = type;
- this.directive = directive;
- this.parent = parent;
- }
-
- @Override
- public void run() {
- createContainer();
- addHeader();
- addDirectives();
- }
-
- private void createContainer() {
- container = new Composite(parent, SWT.NO_BACKGROUND);
- container.setLayout(new GridLayout());
- }
-
- private void addHeader() {
- final String message = format("Based on %d direct subclasses of %s, we created the following statistics:",
- directive.getNumberOfSubclasses(), type.getElementName());
- new Label(container, SWT.NONE).setText(message);
- }
-
- private void addDirectives() {
- final int numberOfSubclasses = directive.getNumberOfSubclasses();
- final TreeBag<IMethodName> b = newTreeBag(directive.getOverrides());
-
- final Composite group = createGridComposite(container, 4, 0, 0, 0, 0);
- for (final IMethodName method : b.elementsOrderedByFrequency()) {
-
- final int frequency = b.count(method);
- final int percentage = (int) Math.round(frequency * 100.0d / numberOfSubclasses);
-
- createLabel(group, " " + percentageToRecommendationPhrase(percentage), true, false, SWT.COLOR_BLACK,
- true);
- createLabel(group, "override", false);
- createMethodLink(group, method);
- createLabel(group, format(" - (%d %% - %d times)", percentage, frequency), true);
- }
- }
-
- }
-
private class TypeSelfcallDirectivesRenderer implements Runnable {
private final IType type;
@@ -288,7 +209,8 @@ public final class SubclassingDirectivesProvider extends ExtdocProvider {
}
private void addHeader() {
- final String message = format("Based on %d direct implementors of %s we created the following statistics:",
+ final String message = format(
+ "Based on %d direct implementors of %s we created the following statistics. Implementors...",
directive.getNumberOfDefinitions(), method.getElementName());
new Label(container, SWT.NONE).setText(message);
}
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/ProviderContentPart.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/ProviderContentPart.java
index 59ec033..b599e05 100644
--- a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/ProviderContentPart.java
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/ProviderContentPart.java
@@ -116,6 +116,9 @@ public class ProviderContentPart {
scrollingComposite.setLayoutData(defaultGridDataFactory.create());
scrollingComposite.setExpandVertical(true);
scrollingComposite.setExpandHorizontal(true);
+ scrollingComposite.getVerticalBar().setIncrement(50);
+ scrollingComposite.getHorizontalBar().setIncrement(50);
+
}
private void createScrolledContent() {
diff --git a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/SwtUtils.java b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/SwtUtils.java
index f87e9c7..00d4164 100644
--- a/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/SwtUtils.java
+++ b/plugins/org.eclipse.recommenders.extdoc.rcp/src/org/eclipse/recommenders/internal/extdoc/rcp/ui/SwtUtils.java
@@ -222,4 +222,11 @@ public final class SwtUtils {
return COLORCACHE.get(color);
}
+ public static Composite createComposite(final Composite parent) {
+ Composite container = new Composite(parent, SWT.NO_BACKGROUND);
+ container.setLayout(new GridLayout());
+ container.setLayoutData(GridDataFactory.fillDefaults().create());
+ return container;
+ }
+
}
diff --git a/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/CouchDataAccess.java b/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/CouchDataAccess.java
index 2a843d3..1268afd 100644
--- a/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/CouchDataAccess.java
+++ b/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/CouchDataAccess.java
@@ -22,6 +22,7 @@ import java.util.Map.Entry;
import org.eclipse.recommenders.extdoc.ClassOverrideDirectives;
import org.eclipse.recommenders.extdoc.ClassOverridePatterns;
import org.eclipse.recommenders.extdoc.ClassSelfcallDirectives;
+import org.eclipse.recommenders.extdoc.CodeExamples;
import org.eclipse.recommenders.extdoc.MethodSelfcallDirectives;
import org.eclipse.recommenders.internal.extdoc.server.wiring.GuiceModule.ExtDocScope;
import org.eclipse.recommenders.utils.names.IMethodName;
@@ -127,4 +128,11 @@ public class CouchDataAccess {
});
return fromNullable(res);
}
+
+ public Optional<CodeExamples> getCodeExamples(final ITypeName type) {
+ final CodeExamples res = getProviderContent(CodeExamples.class.getSimpleName(), type,
+ new GenericType<GenericResultObjectView<CodeExamples>>() {
+ });
+ return fromNullable(res);
+ }
} \ No newline at end of file
diff --git a/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/ExtdocResource.java b/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/ExtdocResource.java
index fa0764d..3abcbba 100644
--- a/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/ExtdocResource.java
+++ b/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/ExtdocResource.java
@@ -20,26 +20,30 @@ import javax.ws.rs.Produces;
import org.eclipse.recommenders.extdoc.ClassOverrideDirectives;
import org.eclipse.recommenders.extdoc.ClassOverridePatterns;
import org.eclipse.recommenders.extdoc.ClassSelfcallDirectives;
+import org.eclipse.recommenders.extdoc.CodeExamples;
+import org.eclipse.recommenders.extdoc.CodeSnippet;
+import org.eclipse.recommenders.extdoc.IExtdocResource;
import org.eclipse.recommenders.extdoc.MethodSelfcallDirectives;
import org.eclipse.recommenders.utils.names.IMethodName;
import org.eclipse.recommenders.utils.names.ITypeName;
+import org.eclipse.recommenders.utils.names.VmMethodName;
import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.sun.jersey.api.NotFoundException;
-// TODO: refactor paths to constants and declare them in extdoc commons plugin.
@Path("/")
-public class ExtdocResource {
+public class ExtdocResource implements IExtdocResource {
@Inject
private CouchDataAccess dataAccess;
+ @Override
@Produces({ APPLICATION_JSON })
@Consumes({ APPLICATION_JSON })
- @Path("/class-overrides")
+ @Path(URL_CLASS_OVERRIDES)
@POST
- public ClassOverrideDirectives getClassOverrideDirectives(final ITypeName type) {
+ public ClassOverrideDirectives findClassOverrideDirectives(final ITypeName type) {
final Optional<ClassOverrideDirectives> opt = dataAccess.getClassOverrideDirectives(type);
if (!opt.isPresent()) {
throw new NotFoundException("no overrides directives found for " + type);
@@ -47,11 +51,12 @@ public class ExtdocResource {
return opt.get();
}
+ @Override
@Produces({ APPLICATION_JSON })
@Consumes({ APPLICATION_JSON })
- @Path("/class-selfcalls")
+ @Path(URL_CLASS_SELF_CALLS)
@POST
- public ClassSelfcallDirectives getClassSelfcallDirectives(final ITypeName type) {
+ public ClassSelfcallDirectives findClassSelfcallDirectives(final ITypeName type) {
final Optional<ClassSelfcallDirectives> opt = dataAccess.getClassSelfcallDirectives(type);
if (!opt.isPresent()) {
throw new NotFoundException("no selfcall directives found for " + type);
@@ -59,11 +64,12 @@ public class ExtdocResource {
return opt.get();
}
+ @Override
@Produces({ APPLICATION_JSON })
@Consumes({ APPLICATION_JSON })
- @Path("/method-selfcalls")
+ @Path(URL_METHOD_SELF_CALLS)
@POST
- public MethodSelfcallDirectives getMethodSelfcallDirectives(final IMethodName method) {
+ public MethodSelfcallDirectives findMethodSelfcallDirectives(final IMethodName method) {
final Optional<MethodSelfcallDirectives> opt = dataAccess.getMethodSelfcallDirectives(method);
if (!opt.isPresent()) {
throw new NotFoundException("no selfcall directives found for " + method);
@@ -71,15 +77,31 @@ public class ExtdocResource {
return opt.get();
}
+ @Override
@Produces({ APPLICATION_JSON })
@Consumes({ APPLICATION_JSON })
- @Path("/class-overrides-patterns")
+ @Path(URL_CLASS_OVERRIDE_PATTERNS)
@POST
- public ClassOverridePatterns getClassOverridePatterns(final ITypeName type) {
+ public ClassOverridePatterns findClassOverridePatterns(final ITypeName type) {
final Optional<ClassOverridePatterns> opt = dataAccess.getClassOverridePatterns(type);
if (!opt.isPresent()) {
throw new NotFoundException("no subclassing pattern found for " + type);
}
return opt.get();
}
+
+ @Override
+ @Produces({ APPLICATION_JSON })
+ @Consumes({ APPLICATION_JSON })
+ @Path(URL_TYPE_USAGE_SNIPPETS)
+ @POST
+ public CodeExamples findCodeExamples(final ITypeName type) {
+ final Optional<CodeExamples> opt = dataAccess.getCodeExamples(type);
+ if (!opt.isPresent()) {
+ CodeExamples res = CodeExamples.create(type, VmMethodName.NULL,
+ CodeSnippet.create(VmMethodName.NULL, "// Sorry, this provider is not ready yet."));
+ return res;
+ }
+ return opt.get();
+ }
}
diff --git a/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/wiring/BundleActivator.java b/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/wiring/BundleActivator.java
index c66ffc9..c96aa44 100644
--- a/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/wiring/BundleActivator.java
+++ b/plugins/org.eclipse.recommenders.extdoc.server/src/org/eclipse/recommenders/internal/extdoc/server/wiring/BundleActivator.java
@@ -58,7 +58,8 @@ public class BundleActivator implements org.osgi.framework.BundleActivator {
serviceActivator = child.getInstance(WebserviceActivator.class);
try {
serviceActivator.start();
- log.info("Started Code Recommenders extdoc server.");
+ Object property = serviceRef.getProperty("http.port");
+ log.info("Started Code Recommenders extdoc server on port {}.", property);
} catch (final Exception e) {
throw new RuntimeException(e);
}
diff --git a/plugins/org.eclipse.recommenders.extdoc/src/org/eclipse/recommenders/extdoc/IExtdocResource.java b/plugins/org.eclipse.recommenders.extdoc/src/org/eclipse/recommenders/extdoc/IExtdocResource.java
new file mode 100644
index 0000000..5aa74a1
--- a/dev/null
+++ b/plugins/org.eclipse.recommenders.extdoc/src/org/eclipse/recommenders/extdoc/IExtdocResource.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2010, 2011 Darmstadt University of Technology.
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * Marcel Bruch - initial API and implementation.
+ */
+package org.eclipse.recommenders.extdoc;
+
+import org.eclipse.recommenders.utils.names.IMethodName;
+import org.eclipse.recommenders.utils.names.ITypeName;
+
+public interface IExtdocResource {
+
+ public String URL_CLASS_OVERRIDES = "class-overrides";
+ public String URL_CLASS_OVERRIDE_PATTERNS = "class-overrides-patterns";
+ public String URL_TYPE_USAGE_SNIPPETS = "type-usage-snippets";
+ public String URL_CLASS_SELF_CALLS = "class-selfcalls";
+ public String URL_METHOD_SELF_CALLS = "method-selfcalls";
+
+ public ClassOverrideDirectives findClassOverrideDirectives(final ITypeName type);
+
+ public ClassSelfcallDirectives findClassSelfcallDirectives(final ITypeName type);
+
+ public MethodSelfcallDirectives findMethodSelfcallDirectives(final IMethodName method);
+
+ public ClassOverridePatterns findClassOverridePatterns(final ITypeName type);
+
+ public CodeExamples findCodeExamples(final ITypeName type);
+
+} \ No newline at end of file