initial commit in accordance with CQ 3784
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/.classpath b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.classpath
new file mode 100644
index 0000000..b05df52
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="OTRE"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/.cvsignore b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/.project b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.project
new file mode 100644
index 0000000..6626991
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.objectteams.otdt.ui.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.objectteams.otdt.builder.OTJBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.objectteams.otdt.OTJavaNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..37bc5a4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,52 @@
+#Thu Mar 08 23:10:44 CET 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.ui.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..21a3903
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,34 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: OTDT UITests Plug-in
+Bundle-SymbolicName: org.eclipse.objectteams.otdt.ui.tests;singleton:=true
+Bundle-Version: 1.3.0
+Bundle-ClassPath: otdt-uitests.jar
+Bundle-Activator: org.eclipse.objectteams.otdt.ui.tests.TestPlugin
+Bundle-Vendor: The TOPPrax consortium
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.junit,
+ org.eclipse.objectteams.otdt.tests,
+ org.eclipse.jdt.ui,
+ org.eclipse.jdt.core,
+ org.eclipse.ui.ide,
+ org.eclipse.objectteams.otdt.ui,
+ org.eclipse.core.resources,
+ org.eclipse.jface.text,
+ org.eclipse.jdt.core.tests.compiler,
+ org.eclipse.test.performance,
+ org.eclipse.objectteams.otdt,
+ org.eclipse.jdt.ui.tests,
+ org.eclipse.ui.editors,
+ org.eclipse.objectteams.otequinox;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.objectteams.otdt.jdt.ui
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.objectteams.otdt.ui.tests,
+ org.eclipse.objectteams.otdt.ui.tests.callinmarker,
+ org.eclipse.objectteams.otdt.ui.tests.contentprovider,
+ org.eclipse.objectteams.otdt.ui.tests.core,
+ org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider,
+ org.eclipse.objectteams.otdt.ui.tests.typecreator,
+ org.eclipse.objectteams.otdt.ui.tests.util
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/build.properties b/testplugins/org.eclipse.objectteams.otdt.ui.tests/build.properties
new file mode 100644
index 0000000..c82640e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/build.properties
@@ -0,0 +1,12 @@
+source.otdt-uitests.jar = src/
+output.otdt-uitests.jar = bin/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ otdt-uitests.jar,\
+ workspace/,\
+ test.xml,\
+ testresources/,\
+ JCL/
+src.includes = .classpath,\
+ .project,\
+ build.properties
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.ui.tests/plugin.xml
new file mode 100644
index 0000000..c0f53ae
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/plugin.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+ <extension
+ point="org.eclipse.objectteams.otequinox.aspectBindings">
+ <aspectBinding
+ icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+ <basePlugin
+ icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+ id="org.eclipse.jdt.ui">
+ </basePlugin>
+ <team
+ activation="NONE"
+ class="org.eclipse.objectteams.otdt.ui.tests.core.ProposalAdaptor"
+ icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+ </team>
+ </aspectBinding>
+ </extension>
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/AllTests.java
new file mode 100644
index 0000000..1f76bad
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/AllTests.java
@@ -0,0 +1,48 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author anklam
+ *
+ * @version $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class AllTests
+{
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite(
+ "All UI Tests");
+ //$JUnit-BEGIN$
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.contentprovider.AllTests.suite());
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.typecreator.AllTests.suite());
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider.AllTests.suite());
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.callinmarker.CallinMarkerTests.suite());
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.core.OrganizeImportsTest.suite());
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.core.CodeCompletionTest.suite());
+ suite.addTest(org.eclipse.objectteams.otdt.ui.tests.core.OTQuickFixTest.suite());
+ //$JUnit-END$
+ return suite;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/FileBasedUITest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/FileBasedUITest.java
new file mode 100644
index 0000000..5381b6b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/FileBasedUITest.java
@@ -0,0 +1,42 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: FileBasedUITest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests;
+
+import org.eclipse.objectteams.otdt.tests.FileBasedTest;
+
+
+/**
+ * @author anklam
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FileBasedUITest extends FileBasedTest {
+
+ public FileBasedUITest(String name) {
+ super(name);
+ }
+
+ protected String getPluginID() {
+ return "org.eclipse.objectteams.otdt.ui.tests";
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/TestPlugin.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/TestPlugin.java
new file mode 100644
index 0000000..6fb416f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/TestPlugin.java
@@ -0,0 +1,122 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: TestPlugin.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.objectteams.otdt.internal.ui.preferences.GeneralPreferences;
+import org.eclipse.objectteams.otdt.ui.OTDTUIPlugin;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class TestPlugin extends AbstractUIPlugin {
+ //The shared instance.
+ private static TestPlugin plugin;
+ //Resource bundle.
+ private ResourceBundle resourceBundle;
+
+ /**
+ * The constructor.
+ */
+ public TestPlugin() {
+ super();
+ plugin = this;
+ try {
+ resourceBundle = ResourceBundle.getBundle("org.eclipse.objectteams.otdt.ui.tests.TestPluginResources");
+ } catch (MissingResourceException x) {
+ resourceBundle = null;
+ }
+ }
+
+ /**
+ * This method is called upon plug-in activation
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+
+ disableCallinMarkers();
+ }
+
+ private void disableCallinMarkers()
+ {
+ IPreferenceStore store = OTDTUIPlugin.getDefault().getPreferenceStore();
+ store.setValue(GeneralPreferences.CALLIN_MARKER_ENABLED_BOOL, false);
+ OTDTUIPlugin.getDefault().getCallinMarkerCreator().setEnabled(false);
+ }
+
+ /**
+ * This method is called when the plug-in is stopped
+ */
+ public void stop(BundleContext context) throws Exception {
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static TestPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns the string from the plugin's resource bundle,
+ * or 'key' if not found.
+ */
+ public static String getResourceString(String key) {
+ ResourceBundle bundle = TestPlugin.getDefault().getResourceBundle();
+ try {
+ return (bundle != null) ? bundle.getString(key) : key;
+ } catch (MissingResourceException e) {
+ return key;
+ }
+ }
+
+ /**
+ * Returns the plugin's resource bundle,
+ */
+ public ResourceBundle getResourceBundle() {
+ return resourceBundle;
+ }
+
+ public File getFileInPlugin(IPath path)
+ {
+ try
+ {
+ URL installURL = new URL(getDefault().getBundle().getEntry("/"), path.toString());
+ URL localURL = Platform.asLocalURL(installURL);
+ return new File(localURL.getFile());
+ }
+ catch (IOException ex)
+ {
+ return null;
+ }
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java
new file mode 100644
index 0000000..90c9b72
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java
@@ -0,0 +1,446 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: CallinMarkerTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.callinmarker;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.Test;
+
+import org.eclipse.core.internal.runtime.RuntimeLog;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.ILogListener;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.objectteams.otdt.core.IOTJavaElement;
+import org.eclipse.objectteams.otdt.core.IOTType;
+import org.eclipse.objectteams.otdt.core.IRoleType;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.internal.ui.callinmarkers.AnnotationHelper;
+import org.eclipse.objectteams.otdt.internal.ui.callinmarkers.CallinMarker;
+import org.eclipse.objectteams.otdt.internal.ui.callinmarkers.CallinMarkerCreator2;
+import org.eclipse.objectteams.otdt.internal.ui.callinmarkers.CallinMarkerJob;
+import org.eclipse.objectteams.otdt.internal.ui.callinmarkers.ResourceMarkable;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+
+public class CallinMarkerTests extends FileBasedUITest
+{
+ private static String SRC_FOLDER = "src";
+ private IType _baseType;
+ private IResource _baseResource;
+ private MyCallinMarkerCreator _creator;
+
+ private class MyCallinMarkerCreator extends CallinMarkerCreator2
+ {
+ private IJobChangeListener _extraListener;
+ private boolean _finished = false;
+
+ public boolean isFinished()
+ {
+ return _finished;
+ }
+
+ public void reset() {
+ this._finished = false;
+ this._extraListener = null;
+ }
+ public void initialize(IEditorPart targetEditor)
+ {
+ // simulate initialization as performed by CallinMarkerCreator.activeJavaEditorChanged()
+ if (targetEditor != null) {
+ this.fActiveEditor = targetEditor;
+ this.annotationHelper = new AnnotationHelper(targetEditor, targetEditor.getEditorInput());
+ }
+ }
+
+ public void setJobListener(IJobChangeListener listener)
+ {
+ _extraListener = listener;
+ }
+
+ protected void schedule(final CallinMarkerJob job,
+ IStatusLineManager statusLine)
+ {
+ job.addJobChangeListener(new JobChangeAdapter() {
+ public void done(IJobChangeEvent event)
+ {
+ _finished = true;
+ }
+ });
+
+ if (_extraListener != null)
+ job.addJobChangeListener(_extraListener);
+
+ super.schedule(job, statusLine);
+ }
+
+ public boolean hasJob() {
+ return this._currentJob != null;
+ }
+ }
+
+ public CallinMarkerTests(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return new Suite(CallinMarkerTests.class);
+ }
+ junit.framework.TestSuite suite = new Suite(CallinMarkerTests.class.getName());
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir("CallinMarker");
+
+ super.setUpSuite();
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ _creator = new MyCallinMarkerCreator();
+ _creator.setEnabled(true);
+ System.out.println("Running test: "+this.getName());
+ }
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ if (this._creator != null) {
+ this._creator.setEnabled(false);
+ this._creator = null;
+ }
+ }
+
+ void createNonJavaPrj(String projectName) throws IOException, CoreException {
+ // copy files in project from source workspace to target workspace
+ String sourceWorkspacePath = getSourceWorkspacePath();
+ String targetWorkspacePath = getWorkspaceRoot().getLocation().toFile().getCanonicalPath();
+ copyDirectory(new File(sourceWorkspacePath, projectName), new File(targetWorkspacePath, projectName));
+
+ // create project
+ final IProject project = getWorkspaceRoot().getProject(projectName);
+ IWorkspaceRunnable populate = new IWorkspaceRunnable() {
+ public void run(IProgressMonitor monitor) throws CoreException {
+ project.create(null);
+ project.open(null);
+ }
+ };
+ getWorkspace().run(populate, null);
+ }
+
+ private IType getJavaType(String projectName, String srcFolderName, String pkgName, String typeName) throws JavaModelException
+ {
+ ICompilationUnit typeUnit = getCompilationUnit(
+ projectName,
+ srcFolderName,
+ pkgName,
+ typeName +".java");
+ IType typeJavaElem = typeUnit.getType(typeName);
+
+ if ((typeJavaElem != null) && (typeJavaElem.exists()))
+ {
+ return typeJavaElem;
+ }
+ return null;
+ }
+
+ private IRoleType getRole(String srcFolderName, String pkgName, String teamName, String roleName) throws JavaModelException
+ {
+ IType teamJavaElem = getJavaType(getTestProjectDir(), srcFolderName, pkgName, teamName);
+ IOTJavaElement teamOTElem = OTModelManager.getOTElement(teamJavaElem);
+ assertNotNull(teamOTElem);
+
+ IOTType teamType = (IOTType) teamOTElem;
+ IType roleJavaElem = teamType.getRoleType(roleName);
+// IType roleJavaElem = teamJavaElem.getType(roleName); // IOTType.getType() does not return role files!
+ if ((roleJavaElem != null) && (roleJavaElem.exists()))
+ {
+ IRoleType roleOTElem = (IRoleType) OTModelManager.getOTElement(roleJavaElem);
+ return roleOTElem;
+ }
+ return null;
+ }
+
+ private void synchronousCreateMarkers(IResource resource) throws PartInitException, JavaModelException
+ {
+ _creator.reset();
+ // this already triggers activeJavaEditorChanged, if project is a java project:
+ IEditorPart activeEditor = JavaUI.openInEditor(_baseType.getCompilationUnit());
+ if (!this._creator.isFinished() && !this._creator.hasJob()) {
+ // explicitly trigger in non-java projects
+ _creator.initialize(activeEditor);
+ _creator.updateCallinMarkers(new ResourceMarkable(resource), null);
+ }
+ try {
+ while (!_creator.isFinished())
+ {
+ if (PlatformUI.getWorkbench().getDisplay().readAndDispatch())
+ Thread.sleep(20);
+ }
+ }
+ catch (InterruptedException ex) {
+ ex.printStackTrace();
+ fail("Interrupted while waiting for CallinMarkerCreator");
+ }
+ }
+
+ // The markers appear in undefined order, so we need to look them up in a Set
+ private void assertMarkers(Set<String> expectedMarkers, IMarker[] markers)
+ {
+ assertNotNull(markers);
+ assertNotNull(expectedMarkers);
+
+ assertEquals("Wrong number of markers", expectedMarkers.size(), markers.length);
+
+ try {
+ for (int i = 0; i < markers.length; i++)
+ {
+ assertNotNull(markers[i]);
+ String methodId = (String) markers[i].getAttribute(CallinMarker.ATTR_BASE_ELEMENT);
+ assertNotNull("CallinMarker without methodId attribute", methodId);
+
+ boolean isExpected = expectedMarkers.contains(methodId);
+ assertTrue("Unexpected marker found for method id: " + methodId, isExpected);
+ }
+ }
+ catch (CoreException ex) {
+ ex.printStackTrace();
+ fail("CoreException while trying to get marker attribute");
+ }
+ }
+
+ private IMarker[] getCallinMarkers(IResource resource)
+ {
+ try
+ {
+ return resource.findMarkers(CallinMarker.CALLIN_ID, true, IResource.DEPTH_INFINITE);
+ }
+ catch (CoreException ex)
+ {
+ ex.printStackTrace();
+ fail(ex.getMessage());
+ return null; // not reached anyway
+ }
+ }
+
+ public void testMarkers_1() throws JavaModelException, PartInitException
+ {
+ _baseType = getJavaType(getTestProjectDir(), SRC_FOLDER, "foo", "MyBase");
+ _baseResource = _baseType.getResource();
+
+ assertNotNull(_baseResource);
+
+ synchronousCreateMarkers(_baseResource);
+
+ Set<String> expectedMarkers = new HashSet<String>();
+ expectedMarkers.add("=CallinMarker/src<foo{MyBase.java[MyBase~baseMethod");
+ expectedMarkers.add("=CallinMarker/src<foo{MyBase.java[MyBase~bm2");
+ expectedMarkers.add("=CallinMarker/src<foo{MyBase.java[MyBase~bm3");
+ expectedMarkers.add("=CallinMarker/src<foo{MyBase.java[MyBase~bm4");
+
+ IMarker[] markers = getCallinMarkers(_baseResource);
+ assertMarkers(expectedMarkers, markers);
+ }
+
+ /** compute marker although one baseclass is missing. */
+ public void testMarkers_2() throws JavaModelException, PartInitException
+ {
+ _baseType = getJavaType(getTestProjectDir(), SRC_FOLDER, "bar", "BaseTeam");
+ _baseResource = _baseType.getResource();
+
+ assertNotNull(_baseResource);
+
+ synchronousCreateMarkers(_baseResource);
+
+ Set<String> expectedMarkers = new HashSet<String>();
+ expectedMarkers.add("=CallinMarker/src<bar{BaseTeam.java[BaseTeam~murx");
+
+ IMarker[] markers = getCallinMarkers(_baseResource);
+ assertMarkers(expectedMarkers, markers);
+ }
+ /** Base classes have a member-super cycle (OK since they're static members). */
+ public void testMarkers_3() throws JavaModelException, PartInitException
+ {
+ _baseType = getJavaType(getTestProjectDir(), SRC_FOLDER, "cycle", "Base1");
+ _baseResource = _baseType.getResource();
+
+ assertNotNull(_baseResource);
+
+ synchronousCreateMarkers(_baseResource);
+
+ Set<String> expectedMarkers = new HashSet<String>();
+ expectedMarkers.add("=CallinMarker/src<cycle{Base1.java[Base1[Inner~foo");
+
+ IMarker[] markers = getCallinMarkers(_baseResource);
+ assertMarkers(expectedMarkers, markers);
+ }
+
+ // see http://trac.objectteams.org/ot/ticket/188
+ public void testMarkers_NonJavaPrj1() throws CoreException, IOException, InterruptedException
+ {
+ class MyLogListener implements ILogListener {
+ List<IStatus> status = new ArrayList<IStatus>();
+ public void logging(IStatus status, String plugin) {
+ this.status.add(status);
+ }
+ }
+
+ createNonJavaPrj("NonJavaPrj");
+ MyLogListener myLogListener = new MyLogListener();
+ // can't use startLogListening() because we need to listen to RuntimeLog.
+ RuntimeLog.addLogListener(myLogListener);
+
+ try {
+ IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+ IResource resource = workspaceRoot.findMember(new Path("/NonJavaPrj/folder/File.java"));
+
+ synchronousCreateMarkers(resource);
+
+ // wait for logging to occur after job is done:
+ while(this._creator.isCreatingMarkersFor(resource))
+ Thread.sleep(100);
+
+ if (!myLogListener.status.isEmpty())
+ fail("Unexpected Log: "+myLogListener.status.get(0));
+
+ IMarker[] markers = getCallinMarkers(resource);
+ assertEquals("Should have no markers", markers.length, 0);
+ } finally {
+ RuntimeLog.removeLogListener(myLogListener);
+ deleteProject("NonJavaPrj");
+ }
+ }
+
+ // see http://trac.objectteams.org/ot/ticket/188
+ public void testMarkers_NonJavaPrj2() throws CoreException, IOException, InterruptedException
+ {
+ class MyLogListener implements ILogListener {
+ List<IStatus> status = new ArrayList<IStatus>();
+ public void logging(IStatus status, String plugin) {
+ this.status.add(status);
+ }
+ }
+
+ createNonJavaPrj("NonJavaPrj");
+ MyLogListener myLogListener = new MyLogListener();
+ // can't use startLogListening() because we need to listen to RuntimeLog.
+ RuntimeLog.addLogListener(myLogListener);
+
+ try {
+ IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+ IResource resource = workspaceRoot.findMember(new Path("/NonJavaPrj/folder/File.java"));
+
+ // cu pretends to exist when previously opened in a java editor
+ JavaUI.openInEditor(JavaCore.create(resource));
+
+ synchronousCreateMarkers(resource);
+
+ // wait for logging to occur after job is done:
+ while(this._creator.isCreatingMarkersFor(resource))
+ Thread.sleep(100);
+
+ if (!myLogListener.status.isEmpty())
+ fail("Unexpected Log: "+myLogListener.status.get(0));
+
+ IMarker[] markers = getCallinMarkers(resource);
+ assertEquals("Should have no markers", markers.length, 0);
+ } finally {
+ RuntimeLog.removeLogListener(myLogListener);
+ deleteProject("NonJavaPrj");
+ }
+ }
+
+ // see http://trac.objectteams.org/ot/ticket/188
+ public void testMarkers_NonJavaPrj3() throws CoreException, IOException, InterruptedException
+ {
+ class MyLogListener implements ILogListener {
+ List<IStatus> status = new ArrayList<IStatus>();
+ public void logging(IStatus status, String plugin) {
+ if (status.getSeverity() == IStatus.ERROR)
+ this.status.add(status);
+ }
+ }
+
+ createNonJavaPrj("NonJavaPrj");
+ MyLogListener myLogListener = new MyLogListener();
+ // can't use startLogListening() because we need to listen to RuntimeLog.
+ RuntimeLog.addLogListener(myLogListener);
+
+ try {
+ IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+ // use classfile:
+ IResource resource = workspaceRoot.findMember(new Path("/NonJavaPrj/bin/folder/File.class"));
+
+ // cu pretends to exist when previously opened in a java editor
+ JavaUI.openInEditor(JavaCore.create(resource));
+
+ synchronousCreateMarkers(resource);
+
+ // wait for logging to occur after job is done:
+ while(this._creator.isCreatingMarkersFor(resource))
+ Thread.sleep(100);
+
+ assertEquals("Unexpeted number of log entries", 1, myLogListener.status.size());
+ assertEquals("Unexpected Log",
+ "Status ERROR: org.eclipse.ui code=0 " +
+ "Unable to create editor ID org.eclipse.jdt.ui.ClassFileEditor: " +
+ "The class file is not on the classpath " +
+ "org.eclipse.core.runtime.CoreException: The class file is not on the classpath",
+ myLogListener.status.get(0).toString());
+
+ IMarker[] markers = getCallinMarkers(resource);
+ assertEquals("Should have no markers", markers.length, 0);
+ } finally {
+ RuntimeLog.removeLogListener(myLogListener);
+ deleteProject("NonJavaPrj");
+ }
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/AllTests.java
new file mode 100644
index 0000000..a9dd8bd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/AllTests.java
@@ -0,0 +1,43 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.contentprovider;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author anklam
+ *
+ * @version $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class AllTests {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(
+ "All Contentprovider Tests");
+ //$JUnit-BEGIN$
+ suite.addTest(ExternalDefinedRoleContentAndParentTests.suite());
+ suite.addTest(TeamContentTests.suite());
+ suite.addTest(InternalDefinedRoleContentAndParentTests.suite());
+ //$JUnit-END$
+ return suite;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/ExternalDefinedRoleContentAndParentTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/ExternalDefinedRoleContentAndParentTests.java
new file mode 100644
index 0000000..696e5b4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/ExternalDefinedRoleContentAndParentTests.java
@@ -0,0 +1,513 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: ExternalDefinedRoleContentAndParentTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.contentprovider;
+
+import junit.framework.Test;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.objectteams.otdt.core.ICallinMapping;
+import org.eclipse.objectteams.otdt.core.ICalloutMapping;
+import org.eclipse.objectteams.otdt.core.IOTJavaElement;
+import org.eclipse.objectteams.otdt.core.IOTType;
+import org.eclipse.objectteams.otdt.core.IRoleType;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.internal.ui.packageview.PackageExplorerAdaptor;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+import org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider;
+
+/**
+ * @author kaschja
+ * @version $Id: ExternalDefinedRoleContentAndParentTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * This test class contains test methods that test the methods
+ * PackageExplorerContentProvider.getChildren and PackageExplorerContentProvider.getParent
+ * with several external defined role classes as argument
+ */
+@SuppressWarnings("restriction")
+public class ExternalDefinedRoleContentAndParentTests extends FileBasedUITest
+{
+ final int METHOD_IDX = 0;
+ final int MAPPING_IDX = 1;
+
+ private PackageExplorerContentProvider _testObj;
+
+
+ public ExternalDefinedRoleContentAndParentTests(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return new Suite(ExternalDefinedRoleContentAndParentTests.class);
+ }
+ junit.framework.TestSuite suite = new Suite(ExternalDefinedRoleContentAndParentTests.class
+ .getName());
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir("ExternalDefinedRole");
+
+ super.setUpSuite();
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ _testObj = new PackageExplorerContentProvider(true);
+ setShowTeamPackages(false);
+ }
+
+ private void setShowTeamPackages(boolean show) {
+ PackageExplorerAdaptor adaptor = PackageExplorerAdaptor.getInstance();
+ adaptor.setShowTeamPackages(show, _testObj);
+ }
+
+
+ private IType getJavaType(String projectName, String srcFolderName, String pkgName, String typeName) throws JavaModelException
+ {
+ ICompilationUnit typeUnit = getCompilationUnit(
+ projectName,
+ srcFolderName,
+ pkgName,
+ typeName +".java");
+ IType typeJavaElem = typeUnit.getType(typeName);
+
+ if ((typeJavaElem != null) && (typeJavaElem.exists()))
+ {
+ return typeJavaElem;
+ }
+ return null;
+ }
+
+ private IRoleType getRole(String srcFolderName, String pkgName, String teamName, String roleName) throws JavaModelException
+ {
+ IType teamJavaElem = getJavaType(getTestProjectDir(), srcFolderName, pkgName, teamName);
+ IOTJavaElement teamOTElem = OTModelManager.getOTElement(teamJavaElem);
+ assertNotNull(teamOTElem);
+
+ IOTType teamType = (IOTType) teamOTElem;
+ IType roleJavaElem = teamType.getRoleType(roleName);
+// IType roleJavaElem = teamJavaElem.getType(roleName); // IOTType.getType() does not return role files!
+ if ((roleJavaElem != null) && (roleJavaElem.exists()))
+ {
+ IRoleType roleOTElem = (IRoleType) OTModelManager.getOTElement(roleJavaElem);
+ return roleOTElem;
+ }
+ return null;
+ }
+
+
+ public void testRoleContent_EmptyRole() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_1", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 0);
+ }
+
+ public void testRoleContent_Field() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_2", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IField);
+
+ IField field = (IField) children[0];
+ assertEquals("roleAttr", field.getElementName());
+ assertEquals("QString;", field.getTypeSignature());
+ }
+
+ public void testRoleContent_ParameterlessMethod() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+ }
+
+ public void testRoleContent_MethodWithParameter() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("(QString;)V", method.getSignature());
+ }
+
+ public void testRoleContent_MethodWithReturnValue() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3c", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()QString;", method.getSignature());
+ }
+
+ public void testRoleContent_MethodWithThrowClause() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3d", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+
+ String[] exceptionTypes = method.getExceptionTypes();
+ assertNotNull(exceptionTypes);
+ assertTrue(exceptionTypes.length == 1);
+ assertEquals("QException;", exceptionTypes[0]);
+ }
+
+ public void testRoleContent_Innerclass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IType);
+
+ IType innerType = (IType) children[0];
+ assertEquals("AnInnerClass", innerType.getElementName());
+ }
+
+ public void testRoleContent_InnerTeamClass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IType);
+
+ IType innerType = (IType) children[0];
+ assertEquals("AnInnerTeamClass", innerType.getElementName());
+ }
+
+
+ public void testRoleContent_BoundRoleWithAbstractMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICalloutMapping);
+ assertEquals("roleMethod -> baseMethod", ((ICalloutMapping)children[MAPPING_IDX]).getElementName());
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+ }
+
+ public void testRoleContent_BoundRoleWithConcreteMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICalloutMapping);
+ //TODO (kaschja) change mapping name by the time there is a distinction of '->' and '=>' in the OT-Model
+ assertEquals("roleMethod -> baseMethod", ((ICalloutMapping)children[MAPPING_IDX]).getElementName());
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+ }
+
+ public void testRoleContent_BoundRoleWithMethodAndBeforeCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5c", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICallinMapping);
+ ICallinMapping mapping = (ICallinMapping)children[MAPPING_IDX];
+ assertEquals("roleMethod <- baseMethod", mapping.getElementName());
+ assertTrue(mapping.getCallinKind() == ICallinMapping.KIND_BEFORE);
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+ }
+
+ public void testRoleContent_BoundRoleWithMethodAndReplaceCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5d", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICallinMapping);
+ ICallinMapping mapping = (ICallinMapping)children[MAPPING_IDX];
+ assertEquals("roleMethod <- baseMethod", mapping.getElementName());
+ assertTrue(mapping.getCallinKind() == ICallinMapping.KIND_REPLACE);
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+ }
+
+ public void testRoleContent_BoundRoleWithMethodAndAfterCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5e", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICallinMapping);
+ ICallinMapping mapping = (ICallinMapping)children[MAPPING_IDX];
+ assertEquals("roleMethod <- baseMethod", mapping.getElementName());
+ assertTrue(mapping.getCallinKind() == ICallinMapping.KIND_AFTER);
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals("roleMethod", method.getElementName());
+ assertEquals("()V", method.getSignature());
+ }
+
+//************************************************************
+// from here: testRoleParent
+//************************************************************
+ public void testRoleParent_EmptyRole() throws JavaModelException
+ {
+ IRoleType roleOTElem = getRole("unbound", "teampkg", "Team_1", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_1", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_EmptyRole_PhysicalView() throws JavaModelException
+ {
+ IRoleType roleOTElem = getRole("unbound", "teampkg", "Team_1", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ setShowTeamPackages(true);
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue("direct parent should be ICompilationUnit", parent instanceof ICompilationUnit);
+ parent = _testObj.getParent(parent);
+ assertTrue("second level parent should be IPackageFragment", parent instanceof IPackageFragment);
+ assertEquals("Team package should have team name", "teampkg.Team_1", ((IPackageFragment)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithField() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_2", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_2", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithParameterlessMethod() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_3a", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithMethodWithParameter() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_3b", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithMethodWithReturnValue() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3c", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_3c", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithMethodWithThrowClause() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3d", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_3d", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithInnerclass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_4a", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_RoleWithInnerTeamClass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_4b", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_BoundRoleWithAbstractMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5a", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_5a", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_BoundRoleWithConcreteMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5b", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_5b", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_BoundRoleWithMethodAndBeforeCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5c", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_5c", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_BoundRoleWithMethodAndReplaceCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5d", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_5d", ((IType)parent).getElementName());
+ }
+
+ public void testRoleParent_BoundRoleWithMethodAndAfterCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5e", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals("Team_5e", ((IType)parent).getElementName());
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/InternalDefinedRoleContentAndParentTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/InternalDefinedRoleContentAndParentTests.java
new file mode 100644
index 0000000..95bb98d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/InternalDefinedRoleContentAndParentTests.java
@@ -0,0 +1,498 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: InternalDefinedRoleContentAndParentTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.contentprovider;
+
+import junit.framework.Test;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.objectteams.otdt.core.ICallinMapping;
+import org.eclipse.objectteams.otdt.core.ICalloutMapping;
+import org.eclipse.objectteams.otdt.core.IOTJavaElement;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+import org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider;
+
+/**
+ * @author kaschja
+ * @version $Id: InternalDefinedRoleContentAndParentTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * This test class contains test methods that test the methods
+ * PackageExplorerContentProvider.getChildren and PackageExplorerContentProvider.getParent
+ * with several internal defined role classes as argument
+ */
+@SuppressWarnings("restriction")
+public class InternalDefinedRoleContentAndParentTests extends FileBasedUITest
+{
+ final int METHOD_IDX = 0;
+ final int MAPPING_IDX = 1;
+
+ private PackageExplorerContentProvider _testObj;
+
+ public InternalDefinedRoleContentAndParentTests(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return new Suite(InternalDefinedRoleContentAndParentTests.class);
+ }
+ junit.framework.TestSuite suite = new Suite(InternalDefinedRoleContentAndParentTests.class
+ .getName());
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir("InternalDefinedRole");
+
+ super.setUpSuite();
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ _testObj = new PackageExplorerContentProvider(true);
+ }
+
+
+ private IType getJavaType(String projectName, String srcFolderName, String pkgName, String typeName) throws JavaModelException
+ {
+ ICompilationUnit typeUnit = getCompilationUnit(
+ projectName,
+ srcFolderName,
+ pkgName,
+ typeName +".java");
+ IType typeJavaElem = typeUnit.getType(typeName);
+
+ if ((typeJavaElem != null) && (typeJavaElem.exists()))
+ {
+ return typeJavaElem;
+ }
+ return null;
+ }
+
+ private IOTJavaElement getRole(String srcFolderName, String pkgName, String teamName, String roleName) throws JavaModelException
+ {
+ IType teamJavaElem = getJavaType(getTestProjectDir(), srcFolderName, pkgName, teamName);
+
+ if (teamJavaElem != null)
+ {
+ IType roleJavaElem = teamJavaElem.getType(roleName);
+ if ((roleJavaElem != null) && (roleJavaElem.exists()))
+ {
+ IOTJavaElement roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ if (roleOTElem != null)
+ {
+ return roleOTElem;
+ }
+ }
+ }
+ return null;
+ }
+
+
+ public void testRoleContent_EmptyRole() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_1", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 0);
+ }
+
+ public void testRoleContent_Field() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_2", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IField);
+
+ IField field = (IField) children[0];
+ assertEquals(field.getElementName(), "roleAttr");
+ assertEquals(field.getTypeSignature(), "QString;");
+ }
+
+ public void testRoleContent_ParameterlessMethod() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+ public void testRoleContent_MethodWithParameter() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "(QString;)V");
+ }
+
+ public void testRoleContent_MethodWithReturnValue() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3c", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()QString;");
+ }
+
+ public void testRoleContent_MethodWithThrowClause() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3d", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+
+ String[] exceptionTypes = method.getExceptionTypes();
+ assertNotNull(exceptionTypes);
+ assertTrue(exceptionTypes.length == 1);
+ assertEquals(exceptionTypes[0], "QException;");
+ }
+
+ public void testRoleContent_Innerclass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IType);
+
+ IType innerType = (IType) children[0];
+ assertEquals(innerType.getElementName(), "AnInnerClass");
+ }
+
+ public void testRoleContent_InnerTeamClass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IType);
+
+ IType innerType = (IType) children[0];
+ assertEquals(innerType.getElementName(), "AnInnerTeamClass");
+ }
+
+
+ public void testRoleContent_BoundRoleWithAbstractMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+
+ //*********
+// Logger.println(children.length);
+// for (int idx = 0; idx < children.length; idx++)
+// {
+// Logger.println(children[idx].toString());
+// }
+ assertTrue(children.length == 2);
+ //*********
+
+ assertTrue(children[MAPPING_IDX] instanceof ICalloutMapping);
+ assertEquals("roleMethod -> baseMethod", ((ICalloutMapping)children[MAPPING_IDX]).getElementName());
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+ public void testRoleContent_BoundRoleWithConcreteMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICalloutMapping);
+ //TODO (kaschja) change mapping name by the time there is a distinction of '->' and '=>' in the OT-Model
+ assertEquals("roleMethod -> baseMethod", ((ICalloutMapping)children[MAPPING_IDX]).getElementName());
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+ public void testRoleContent_BoundRoleWithMethodAndBeforeCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5c", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICallinMapping);
+ ICallinMapping mapping = (ICallinMapping)children[MAPPING_IDX];
+ assertEquals("roleMethod <- baseMethod", mapping.getElementName());
+ assertTrue(mapping.getCallinKind() == ICallinMapping.KIND_BEFORE);
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+ public void testRoleContent_BoundRoleWithMethodAndReplaceCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5d", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICallinMapping);
+ ICallinMapping mapping = (ICallinMapping)children[MAPPING_IDX];
+ assertEquals("roleMethod <- baseMethod", mapping.getElementName());
+ assertTrue(mapping.getCallinKind() == ICallinMapping.KIND_REPLACE);
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+ public void testRoleContent_BoundRoleWithMethodAndAfterCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5e", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object[] children = _testObj.getChildren(roleOTElem);
+ assertNotNull(children);
+ assertTrue(children.length == 2);
+
+ assertTrue(children[MAPPING_IDX] instanceof ICallinMapping);
+ ICallinMapping mapping = (ICallinMapping)children[MAPPING_IDX];
+ assertEquals("roleMethod <- baseMethod", mapping.getElementName());
+ assertTrue(mapping.getCallinKind() == ICallinMapping.KIND_AFTER);
+
+ assertTrue(children[METHOD_IDX] instanceof IMethod);
+ IMethod method = (IMethod) children[METHOD_IDX];
+ assertEquals(method.getElementName(), "roleMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+//************************************************************
+// from here: testRoleParent
+//************************************************************
+ public void testRoleParent_EmptyRole() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_1", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_1");
+ }
+
+ public void testRoleParent_RoleWithField() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_2", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_2");
+ }
+
+ public void testRoleParent_RoleWithParameterlessMethod() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_3a");
+ }
+
+ public void testRoleParent_RoleWithMethodWithParameter() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_3b");
+ }
+
+ public void testRoleParent_RoleWithMethodWithReturnValue() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3c", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_3c");
+ }
+
+ public void testRoleParent_RoleWithMethodWithThrowClause() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_3d", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_3d");
+ }
+
+ public void testRoleParent_RoleWithInnerclass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4a", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_4a");
+ }
+
+ public void testRoleParent_RoleWithInnerTeamClass() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("unbound", "teampkg", "Team_4b", "SampleRole");
+ assertNotNull(roleOTElem);
+
+ Object parent = _testObj.getParent(roleOTElem);
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_4b");
+ }
+
+ public void testRoleParent_BoundRoleWithAbstractMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5a", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_5a");
+ }
+
+ public void testRoleParent_BoundRoleWithConcreteMethodAndCalloutMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5b", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_5b");
+ }
+
+ public void testRoleParent_BoundRoleWithMethodAndBeforeCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5c", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_5c");
+ }
+
+ public void testRoleParent_BoundRoleWithMethodAndReplaceCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5d", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_5d");
+ }
+
+ public void testRoleParent_BoundRoleWithMethodAndAfterCallinMapping() throws JavaModelException
+ {
+ IOTJavaElement roleOTElem = getRole("boundtoordinary", "teampkg", "Team_5e", "SampleRole");
+ assertNotNull(roleOTElem);
+ Object parent = _testObj.getParent(roleOTElem);
+
+ assertNotNull(parent);
+ assertTrue(parent instanceof IType);
+ assertEquals(((IType)parent).getElementName(), "Team_5e");
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/Logger.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/Logger.java
new file mode 100644
index 0000000..49103a3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/Logger.java
@@ -0,0 +1,50 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: Logger.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.contentprovider;
+
+/**
+ * @author kaschja
+ * @version $Id: Logger.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class Logger
+{
+ public static void println(Object obj)
+ {
+ if (obj instanceof String)
+ {
+ System.out.println(obj);
+ }
+ else
+ {
+ System.out.println(obj.toString());
+ }
+ }
+
+// public static void println(String text)
+// {
+// System.out.println(text);
+// }
+
+ public static void println(int number)
+ {
+ System.out.println(number);
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/TeamContentTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/TeamContentTests.java
new file mode 100644
index 0000000..0420975
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/contentprovider/TeamContentTests.java
@@ -0,0 +1,291 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: TeamContentTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.contentprovider;
+
+import junit.framework.Test;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.objectteams.otdt.core.IOTJavaElement;
+import org.eclipse.objectteams.otdt.core.IRoleType;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+import org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamContentTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * This test class contains test methods that test the method
+ * PackageExplorerContentProvider.getChildren
+ * with several team classes as argument
+ */
+@SuppressWarnings("restriction")
+public class TeamContentTests extends FileBasedUITest
+{
+
+ private PackageExplorerContentProvider _testObj;
+
+
+ public TeamContentTests(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return new Suite(TeamContentTests.class);
+ }
+ junit.framework.TestSuite suite = new Suite(TeamContentTests.class
+ .getName());
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir("TeamProject");
+
+ super.setUpSuite();
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ _testObj = new PackageExplorerContentProvider(true);
+ }
+
+
+ private IType getJavaType(String projectName, String srcFolderName, String pkgName, String typeName) throws JavaModelException
+ {
+ ICompilationUnit typeUnit = getCompilationUnit(
+ projectName,
+ srcFolderName,
+ pkgName,
+ typeName +".java");
+ IType typeJavaElem = typeUnit.getType(typeName);
+
+ if ((typeJavaElem != null) && (typeJavaElem.exists()))
+ {
+ return typeJavaElem;
+ }
+ return null;
+ }
+
+ private IOTJavaElement getTeam(String srcFolderName, String pkgName, String teamName) throws JavaModelException
+ {
+ IType teamJavaElem = getJavaType(getTestProjectDir(), srcFolderName, pkgName, teamName);
+
+ if (teamJavaElem != null)
+ {
+ IOTJavaElement teamOTElem = OTModelManager.getOTElement(teamJavaElem);
+ if (teamOTElem != null)
+ {
+ return teamOTElem;
+ }
+ }
+ return null;
+ }
+
+
+ public void testTeamContent_EmptyTeam() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "EmptyTeam");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 0);
+ }
+
+ public void testTeamContent_Field() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithField");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IField);
+
+ IField field = (IField) children[0];
+ assertEquals(field.getElementName(), "teamlevelField");
+ assertEquals(field.getTypeSignature(), "QString;");
+ }
+
+ public void testTeamContent_ParameterlessMethod() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithParameterlessMethod");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "teamlevelMethod");
+ assertEquals(method.getSignature(), "()V");
+ }
+
+ public void testTeamContent_MethodWithParameter() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithMethodWithParameter");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "teamlevelMethod");
+ assertEquals(method.getSignature(), "(QString;)V");
+ }
+
+ public void testTeamContent_MethodWithReturnValue() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithMethodWithReturnValue");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "teamlevelMethod");
+ assertEquals(method.getSignature(), "()QString;");
+ }
+
+ public void testTeamContent_MethodWithThrowClause() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithMethodWithThrowClause");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IMethod);
+
+ IMethod method = (IMethod) children[0];
+ assertEquals(method.getElementName(), "teamlevelMethod");
+ assertEquals(method.getSignature(), "()V");
+
+ String[] exceptionTypes = method.getExceptionTypes();
+ assertNotNull(exceptionTypes);
+ assertTrue(exceptionTypes.length == 1);
+ assertEquals(exceptionTypes[0], "QException;");
+ }
+
+ public void testTeamContent_InnerRoleClass() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithRoleClass");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+
+// Logger.println(children.length);
+// Logger.println(((IRoleType)children[0]).getElementName());
+
+ assertTrue(children.length == 1);
+
+ assertTrue(children[0] instanceof IRoleType);
+
+ IRoleType innerType = (IRoleType) children[0];
+ assertEquals(innerType.getElementName(), "RoleClass");
+ }
+
+ public void testTeamContent_InnerTeamClass() throws JavaModelException
+ {
+ IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithInnerTeamClass");
+ assertNotNull(teamOTElem);
+
+ Object[] children = _testObj.getChildren(teamOTElem);
+
+ assertNotNull(children);
+
+// Logger.println(children.length);
+// Logger.println(((IRoleType)children[0]).getElementName());
+
+ assertTrue(children.length == 1);
+ assertTrue(children[0] instanceof IRoleType);
+
+ IRoleType innerType = (IRoleType) children[0];
+ assertEquals(innerType.getElementName(), "InnerTeamClass");
+ //TODO (kaschja) comment in next line by the time team cascading is supported
+ //assertTrue(innerType.isTeam());
+ }
+
+//TODO (kaschja) test containment of external defined role classes in a team depending on user defined visibility specification for external role packages
+// public void testTeamContent_ExternalDefinedRoleClass() throws JavaModelException
+// {
+// PackageExplorerPart part = new PackageExplorerPart();
+// part.createPartControl(null);
+//
+// PackageExplorerContentProvider contentProviderToTest = part.getContentProvider();
+// HideExternalRolePackagesAction hideRolesAction = contentProviderToTest.getHideRolesAction();
+// IOTJavaElement teamOTElem = getTeam("src", "teampkg", "TeamWithExternalDefinedRoleClass");
+// Object[] children;
+//
+// assertNotNull(contentProviderToTest);
+// assertNotNull(hideRolesAction);
+// assertNotNull(teamOTElem);
+//
+//
+// if (!hideRolesAction.isRolePackageVisible())
+// {
+// //switch the state to "role package is visible"
+// _hideExternalRolesAction.run();
+// }
+// assertTrue(hideRolesAction.isRolePackageVisible());
+//
+// children = contentProviderToTest.getChildren(teamOTElem);
+//
+// assertNotNull(children);
+// assertTrue(children.length == 1);
+// assertTrue(children[0] instanceof IRoleType);
+//
+// IRoleType innerType = (IRoleType) children[0];
+// assertEquals(innerType.getElementName(), "RoleClass");
+//
+//
+// //switch the state to "role package is NOT visible"
+// hideRolesAction.run();
+// assertTrue(!hideRolesAction.isRolePackageVisible());
+//
+// children = contentProviderToTest.getChildren(teamOTElem);
+// assertNotNull(children);
+// assertTrue(children.length == 0);
+// }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/AddImportQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/AddImportQuickFixTest.java
new file mode 100644
index 0000000..671140a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/AddImportQuickFixTest.java
@@ -0,0 +1,388 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: AddImportQuickFixTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.ArrayList;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IImportDeclaration;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.CUCorrectionProposal;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.tests.core.ProjectTestSetup;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.internal.Workbench;
+
+public class AddImportQuickFixTest extends OTQuickFixTest {
+
+
+ private static final Class THIS= AddImportQuickFixTest.class;
+
+
+ public AddImportQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return setUpTest(new TestSuite(THIS));
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ public static Test suite() {
+ return allTests();
+ }
+
+ public void testChangeFQNToBaseImport1() throws Exception {
+ // base:
+ IPackageFragment pack1base= fSourceFolder.createPackageFragment("test.base1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf = new StringBuffer();
+ buf.append("package test.base1;\n");
+ buf.append("public class Base1 {\n");
+ buf.append("}\n");
+ pack1base.createCompilationUnit("Base1.java", buf.toString(), false, null);
+
+ // team:
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test.import1", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R2 playedBy test.base1.Base1 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= null;
+ for (Object prop : proposals)
+ if (((CUCorrectionProposal)prop).getRelevance() > 0)
+ proposal = (CUCorrectionProposal)prop;
+ assertNotNull("Need proposal with positive relevance", proposal);
+ assertEquals("Wrong quickfix label", "\"Change qualified reference to using 'import base test...Base1;'\"", proposal.getDisplayString());
+
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("\n");
+ buf.append("import base test.base1.Base1;\n");
+ buf.append("\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R2 playedBy Base1 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ // ROFI variant:
+ public void testChangeFQNToBaseImport2() throws Exception {
+ // base:
+ IPackageFragment pack1base= fSourceFolder.createPackageFragment("test.base1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf = new StringBuffer();
+ buf.append("package test.base1;\n");
+ buf.append("public class Base1 {\n");
+ buf.append("}\n");
+ pack1base.createCompilationUnit("Base1.java", buf.toString(), false, null);
+
+ // team:
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test.import1", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("public team class T {\n");
+ buf.append("}\n");
+ ICompilationUnit teamUnit = pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+ // ROFI:
+ IPackageFragment teamPack = fSourceFolder.createPackageFragment("test.import1.T", true, null);
+ buf = new StringBuffer();
+ buf.append("team package test.import1.T;\n");
+ buf.append("protected class R2 playedBy test.base1.Base1 {\n");
+ buf.append("}\n");
+ ICompilationUnit cu= teamPack.createCompilationUnit("R2.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= null;
+ for (Object prop : proposals)
+ if (((CUCorrectionProposal)prop).getRelevance() > 0)
+ proposal = (CUCorrectionProposal)prop;
+ assertNotNull("Need proposal with positive relevance", proposal);
+ assertEquals("Wrong quickfix label", "\"Change qualified reference to using 'import base test...Base1;'\"", proposal.getDisplayString());
+
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("team package test.import1.T;\n");
+ buf.append("protected class R2 playedBy Base1 {\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+
+ // fetch and analyze team content which is not covered by the preview:
+ IEditorPart part= JavaUI.openInEditor(teamUnit);
+ assertNotNull("Failed to open team unit in editor", part);
+ IDocument document = JavaUI.getDocumentProvider().getDocument(part.getEditorInput());
+ proposal.apply(document);
+ // not needed: teamUnit.makeConsistent(null);
+ IImportDeclaration[] imports = teamUnit.getImports();
+ assertNotNull("Expected an import", imports);
+ assertEquals("Expected one import", 1, imports.length);
+ assertEquals("Unexpected import", "test.base1.Base1", imports[0].getElementName());
+ assertEquals("Expected base import", ExtraCompilerModifiers.AccBase, imports[0].getFlags());
+
+ // drop editors whose content has been modified by apply(),
+ // so that tearDown can delete files without asking the user:
+ Workbench.getInstance().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false);
+ }
+
+ /* Adding a base import to a team on behalf of a role file. */
+ public void testAddBaseImportForRofi1() throws Exception {
+ // base:
+ IPackageFragment pack1base= fSourceFolder.createPackageFragment("test.base", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf = new StringBuffer();
+ buf.append("package test.base;\n");
+ buf.append("protected class Base1 {\n");
+ buf.append("}\n");
+ pack1base.createCompilationUnit("Base1.java", buf.toString(), false, null);
+
+ // team:
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test.import1", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("public team class T {\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ // role:
+ IPackageFragment pack1T= fSourceFolder.createPackageFragment("test.import1.T", false, null);
+ buf = new StringBuffer();
+ buf.append("team package test.import1.T;\n");
+ buf.append("protected class R2 playedBy Base1 {\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1T.createCompilationUnit("R2.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 6);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("\n");
+ buf.append("import base test.base.Base1;\n");
+ buf.append("\n");
+ buf.append("public team class T {\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ // this time files already have content
+ public void testAddBaseImportForRofi2() throws Exception {
+ StringBuffer buf;
+ // base:
+ IPackageFragment pack1base= fSourceFolder.createPackageFragment("test.base", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.base;\n");
+ buf.append("protected class Base1 {\n");
+ buf.append("}\n");
+ pack1base.createCompilationUnit("Base1.java", buf.toString(), false, null);
+
+ // team:
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test.import1", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("\n");
+ buf.append("import java.util.List;\n");
+ buf.append("\n");
+ buf.append("import base java.awt.Window;\n");
+ buf.append("\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy Window;\n");
+ buf.append(" \n");
+ buf.append(" List l;\n");
+ buf.append(" \n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ // role:
+ IPackageFragment pack1T= fSourceFolder.createPackageFragment("test.import1.T", false, null);
+ buf = new StringBuffer();
+ buf.append("team package test.import1.T;\n");
+ buf.append("protected class R2 playedBy Base1 {\n");
+ buf.append(" void foo() {}\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1T.createCompilationUnit("R2.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 6);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("\n");
+ buf.append("import java.util.List;\n");
+ buf.append("\n");
+ buf.append("import base java.awt.Window;\n");
+ buf.append("\n");
+ buf.append("import base test.base.Base1;\n");
+ buf.append("\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy Window;\n");
+ buf.append(" \n");
+ buf.append(" List l;\n");
+ buf.append(" \n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ // for role types rather than proposing an import change type to anchored:
+ public void testChangeTypeToAnchored1() throws CoreException {
+ StringBuffer buf;
+ // team:
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test.import1", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("\n");
+ buf.append("public team class T {\n");
+ buf.append(" public class R {}\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ // client
+ IPackageFragment pack2= fSourceFolder.createPackageFragment("test.import2", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import2;\n");
+ buf.append("\n");
+ buf.append("import test.import1.T;\n");
+ buf.append("\n");
+ buf.append("public class C {\n");
+ buf.append(" final T t = new T();\n");
+ buf.append(" void test() {\n");
+ buf.append(" R r = t.new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = pack2.createCompilationUnit("C.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 7);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test.import2;\n");
+ buf.append("\n");
+ buf.append("import test.import1.T;\n");
+ buf.append("\n");
+ buf.append("public class C {\n");
+ buf.append(" final T t = new T();\n");
+ buf.append(" void test() {\n");
+ buf.append(" R<@t> r = t.new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ // for role types rather than proposing an import change type to anchored (role file):
+ public void testChangeTypeToAnchored2() throws CoreException {
+ StringBuffer buf;
+ // team:
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test.import1", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import1;\n");
+ buf.append("\n");
+ buf.append("/** @role R */\n");
+ buf.append("public team class T {\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ IPackageFragment teampack= fSourceFolder.createPackageFragment("test.import1.T", false, null);
+ buf = new StringBuffer();
+ buf.append("team package test.import1.T;\n");
+ buf.append("\n");
+ buf.append("public class R {}\n");
+ teampack.createCompilationUnit("R.java", buf.toString(), false, null);
+
+ // client
+ IPackageFragment pack2= fSourceFolder.createPackageFragment("test.import2", false, null);
+ buf = new StringBuffer();
+ buf.append("package test.import2;\n");
+ buf.append("\n");
+ buf.append("import test.import1.T;\n");
+ buf.append("\n");
+ buf.append("public class C {\n");
+ buf.append(" final T t = new T();\n");
+ buf.append(" void test() {\n");
+ buf.append(" R r = t.new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = pack2.createCompilationUnit("C.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 7);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test.import2;\n");
+ buf.append("\n");
+ buf.append("import test.import1.T;\n");
+ buf.append("\n");
+ buf.append("public class C {\n");
+ buf.append(" final T t = new T();\n");
+ buf.append(" void test() {\n");
+ buf.append(" R<@t> r = t.new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/AddUnimplementedMethodsTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/AddUnimplementedMethodsTest.java
new file mode 100644
index 0000000..4e79302
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/AddUnimplementedMethodsTest.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IImportDeclaration;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.IMethodBinding;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.internal.corext.codemanipulation.AddUnimplementedMethodsOperation;
+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2;
+import org.eclipse.jdt.internal.corext.dom.ASTNodes;
+import org.eclipse.jdt.core.dom.NodeFinder;
+import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
+import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType;
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+import org.eclipse.jdt.testplugin.TestOptions;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jdt.ui.tests.core.ProjectTestSetup;
+
+/** Structure is OT_COPY_PASTE from {@link org.eclipse.jdt.ui.tests.core.source.AddUnimplementedMethodsTest}
+ * @since 1.2.1
+ */
+public class AddUnimplementedMethodsTest extends TestCase {
+
+ private static final Class THIS= AddUnimplementedMethodsTest.class;
+
+ private IJavaProject fJavaProject;
+ private IPackageFragment fPackage;
+
+ public AddUnimplementedMethodsTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return new ProjectTestSetup(new TestSuite(THIS));
+ }
+
+ public static Test suite() {
+ if (true) {
+ return allTests();
+ } else {
+ TestSuite suite= new TestSuite();
+ suite.addTest(new AddUnimplementedMethodsTest("test1"));
+ return new ProjectTestSetup(suite);
+ }
+ }
+
+ protected void setUp() throws Exception {
+ fJavaProject= JavaProjectHelper.createJavaProject("DummyProject", "bin");
+ assertNotNull(JavaProjectHelper.addRTJar(fJavaProject));
+
+ Hashtable options= TestOptions.getDefaultOptions();
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");
+ options.put(DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT, "999");
+ fJavaProject.setOptions(options);
+
+ StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "${body_statement}\n// TODO", null);
+
+ IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(fJavaProject, "src");
+ fPackage= root.createPackageFragment("org.eclispe.objectteams.util", true, null);
+
+ IEclipsePreferences node= new ProjectScope(fJavaProject.getProject()).getNode(JavaUI.ID_PLUGIN);
+ node.putBoolean(PreferenceConstants.CODEGEN_USE_OVERRIDE_ANNOTATION, false);
+ node.putBoolean(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
+ node.flush();
+ }
+
+
+ protected void tearDown () throws Exception {
+ JavaProjectHelper.delete(fJavaProject);
+ fJavaProject= null;
+ fPackage= null;
+ }
+
+ public void testTrac143() throws Exception {
+ StringBuffer buf= new StringBuffer();
+ buf.append("package org.eclipse.objectteams.util;\n");
+ buf.append("import java.util.Properties;\n");
+ buf.append("public team class F {\n");
+ buf.append(" public class R {\n");
+ buf.append(" public abstract void b(Properties p);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ fPackage.createCompilationUnit("F.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package org.eclipse.objectteams.util;\n");
+ ICompilationUnit cu= fPackage.createCompilationUnit("F2.java", buf.toString(), false, null);
+
+ IType testClass= cu.createType("public team class F2 extends F {\n\n}\n", null, true, null);
+ testClass = testClass.createType("public class R playedBy Object {\n\n}\n", null, true, null);
+
+ testHelper(testClass);
+
+ IMethod[] methods= testClass.getMethods();
+ checkMethods(new String[] { "b", "equals", "clone", "toString", "finalize", "hashCode" }, methods);
+
+ IImportDeclaration[] imports= cu.getImports();
+ checkImports(new String[]{"java.util.Properties"}, imports);
+ }
+
+
+ private void testHelper(IType testClass) throws JavaModelException, CoreException {
+ testHelper(testClass, -1, true);
+ }
+
+ private void testHelper(IType testClass, int insertionPos, boolean implementAllOverridable) throws JavaModelException, CoreException {
+ RefactoringASTParser parser= new RefactoringASTParser(AST.JLS3);
+ CompilationUnit unit= parser.parse(testClass.getCompilationUnit(), true);
+ AbstractTypeDeclaration declaration= (AbstractTypeDeclaration) ASTNodes.getParent(NodeFinder.perform(unit, testClass.getNameRange()), AbstractTypeDeclaration.class);
+ assertNotNull("Could not find type declaration node", declaration);
+ ITypeBinding binding= declaration.resolveBinding();
+ assertNotNull("Binding for type declaration could not be resolved", binding);
+
+ IMethodBinding[] overridableMethods= implementAllOverridable ? StubUtility2.getOverridableMethods(unit.getAST(), binding, false) : null;
+
+ AddUnimplementedMethodsOperation op= new AddUnimplementedMethodsOperation(unit, binding, overridableMethods, insertionPos, true, true, true);
+ op.run(new NullProgressMonitor());
+ JavaModelUtil.reconcile(testClass.getCompilationUnit());
+ }
+
+ private void checkMethods(String[] expected, IMethod[] methods) {
+ int nMethods= methods.length;
+ int nExpected= expected.length;
+ assertTrue("" + nExpected + " methods expected, is " + nMethods, nMethods == nExpected);
+ for (int i= 0; i < nExpected; i++) {
+ String methName= expected[i];
+ assertTrue("method " + methName + " expected", nameContained(methName, methods));
+ }
+ }
+
+ private void checkImports(String[] expected, IImportDeclaration[] imports) {
+ int nImports= imports.length;
+ int nExpected= expected.length;
+ if (nExpected != nImports) {
+ StringBuffer buf= new StringBuffer();
+ buf.append(nExpected).append(" imports expected, is ").append(nImports).append("\n");
+ buf.append("expected:\n");
+ for (int i= 0; i < expected.length; i++) {
+ buf.append(expected[i]).append("\n");
+ }
+ buf.append("actual:\n");
+ for (int i= 0; i < imports.length; i++) {
+ buf.append(imports[i]).append("\n");
+ }
+ assertTrue(buf.toString(), false);
+ }
+ for (int i= 0; i < nExpected; i++) {
+ String impName= expected[i];
+ assertTrue("import " + impName + " expected", nameContained(impName, imports));
+ }
+ }
+
+ private boolean nameContained(String methName, IJavaElement[] methods) {
+ for (int i= 0; i < methods.length; i++) {
+ if (methods[i].getElementName().equals(methName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CallinQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CallinQuickFixTest.java
new file mode 100644
index 0000000..003cd38
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CallinQuickFixTest.java
@@ -0,0 +1,177 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: CallinQuickFixTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin;
+
+/**
+ * Test OT-specific quickfixes (here: callin related issues).
+ * @author stephan
+ * @since 1.2.8
+ */
+public class CallinQuickFixTest extends OTQuickFixTest {
+
+ private static final Class THIS= CallinQuickFixTest.class;
+
+ public CallinQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return setUpTest(new TestSuite(THIS));
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ public static Test suite() {
+ return allTests();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void addOptions(Hashtable options) {
+ super.addOptions(options);
+ // need to configure 5.4(c) to warning to enable quickfix for testSuppressWarning1():
+ options.put(OTDTPlugin.OT_COMPILER_EXCEPTION_IN_GUARD, JavaCore.WARNING);
+ }
+
+ /* Suppressing a warning re exception thrown from guard predicate. */
+ public void testSuppressWarning1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public void foo() {};\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(\"OK\");\n");
+ buf.append(" }\n");
+ buf.append(" boolean bad() throws Exception {\n");
+ buf.append(" throw new Exception(\"too bad\");\n");
+ buf.append(" }\n");
+ buf.append(" foo <- after foo when (bad());\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[1];
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(\"OK\");\n");
+ buf.append(" }\n");
+ buf.append(" boolean bad() throws Exception {\n");
+ buf.append(" throw new Exception(\"too bad\");\n");
+ buf.append(" }\n");
+ buf.append(" @SuppressWarnings(\"exceptioninguard\")\n");
+ buf.append(" foo <- after foo when (bad());\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+ }
+
+ /* Adjust a callin modifier to the bound role method (after -> replace). */
+ public void testChangeCallinModifier1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public void foo() {};\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"basecall\")\n");
+ buf.append(" callin void foo() {\n");
+ buf.append(" System.out.print(\"OK\");\n");
+ buf.append(" }\n");
+ buf.append(" foo <- after foo;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"basecall\") void foo() {\n");// removed callin modifier
+ buf.append(" System.out.print(\"OK\");\n");
+ buf.append(" }\n");
+ buf.append(" foo <- after foo;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"basecall\")\n");
+ buf.append(" callin void foo() {\n");
+ buf.append(" System.out.print(\"OK\");\n");
+ buf.append(" }\n");
+ buf.append(" foo <- replace foo;\n"); // changed after to replace
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+ }
+
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CalloutQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CalloutQuickFixTest.java
new file mode 100644
index 0000000..574ae7d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CalloutQuickFixTest.java
@@ -0,0 +1,417 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: CalloutQuickFixTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin;
+
+/**
+ * Test OT-specific quickfixes (here: callout related issues).
+ * @author stephan
+ * @since 1.2.8
+ */
+public class CalloutQuickFixTest extends OTQuickFixTest {
+
+
+ private static final Class THIS= CalloutQuickFixTest.class;
+
+ public CalloutQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return setUpTest(new TestSuite(THIS));
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ public static Test suite() {
+ return allTests();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void addOptions(Hashtable options) {
+ super.addOptions(options);
+ options.put(OTDTPlugin.OT_COMPILER_INFERRED_CALLOUT, JavaCore.WARNING);
+ }
+
+ /* Converting a field read to explicitly use a callout-to-field. */
+ public void testConvertFieldAccessToCalloutCall1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public int val;\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(val);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" int getVal() -> get int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(getVal());\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"inferredcallout\")\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(val);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+ }
+
+
+ /* Converting a field read (this-qualified) to explicitly use a callout-to-field. */
+ public void testConvertFieldAccessToCalloutCall2() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public int val;\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(this.val);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" int getVal() -> get int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(this.getVal());\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"inferredcallout\")\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(this.val);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+
+ }
+
+ /* Converting a field assignment to explicitly use a callout-to-field. */
+ public void testConvertFieldAccessToCalloutCall3() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public int val;\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void foo(){\n");
+ buf.append(" val = 3;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void setVal(int val) -> set int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" setVal(3);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"inferredcallout\")\n");
+ buf.append(" void foo(){\n");
+ buf.append(" val = 3;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+
+ }
+
+ /* Converting a field assignment (this-qualified) to explicitly use a callout-to-field. */
+ public void testConvertFieldAccessToCalloutCall4() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public int val;\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void foo(){\n");
+ buf.append(" this.val = 3;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void setVal(int val) -> set int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" this.setVal(3);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+
+ expectedProposals[0] = buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" @SuppressWarnings(\"inferredcallout\")\n");
+ buf.append(" void foo(){\n");
+ buf.append(" this.val = 3;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+ }
+
+
+ /* Convert field access to call to existing callout-to-field. */
+ public void testConvertFieldAccessToCalloutCall5() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public int val;\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" int getVal() -> get int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(val);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" int getVal() -> get int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(getVal());\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" int getVal() -> get int val;\n");
+ buf.append("\n");
+ buf.append(" @SuppressWarnings(\"inferredcallout\")\n");
+ buf.append(" void foo(){\n");
+ buf.append(" System.out.print(val);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+ }
+
+ /* Convert field assignment to call to existing callout-to-field. */
+ public void testConvertFieldAccessToCalloutCall6() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public int val;\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void setVal(int val) -> set int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" this.val = 3;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cuteam = pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cuteam);
+ ArrayList proposals= collectCorrections(cuteam, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ String[] expectedProposals = new String[2];
+
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void setVal(int val) -> set int val;\n");
+ buf.append("\n");
+ buf.append(" void foo(){\n");
+ buf.append(" this.setVal(3);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[0] = buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R playedBy B1 {\n");
+ buf.append(" void setVal(int val) -> set int val;\n");
+ buf.append("\n");
+ buf.append(" @SuppressWarnings(\"inferredcallout\")\n");
+ buf.append(" void foo(){\n");
+ buf.append(" this.val = 3;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expectedProposals[1] = buf.toString();
+
+ assertExpectedExistInProposals(proposals, expectedProposals);
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CodeCompletionTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CodeCompletionTest.java
new file mode 100644
index 0000000..a63cd85
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CodeCompletionTest.java
@@ -0,0 +1,1350 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: CodeCompletionTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import static org.eclipse.jdt.internal.codeassist.RelevanceConstants.*;
+
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
+import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProcessor;
+import org.eclipse.jdt.internal.ui.text.java.ParameterGuessingProposal;
+import org.eclipse.jdt.testplugin.TestOptions;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jdt.ui.tests.core.CoreTests;
+import org.eclipse.jdt.ui.text.IJavaPartitions;
+import org.eclipse.jdt.ui.text.java.CompletionProposalCollector;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextOperationTarget;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.ICompletionProposalExtension;
+import org.eclipse.jface.text.contentassist.ICompletionProposalExtension2;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.objectteams.otdt.internal.ui.assist.CompletionAdaptor;
+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+/**
+ * Tests for code completion including the UI part
+ * i.e., testing the actual rewriting and also selections.
+ *
+ * @author stephan
+ * @since 1.1.8
+ */
+public class CodeCompletionTest extends CoreTests {
+
+ private static final int INTERESTING_CALLIN_CALLOUT_PROPOSAL = CompletionAdaptor.R_METHOD_MAPPING+R_DEFAULT+R_INTERESTING+R_CASE+R_UNQUALIFIED+R_NON_RESTRICTED;
+ private static final int VERY_INTERESTING_CALLIN_CALLOUT_PROPOSAL = INTERESTING_CALLIN_CALLOUT_PROPOSAL+R_EXPECTED_TYPE;
+
+ private static final Class<CodeCompletionTest> THIS= CodeCompletionTest.class;
+
+
+ public static Test allTests() {
+ return new ProjectTestSetup(new TestSuite(THIS));
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ @SuppressWarnings("unused") // dead code inside
+ public static Test suite() {
+ if (true) {
+ return allTests();
+ } else {
+ TestSuite suite= new TestSuite();
+ suite.addTest(new CodeCompletionTest("testCreateCalloutOverride1"));
+ return new ProjectTestSetup(suite);
+ }
+ }
+
+ private IJavaProject fJProject1;
+
+ public CodeCompletionTest(String name) {
+ super(name);
+ }
+
+ private void codeComplete(ICompilationUnit cu, int offset, CompletionProposalCollector collector) throws JavaModelException {
+ waitBeforeCoreCompletion(); // ??
+ cu.codeComplete(offset, collector);
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void setUp() throws Exception {
+ fJProject1= JavaProjectHelper.createOTJavaProject("OTTestProject1", "bin");
+ JavaProjectHelper.addRTJar(fJProject1);
+ JavaProjectHelper.addRequiredProject(fJProject1, ProjectTestSetup.getProject());
+
+ Hashtable<String, String> options= TestOptions.getDefaultOptions();
+ options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "1");
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");
+ options.put(JavaCore.CODEASSIST_FIELD_PREFIXES, "f");
+ JavaCore.setOptions(options);
+
+ IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
+ store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, true);
+ store.setValue(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS, false);
+ store.setValue(PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS, false);
+
+ StubUtility.setCodeTemplate(CodeTemplateContextType.OVERRIDECOMMENT_ID, "/* (non-Javadoc)\n * ${see_to_overridden}\n */", null); // TODO(SH): this one is currently used for method bindings, see TODO in CompletionAdaptor.Stubs#createCallout
+ StubUtility.setCodeTemplate(CodeTemplateContextType.DELEGATECOMMENT_ID, "/* (non-Javadoc)\n * ${see_to_target}\n */", null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "//TODO\n${body_statement}", null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORCOMMENT_ID, "/**\n * Constructor.\n */", null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.METHODCOMMENT_ID, "/**\n * Method.\n */", null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "//TODO\n${body_statement}", null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.GETTERCOMMENT_ID, "/**\n * @return the ${bare_field_name}\n */", fJProject1);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.SETTERCOMMENT_ID, "/**\n * @param ${param} the ${bare_field_name} to set\n */", fJProject1);
+
+ fBeforeImports= "";
+ fAfterImports= "";
+ fMembers= "";
+ fLocals= "";
+ fTrigger= '\0';
+ fWaitBeforeCompleting= false;
+ }
+
+ protected void tearDown() throws Exception {
+ IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
+ store.setToDefault(PreferenceConstants.CODEGEN_ADD_COMMENTS);
+ store.setToDefault(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS);
+ store.setToDefault(PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS);
+ closeAllEditors();
+ JavaProjectHelper.delete(fJProject1);
+ }
+
+ public static void closeEditor(IEditorPart editor) {
+ IWorkbenchPartSite site;
+ IWorkbenchPage page;
+ if (editor != null && (site= editor.getSite()) != null && (page= site.getPage()) != null)
+ page.closeEditor(editor, false);
+ }
+
+ public static void closeAllEditors() {
+ IWorkbenchWindow[] windows= PlatformUI.getWorkbench().getWorkbenchWindows();
+ for (int i= 0; i < windows.length; i++) {
+ IWorkbenchPage[] pages= windows[i].getPages();
+ for (int j= 0; j < pages.length; j++) {
+ IEditorReference[] editorReferences= pages[j].getEditorReferences();
+ for (int k= 0; k < editorReferences.length; k++)
+ closeEditor(editorReferences[k].getEditor(false));
+ }
+ }
+ }
+
+ /* Legacy style of testing: */
+ public void _testCreateCalloutCompletion() throws Exception {
+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+
+ // create base class:
+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B {\n");
+ buf.append(" public void foo() {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String contents= buf.toString();
+
+ pack1.createCompilationUnit("B.java", contents, false, null);
+
+ // create team class:
+ IPackageFragment pack2= sourceFolder.createPackageFragment("test2", false, null);
+ buf= new StringBuffer();
+ buf.append("package test2;\n");
+ buf.append("import base test1.B;\n");
+ buf.append("public team class T {\n");
+ buf.append(" public class R playedBy B {\n");
+ buf.append(" fo\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ contents= buf.toString();
+
+ ICompilationUnit cuT= pack2.createCompilationUnit("T.java", contents, false, null);
+
+ fEditor= (JavaEditor)JavaUI.openInEditor(cuT);
+
+ String str= " fo";
+
+ int offset= contents.indexOf(str) + str.length();
+
+ CompletionProposalCollector collector= createCollector(cuT, offset);
+ collector.setReplacementLength(0);
+ codeComplete(cuT, offset, collector);
+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
+
+ assertTrue("proposals", proposals.length >= 1);
+ IJavaCompletionProposal selected= null;
+ for (IJavaCompletionProposal javaCompletionProposal : proposals) {
+ if (javaCompletionProposal.getDisplayString().startsWith("foo() void - Binding")) {
+ selected= javaCompletionProposal;
+ break;
+ }
+ }
+ assertNotNull("expected proposal", selected);
+
+ IDocument doc= fEditor.getDocumentProvider().getDocument(fEditor.getEditorInput());
+ selected.apply(doc);
+
+ buf= new StringBuffer();
+ buf.append("package test2;\n" +
+ "import base test1.B;\n" +
+ "public team class T {\n" +
+ " public class R playedBy B {\n" +
+ "\n" +
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void foo() -> void foo();\n" +
+ " \n" +
+ " }\n" +
+ "}\n" +
+ "");
+ assertEqualString(doc.get(), buf.toString());
+ }
+ // helpers for above:
+ private CompletionProposalCollector createCollector(ICompilationUnit cu, int offset) throws PartInitException, JavaModelException {
+ CompletionProposalCollector collector= new CompletionProposalCollector(cu);
+ collector.setInvocationContext(createContext(offset, cu));
+ return collector;
+ }
+
+ private JavaContentAssistInvocationContext createContext(int offset, ICompilationUnit cu) throws PartInitException, JavaModelException {
+ JavaEditor editor= (JavaEditor) JavaUI.openInEditor(cu);
+ ISourceViewer viewer= editor.getViewer();
+ return new JavaContentAssistInvocationContext(viewer, offset, editor);
+ }
+
+ // ==== START REAL TESTS: ====
+
+ /** At the empty space within a role one could create a constructor. */
+ public void testCreateRoleConstructor() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " |",
+ "R(",
+ " /**\n" +
+ " * Constructor.\n" +
+ " */\n" +
+ " public R(B b) {\n" +
+ " //TODO\n" +
+ "\n" +
+ " }",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ public void testCreateCallout1() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " fo|",
+ "foo(",
+ "\n" + // TODO(SH): initial newline is not intended?
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() -> void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+ // abstract method exists:
+ public void testCreateCallout1a() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " abstract void foo();\n"+
+ " fo|",
+ "foo(",
+ " abstract void foo();\n"+
+ "\n" + // TODO(SH): initial newline is not intended?
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() -> void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ // ROFI
+ public void testCreateCallout2() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertROFIBodyProposal(
+ " fo|",
+ "foo(",
+ "\n" + // TODO(SH): initial newline is not intended?
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() -> void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ public void testCreateCalloutOverride1() throws Exception {
+ IPackageFragment pkg = CompletionTestSetup.getTestPackage("p1");
+ pkg.createCompilationUnit("SuperTeam.java",
+ "package test1.p1;\n" +
+ "public team class SuperTeam {\n" +
+ " public class MyRole {\n" +
+ " String blub(int i) { return \"\"; }\n" +
+ " }\n" +
+ "}\n",
+ true, null);
+
+ pkg.createCompilationUnit("ABase.java",
+ "package test1.p1;\n" +
+ "public class ABase {\n" +
+ " String blub(int k) { return null; }\n" +
+ "}\n",
+ true, null);
+
+ StringBuffer subTeamContent = new StringBuffer();
+ subTeamContent.append("package test1;\n");
+ subTeamContent.append("import test1.p1.SuperTeam;\n");
+ subTeamContent.append("import base test1.p1.ABase;\n");
+ subTeamContent.append("public team class Completion_testCreateCalloutOverride1 extends SuperTeam {\n");
+ subTeamContent.append(" protected class MyRole playedBy ABase {\n");
+ subTeamContent.append(" \n");
+ subTeamContent.append(" }\n");
+ subTeamContent.append("}");
+
+ StringBuffer expectedContent = new StringBuffer();
+ expectedContent.append("package test1;\n");
+ expectedContent.append("import test1.p1.SuperTeam;\n");
+ expectedContent.append("import base test1.p1.ABase;\n");
+ expectedContent.append("public team class Completion_testCreateCalloutOverride1 extends SuperTeam {\n");
+ expectedContent.append(" protected class MyRole playedBy ABase {\n");
+ expectedContent.append("\n");
+ expectedContent.append(" /* (non-Javadoc)\n");
+ expectedContent.append(" * @see test1.p1.ABase#blub(int)\n");
+ expectedContent.append(" */\n");
+ expectedContent.append(" String blub(int k) => String blub(int k);\n");
+ expectedContent.append(" \n");
+ expectedContent.append(" }\n");
+ expectedContent.append("}");
+
+ String completeAfter = " ";
+ int pos = subTeamContent.indexOf(completeAfter)+completeAfter.length();
+ int posAfter = expectedContent.indexOf("blub(int k)");
+
+ // discriminate from overriding "blub(int i)":
+ assertProposal("blub(int k", null, null, subTeamContent, new Region(pos, 0), expectedContent, new Region(posAfter, 4), 0); // len of "blub"
+ }
+
+
+ // callout override to field
+ public void testCreateCalloutOverride2() throws Exception {
+ IPackageFragment pkg = CompletionTestSetup.getTestPackage("p1");
+ pkg.createCompilationUnit("SuperTeam.java",
+ "package test1.p1;\n" +
+ "public team class SuperTeam {\n" +
+ " public class MyRole {\n" +
+ " void setBlub(int i) { }\n" +
+ " }\n" +
+ "}\n",
+ true, null);
+
+ pkg.createCompilationUnit("ABase.java",
+ "package test1.p1;\n" +
+ "public class ABase {\n" +
+ " int blub;\n" +
+ "}\n",
+ true, null);
+
+ StringBuffer subTeamContent = new StringBuffer();
+ subTeamContent.append("package test1;\n");
+ subTeamContent.append("import test1.p1.SuperTeam;\n");
+ subTeamContent.append("import base test1.p1.ABase;\n");
+ subTeamContent.append("public team class Completion_testCreateCalloutOverride1 extends SuperTeam {\n");
+ subTeamContent.append(" protected class MyRole playedBy ABase {\n");
+ subTeamContent.append(" set\n");
+ subTeamContent.append(" }\n");
+ subTeamContent.append("}");
+
+ StringBuffer expectedContent = new StringBuffer();
+ expectedContent.append("package test1;\n");
+ expectedContent.append("import test1.p1.SuperTeam;\n");
+ expectedContent.append("import base test1.p1.ABase;\n");
+ expectedContent.append("public team class Completion_testCreateCalloutOverride1 extends SuperTeam {\n");
+ expectedContent.append(" protected class MyRole playedBy ABase {\n");
+ expectedContent.append("\n");
+ expectedContent.append(" /**\n");
+ expectedContent.append(" * \n");
+ expectedContent.append(" */\n");
+ expectedContent.append(" void setBlub(int blub) => set int blub;\n");
+ expectedContent.append(" \n");
+ expectedContent.append(" }\n");
+ expectedContent.append("}");
+
+ String completeAfter = " set";
+ int pos = subTeamContent.indexOf(completeAfter)+completeAfter.length();
+ int posAfter = expectedContent.indexOf(" ");
+
+ // discriminate from overriding "setBlub(int i)":
+ assertProposal("setBlub(int)", null, null, subTeamContent, new Region(pos, 0), expectedContent, new Region(posAfter+2, 0), 0);
+ }
+
+
+ public void testCompleteCallout1() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " void foo() ->|",
+ "foo(",
+ " void foo() ->| void foo();|" + // SH: why selected?
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ public void testCompleteCallout2() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " foo -> |",
+ "foo(",
+ " foo -> foo; |" + // SH: trailing space?
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* short, no callinModifier, callin-method, follows: short callin. */
+ public void testCompleteCallout3() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " callin void bar() {}\n"+
+ " void foo() ->|\n" + // no leading space, inserted below (good)
+ " bar <- replace clone;\n",
+ "foo(",
+ " callin void bar() {}\n" +
+ " void foo() ->| void foo();|\n" +
+ " bar <- replace clone;\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* short, prefix typed, follows: method */
+ public void testCompleteCallout4() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " foo -> f|",
+ "foo(",
+ " foo -> |foo;|",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ public void testCompleteCallout5() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " |",
+ "foo(",
+ "\n"+
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() -> void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ public void testCompleteCallout6() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertROFIBodyProposal(
+ " |",
+ "foo(",
+ "\n"+
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() -> void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ // callout to static from ROFI
+ public void testCompleteCallout7() throws Exception {
+ createBaseClass(" public static void foo() {}\n");
+ assertROFIBodyProposal(
+ " |",
+ "foo(",
+ "\n"+
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() -> void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /** A base method spec with return type and beginning of the selector is searched. */
+ public void testCompletionMethodSpecLong1() throws Exception {
+ createBaseClass("");
+ assertTypeBodyProposal(
+ " String toString() => String toStr|",
+ "toString(",
+ " String toString() => |String toString();|",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+
+ /** A base method spec without return type and beginning of the selector is searched. */
+ public void testCompletionMethodSpecLong2() throws Exception {
+ createBaseClass("");
+ assertTypeBodyProposal(
+ " String toString() => toStr|",
+ "toString(",
+ " String toString() => |String toString();|",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /** A base method spec with return type and no selector is searched. */
+ public void testCompletionMethodSpecLong3() throws Exception {
+ createBaseClass("");
+ assertTypeBodyProposal(
+ " String toString() => String |",
+ "toString(",
+ " String toString() => String toString(); |", // trailing space?
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* short, no callinModifier, follows: method */
+ public void testCompleteCallin1() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " bar <-|\n" + // no space, inserted below (good)
+ " void zork() {}\n",
+ "foo(",
+ " void bar() {}\n" +
+ " bar <- |before| foo;\n" +
+ " void zork() {}\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+ // concrete method exists, create full callin binding (cf. testCreateCallout1a()).
+ public void testCreateCallin1a() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " void foo() {}\n"+
+ " fo|",
+ "foo(",
+ " void foo() {}\n"+
+ "\n" + // TODO(SH): initial newline is not intended?
+ " /* (non-Javadoc)\n" +
+ " * @see test1.B#foo()\n" +
+ " */\n" +
+ " void |foo|() <- before void foo();\n" +
+ " ",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* short, with callinModifier, follows: callout binding. */
+ public void testCompleteCallin2() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " bar <- after |\n" +
+ " void foo() -> void foo();\n",
+ "foo(",
+ " void bar() {}\n" +
+ " bar <- after foo; |\n" + // SH: trailing space?
+ " void foo() -> void foo();\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+
+ /* short, with callinModifier, follows: callout binding, non-keyword return type. */
+ public void testCompleteCallin2a() throws Exception {
+ createBaseClass(" public String foo() { return null; }\n");
+ assertTypeBodyProposal(
+ " String bar() { return \"\"; }\n"+
+ " bar <- after |\n" +
+ " String foo() -> String foo();\n",
+ "foo(",
+ " String bar() { return \"\"; }\n" +
+ " bar <- after foo; |\n" + // SH: trailing space?
+ " String foo() -> String foo();\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* long, with callinModifier, follows: field. */
+ public void testCompleteCallin3() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " void bar() <-after |\n" + // cannot insert space before modifier (OK)
+ " int i;\n",
+ "foo(",
+ " void bar() {}\n" +
+ " void bar() <-after void foo(); |\n" +
+ " int i;\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* long, no callinModifier, callin-method, follows: field. */
+ public void testCompleteCallin4() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " callin void bar() {}\n"+
+ " void bar() <- |\n" +
+ " int i;\n",
+ "foo(",
+ " callin void bar() {}\n" +
+ " void bar() <- |replace| void foo(); \n" +
+ " int i;\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* long, no callinModifier, callin-method, follows: method. */
+ public void testCompleteCallin5() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " callin void bar() {}\n"+
+ " void bar() <-|\n" + // no leading space, inserted below (good)
+ " int zork() {}\n",
+ "foo(",
+ " callin void bar() {}\n" +
+ " void bar() <- |replace| void foo();\n" +
+ " int zork() {}\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* long, no callinModifier, callin-method, follows: short callin. */
+ public void testCompleteCallin6() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " callin void bar() {}\n"+
+ " void bar() <-|\n" + // no leading space, inserted below (good)
+ " bar <- replace clone;\n",
+ "foo(",
+ " callin void bar() {}\n" +
+ " void bar() <- |replace| void foo();\n" +
+ " bar <- replace clone;\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* long, no callinModifier, callin-method, follows: short callin. */
+ public void testCompleteCallin7() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " callin void bar() {}\n"+
+ " bar <- replace |\n" +
+ " bar <- replace clone;\n",
+ "foo",
+ " callin void bar() {}\n" +
+ " bar <- replace foo; |\n" + // SH: trailing space?
+ " bar <- replace clone;\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* short, prefix typed, with callinModifier, follows: callout binding. */
+ public void testCompleteCallin8() throws Exception {
+ createBaseClass(" public void foo() {}\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " bar <- after f|\n" +
+ " void foo() -> void foo();\n",
+ "foo(",
+ " void bar() {}\n" +
+ " bar <- after |foo;|\n" +
+ " void foo() -> void foo();\n" +
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ public void testCompleteBasecall1() throws Exception {
+ createBaseClass(" public String getBaseText(Object object) {return null;}\n");
+ assertTypeBodyProposal(
+ " callin String getText(Object o) {\n"+
+ " return base.|\n" +
+ " }\n" +
+ " getText <- replace getBaseText;\n",
+ "", // should only have one proposal, so accept any to see if there are others
+ " callin String getText(Object o) {\n"+
+ " return base.getText(|o|)\n" +
+ " }\n" +
+ " getText <- replace getBaseText;\n" +
+ "",
+ 0); // should only have one proposal, so accept any to see if there are others
+ }
+
+ public void testCompleteTSuperCall1() throws Exception {
+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+
+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
+ String contents= "package test1;\n" +
+ "\n" +
+ "public team class CompletionTeam0 {\n" +
+ " protected class R {\n" +
+ " void foomethod(int i) {}\n" +
+ " void foomethod(String s) {}\n" +
+ " void barmethod(int i) {}\n" +
+ " }\n" +
+ "}\n";
+ pack1.createCompilationUnit("CompletionTeam0.java", contents, false, null);
+
+ contents= "package test1;\n" +
+ "\n" +
+ "public team class CompletionTeam1 extends CompletionTeam0 {\n" +
+ " protected class R {\n" +
+ " void foomethod(int i) {\n" +
+ " tsuper.//here\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
+ ICompilationUnit cu1= pack1.createCompilationUnit("CompletionTeam1.java", contents, false, null);
+
+ String str= "//here";
+
+ int offset= contents.indexOf(str);
+
+ CompletionProposalCollector collector= createCollector(cu1, offset);
+ collector.setReplacementLength(0);
+
+ codeComplete(cu1, offset, collector);
+
+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
+
+ // strictly expect one method only.
+ assertEquals(1, proposals.length);
+ assertAppliedProposal(contents, proposals[0], "foomethod()"); // arguments are not inserted by this method :(
+ }
+
+ // see Trac #126
+ public void testCompleteInCallinMethod1() throws Exception {
+ createBaseClass(" public String getText() { return null; }\n");
+ ICompletionProposal proposal = assertTypeBodyProposal(
+ " void foo(int i) {} \n" +
+ " callin void getText() {\n" +
+ " int idx = 3;\n" +
+ " foo|;\n" +
+ " }\n" +
+ " getText <- replace getText;\n",
+ "foo", // this is just step 1.
+ " void foo(int i) {} \n" +
+ " callin void getText() {\n" +
+ " int idx = 3;\n" +
+ " foo(|i|);\n" +
+ " }\n" +
+ " getText <- replace getText;\n" +
+ "",
+ 0); // should only have one proposal, so accept any to see if there are others
+ // this is the interesting check: choices??
+ assertChoices(proposal, new String[][]{new String[]{"i", "idx", "0"}});
+ }
+
+ /* Full c-t-f declaration */
+ public void testCalloutToField1() throws Exception {
+ createBaseClass("public int myField;\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " get|\n"+
+ " void blub() {}\n",
+ "getMyField",
+ " void bar() {}\n"+
+ " /**\n" +
+ " * \n" + // TODO(SH): define method binding comment templates
+ " */\n" +
+ " int getMyField() -> get int myField;\n"+
+ " |\n"+ // TODO(SH): newline not intended?
+ " void blub() {}\n"+
+ "",
+ INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* after modifier w/o trailing space */
+ public void testCalloutToField2() throws Exception {
+ createBaseClass("public int myField;\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " int getMyField() -> get|\n"+
+ " void blub() {}\n",
+ " int",
+ " void bar() {}\n"+
+ " int getMyField() -> get int myField;|\n"+
+ " void blub() {}\n"+
+ "",
+ VERY_INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* after modifier w/ trailing space */
+ public void testCalloutToField3() throws Exception {
+ createBaseClass("public int myField;\n");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " void setMyField(int v) -> set |\n"+
+ " void blub() {}\n",
+ "int",
+ " void bar() {}\n"+
+ " void setMyField(int v) -> set int myField;|\n"+
+ " void blub() {}\n"+
+ "",
+ VERY_INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* after modifier w/ trailing space - multiple base fields */
+ public void testCalloutToField4() throws Exception {
+ createBaseClass("public int myField;\n"+
+ "public int yourField;\n"+
+ "public boolean nobodysField;");
+ assertTypeBodyProposal(
+ " void bar() {}\n"+
+ " int getMyField() -> get |\n"+
+ " void blub() {}\n",
+ "int y",
+ " void bar() {}\n"+
+ " int getMyField() -> get int yourField;|\n"+
+ " void blub() {}\n"+
+ "",
+ VERY_INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* after modifier w/ trailing space - multiple base fields, mismatching type */
+ public void testCalloutToField5() throws Exception {
+ createBaseClass("public int myField;\n"+
+ "public int yourField;\n"+
+ "public boolean nobodysField;");
+ assertNosuchTypeBodyProposal(
+ " void bar() {}\n"+
+ " int getMyField() -> get |\n"+
+ " void blub() {}\n",
+ "boolean",
+ VERY_INTERESTING_CALLIN_CALLOUT_PROPOSAL);
+ }
+
+ /* Don't accidentally propose a getter for _OT$base: */
+ public void testCalloutToField6() throws Exception {
+ createBaseClass("public int myField;\n"+
+ "public int yourField;\n"+
+ "public boolean nobodysField;");
+ assertNosuchTypeBodyProposal(
+ " void bar() {}\n"+
+ " get|\n"+
+ " void blub() {}\n",
+ "get_",
+ 100);
+ }
+
+ public void testPlayedBy1() throws Exception {
+ createBaseClass("test2", "MyBase", "");
+ fBeforeImports= "";
+ fAfterImports= "\nimport base test2.MyBase;\n";
+ assertTypeBodyProposal(
+ "protected class R playedBy MyBa| {\n" +
+ "}\n",
+ "MyBase",
+ "protected class R playedBy MyBase| {\n" +
+ "}\n",
+ 0, false);
+ }
+
+ public void testPlayedBy2() throws Exception {
+ createBaseClass("test2", "AClass", "");
+ fBeforeImports= "";
+ fAfterImports= "\nimport base test2.AClass;\n";
+ assertTypeBodyProposal(
+ "protected class AClass playedBy A| {\n" +
+ "}\n",
+ "ACl",
+ "protected class AClass playedBy AClass| {\n" +
+ "}\n",
+ 0, false);
+ }
+
+ public void testBaseGuard1() throws Exception {
+ createBaseClass("test2", "AClass", "public boolean check() { return false; }");
+ fBeforeImports = "import base test2.AClass;";
+ fAfterImports = "import base test2.AClass;";
+ assertTypeBodyProposal(
+ "protected class ARole playedBy AClass\n" +
+ " base when (base.|)\n" +
+ "{\n" +
+ "}\n",
+ "che",
+ "protected class ARole playedBy AClass\n" +
+ " base when (base.check()|)\n" +
+ "{\n" +
+ "}\n",
+ 0, false);
+ }
+
+ public void testBaseGuard2() throws Exception {
+ createBaseClass("test2", "AClass", "");
+ assertTypeBodyProposal(
+ "protected class ARole playedBy AClass\n" +
+ " ba|\n" +
+ "{\n" +
+ "}\n",
+ "base",
+ "protected class ARole playedBy AClass\n" +
+ " base when (|)\n" +
+ "{\n" +
+ "}\n",
+ 0, false);
+ }
+ public void testBaseGuard3() throws Exception {
+ createBaseClass("test2", "AClass", "public boolean check() { return false; }");
+ assertTypeBodyProposal(
+ "protected class ARole playedBy AClass {\n" +
+ " toString <- after check w| \n" +
+ "}\n",
+ "wh",
+ "protected class ARole playedBy AClass {\n" +
+ " toString <- after check when (|) \n" +
+ "}\n",
+ 0, false);
+ }
+ public void testBaseGuard4() throws Exception {
+ createBaseClass("test2", "AClass", "public String check() { return false; }");
+ assertTypeBodyProposal(
+ "protected class ARole playedBy AClass {\n" +
+ " String toString() <- after String check() w| \n" +
+ "}\n",
+ "wh",
+ "protected class ARole playedBy AClass {\n" +
+ " String toString() <- after String check() when (|) \n" +
+ "}\n",
+ 0, false);
+ }
+
+
+ public void testRoleTag1() throws Exception {
+ IPackageFragment teamPkg = CompletionTestSetup.getTestPackage("MyTeam");
+ teamPkg.createCompilationUnit("MyRole.java",
+ "team package test1.MyTeam;\n" +
+ "public class MyRole {}\n",
+ true, null);
+ StringBuffer teamContent = new StringBuffer();
+ teamContent.append("package test1;\n");
+ teamContent.append("/** @role My */\n");
+ teamContent.append("public team class MyTeam {\n");
+ teamContent.append(" MyRole roleField;\n"); // trigger loading
+ teamContent.append(" protected class MyOtherRole {}\n");
+ teamContent.append("}");
+
+ StringBuffer expectedContent = new StringBuffer();
+ expectedContent.append("package test1;\n");
+ expectedContent.append("/** @role MyRole */\n");
+ expectedContent.append("public team class MyTeam {\n");
+ expectedContent.append(" MyRole roleField;\n");
+ expectedContent.append(" protected class MyOtherRole {}\n");
+ expectedContent.append("}");
+
+ String completeAfter = "@role My";
+ int pos = teamContent.indexOf(completeAfter)+completeAfter.length();
+
+ assertProposal("My", null, null, teamContent, new Region(pos, 0), expectedContent, new Region(pos+4, 0), 0); // 4: len(MyRole)-len(My)
+ }
+
+ public void testRoleTag2() throws Exception {
+ IPackageFragment teamPkg = CompletionTestSetup.getTestPackage("MyTeam");
+ teamPkg.createCompilationUnit("MyRole.java",
+ "team package test1.MyTeam;\n" +
+ "public class MyRole {}\n",
+ true, null);
+ StringBuffer teamContent = new StringBuffer();
+ teamContent.append("package test1;\n");
+ teamContent.append("/** @role */\n");
+ teamContent.append("public team class MyTeam {\n");
+ teamContent.append(" MyRole roleField;\n"); // trigger loading
+ teamContent.append(" protected class MyOtherRole {}\n");
+ teamContent.append("}");
+
+ StringBuffer expectedContent = new StringBuffer();
+ expectedContent.append("package test1;\n");
+ expectedContent.append("/** @role MyRole */\n");
+ expectedContent.append("public team class MyTeam {\n");
+ expectedContent.append(" MyRole roleField;\n");
+ expectedContent.append(" protected class MyOtherRole {}\n");
+ expectedContent.append("}");
+
+ String completeAfter = "@role ";
+ int pos = teamContent.indexOf(completeAfter)+completeAfter.length();
+
+ assertProposal("", null, null, teamContent, new Region(pos, 0), expectedContent, new Region(pos+6, 0), 0); // 6: len(MyRole)
+ }
+
+
+ public void testCreateMethod1() throws Exception {
+ IPackageFragment pkg = CompletionTestSetup.getTestPackage("p1");
+ pkg.createCompilationUnit("SuperTeam.java",
+ "package test1.p1;\n" +
+ "public team class SuperTeam {\n" +
+ " public class MyRole {\n" +
+ " String blub(int i) { return \"\"; }\n" +
+ " }\n" +
+ "}\n",
+ true, null);
+
+ StringBuffer subTeamContent = new StringBuffer();
+ subTeamContent.append("package test1;\n");
+ subTeamContent.append("import test1.p1.SuperTeam;\n");
+ subTeamContent.append("public team class Completion_testCreateMethod1 extends SuperTeam {\n");
+ subTeamContent.append(" protected class MyRole {\n");
+ subTeamContent.append(" blu\n");
+ subTeamContent.append(" }\n");
+ subTeamContent.append("}");
+
+ StringBuffer expectedContent = new StringBuffer();
+ expectedContent.append("package test1;\n");
+ expectedContent.append("import test1.p1.SuperTeam;\n");
+ expectedContent.append("public team class Completion_testCreateMethod1 extends SuperTeam {\n");
+ expectedContent.append(" protected class MyRole {\n");
+ expectedContent.append(" /* (non-Javadoc)\n");
+ expectedContent.append(" * @see test1.p1.SuperTeam.MyRole#blub(int)\n");
+ expectedContent.append(" */\n");
+ expectedContent.append(" @Override\n");
+ expectedContent.append(" String blub(int i) {\n");
+ expectedContent.append(" //TODO\n");
+ expectedContent.append(" return tsuper.blub(i);\n");
+ expectedContent.append(" }\n");
+ expectedContent.append(" }\n");
+ expectedContent.append("}");
+
+ String completeAfter = "blu";
+ int pos = subTeamContent.indexOf(completeAfter)+completeAfter.length();
+ int posAfter = expectedContent.indexOf("}")+1;
+
+ assertProposal("", null, null, subTeamContent, new Region(pos, 0), expectedContent, new Region(posAfter, 0), 0);
+ }
+
+ // == Below: Helper methods/fields. ==
+
+ private void createBaseClass(String classBody)
+ throws JavaModelException, CoreException
+ {
+ createBaseClass("test1", "B", classBody);
+ }
+ private void createBaseClass(String basePackage, String className, String classBody)
+ throws JavaModelException, CoreException
+ {
+ // create a base class:
+ StringBuffer buf= new StringBuffer();
+ buf.append("package "+basePackage+";\n");
+ buf.append("public class "+className+" {\n");
+ buf.append(classBody);
+ buf.append("}\n");
+ String contents= buf.toString();
+
+ IPackageFragment basePkg = CompletionTestSetup.getAbsoluteTestPackage(basePackage);
+ basePkg.createCompilationUnit(className+".java", contents, true, null);
+ }
+
+ // from 3.4 AbstractCompletionTest:
+ protected static final String CARET= "|";
+
+ private ICompilationUnit fCU;
+ private JavaEditor fEditor;
+
+ private String fBeforeImports;
+ private String fAfterImports;
+ private String fMembers;
+ private String fLocals;
+ private char fTrigger;
+ private boolean fWaitBeforeCompleting;
+
+ protected void assertChoices(ICompletionProposal proposal, String[][] expected) {
+ assertTrue("Not a ParameterGuessingProposal", proposal instanceof ParameterGuessingProposal);
+ ParameterGuessingProposal pgProposal = (ParameterGuessingProposal)proposal;
+ ICompletionProposal[][] choices = new ProposalAdaptor().getChoices(pgProposal);
+ assertEquals("Not same number of choices", expected.length, choices.length);
+ for (int i=0; i<choices.length; i++) {
+ assertEquals("Not same number of nested choices", expected[i].length, choices[i].length);
+ for (int j=0; j<choices.length; j++) {
+ assertEquals("Unexpected choice", expected[i][j], choices[i][j].getDisplayString());
+ }
+ }
+ }
+
+ protected ICompletionProposal assertTypeBodyProposal(String before, String selector, String expected, int requiredRelevance)
+ throws CoreException
+ {
+ return assertTypeBodyProposal(before, selector, expected, requiredRelevance, true);
+ }
+ protected ICompletionProposal assertTypeBodyProposal(String before, String selector, String expected, int requiredRelevance, boolean addRole)
+ throws CoreException
+ {
+ StringBuffer contents= new StringBuffer();
+ IRegion preSelection= assembleClassBodyTestCUExtractSelection(contents, before, fBeforeImports, addRole);
+ StringBuffer result= new StringBuffer();
+ IRegion expectedSelection= assembleClassBodyTestCUExtractSelection(result, expected, fAfterImports, addRole);
+
+ return assertProposal(selector, null, null, contents, preSelection, result, expectedSelection, requiredRelevance);
+ }
+
+ protected ICompletionProposal assertROFIBodyProposal(String before, String selector, String expected, int requiredRelevance)
+ throws CoreException
+ {
+ IPackageFragment testPkg = CompletionTestSetup.getTestPackage(null);
+ String teamName = "Completion_" + getName();
+ testPkg.createCompilationUnit(teamName + ".java",
+ "package test1;\n" +
+ "/** @role RoFiRole */\n" +
+ "public team class Completion_"+getName()+" {}\n",
+ true, null);
+
+ StringBuffer contents= new StringBuffer();
+ IRegion preSelection= assembleROFIBodyTestCUExtractSelection(contents, before, fBeforeImports);
+ StringBuffer result= new StringBuffer();
+ IRegion expectedSelection= assembleROFIBodyTestCUExtractSelection(result, expected, fAfterImports);
+
+ return assertProposal(selector, teamName, "RoFiRole", contents, preSelection, result, expectedSelection, requiredRelevance);
+ }
+
+ protected void assertNosuchTypeBodyProposal(String before, String selector, int requiredRelevance)
+ throws CoreException
+ {
+ StringBuffer contents= new StringBuffer();
+ IRegion preSelection= assembleClassBodyTestCUExtractSelection(contents, before, fBeforeImports, true);
+
+ assertNosuchProposal(selector, contents, preSelection, requiredRelevance);
+ }
+
+ private IRegion assembleClassBodyTestCUExtractSelection(StringBuffer buffer, String javadocLine, String imports, boolean addRole) {
+ String prefix= "package test1;\n" +
+ imports +
+ "\n" +
+ "public team class Completion_" + getName() + " {\n" + // SH: added: team, removed <T> (crashed!!) FIXME!!
+//{ObjectTeams:
+ (addRole ?
+ " protected class R playedBy B {\n" : "") +
+// SH}
+ fLocals +
+ ""; // SH: removed blanks
+ String postfix= "\n" +
+ "\n" +
+ fMembers +
+//{ObjectTeams:
+ (addRole ?
+ " }\n":"")+
+// SH}
+ "}\n";
+ StringBuffer lineBuffer= new StringBuffer(javadocLine);
+ int firstPipe= lineBuffer.indexOf(CARET);
+ int secondPipe;
+ if (firstPipe == -1) {
+ firstPipe= lineBuffer.length();
+ secondPipe= firstPipe;
+ } else {
+ lineBuffer.replace(firstPipe, firstPipe + CARET.length(), "");
+ secondPipe= lineBuffer.indexOf(CARET, firstPipe);
+ if (secondPipe ==-1)
+ secondPipe= firstPipe;
+ else
+ lineBuffer.replace(secondPipe, secondPipe + CARET.length(), "");
+ }
+ buffer.append(prefix + lineBuffer + postfix);
+ return new Region(firstPipe + prefix.length(), secondPipe - firstPipe);
+ }
+
+ private IRegion assembleROFIBodyTestCUExtractSelection(StringBuffer buffer, String javadocLine, String imports) {
+ String teamName = "Completion_" + getName();
+ String prefix= "team package test1."+teamName+";\n" +
+ imports +
+ "\n" +
+ "protected class RoFiRole playedBy B {\n" +
+ fLocals +
+ "";
+ String postfix= "\n" +
+ "\n" +
+ fMembers +
+ "}\n";
+ StringBuffer lineBuffer= new StringBuffer(javadocLine);
+ int firstPipe= lineBuffer.indexOf(CARET);
+ int secondPipe;
+ if (firstPipe == -1) {
+ firstPipe= lineBuffer.length();
+ secondPipe= firstPipe;
+ } else {
+ lineBuffer.replace(firstPipe, firstPipe + CARET.length(), "");
+ secondPipe= lineBuffer.indexOf(CARET, firstPipe);
+ if (secondPipe ==-1)
+ secondPipe= firstPipe;
+ else
+ lineBuffer.replace(secondPipe, secondPipe + CARET.length(), "");
+ }
+ buffer.append(prefix + lineBuffer + postfix);
+ return new Region(firstPipe + prefix.length(), secondPipe - firstPipe);
+ }
+
+ private ICompletionProposal assertProposal(String selector, String relativePackage, String typeName, StringBuffer contents, IRegion preSelection, StringBuffer result, IRegion expectedSelection, int requiredRelevance) throws CoreException {
+//{ObjectTeams: made package and file name configurable via new arguments `relativePackage'/`typeName':
+ IPackageFragment pkg = (relativePackage == null) ? CompletionTestSetup.getAnonymousTestPackage() : CompletionTestSetup.getTestPackage(relativePackage);
+ fCU= (typeName == null) ? createCU(pkg, contents.toString()) : pkg.createCompilationUnit(typeName + ".java", contents.toString(), false, null);
+// SH}
+ fEditor= (JavaEditor) EditorUtility.openInEditor(fCU);
+ IDocument doc;
+ ITextSelection postSelection;
+ ICompletionProposal proposal = null;
+ try {
+ proposal= findNonNullProposal(selector, fCU, preSelection, requiredRelevance);
+ doc= fEditor.getDocumentProvider().getDocument(fEditor.getEditorInput());
+//{ObjectTeams: selection needs to be set in the editor:
+ fEditor.getSelectionProvider().setSelection(new TextSelection(preSelection.getOffset(), preSelection.getLength()));
+// SH}
+ apply(fEditor, doc, proposal, preSelection);
+ postSelection= (ITextSelection) fEditor.getSelectionProvider().getSelection();
+ } finally {
+ JavaProjectHelper.emptyDisplayLoop();
+ closeEditor(fEditor);
+ }
+
+ assertEquals(result.toString(), doc.get());
+ assertEquals("selection offset", expectedSelection.getOffset(), postSelection.getOffset());
+ assertEquals("selection length", expectedSelection.getLength(), postSelection.getLength());
+ return proposal;
+ }
+
+ private void assertNosuchProposal(String selector, StringBuffer contents, IRegion preSelection, int requiredRelevance)
+ throws CoreException
+ {
+ fCU= createCU(CompletionTestSetup.getAnonymousTestPackage(), contents.toString());
+ fEditor= (JavaEditor) EditorUtility.openInEditor(fCU);
+ try {
+ ICompletionProposal proposal= findNamedProposal(selector, fCU, preSelection, requiredRelevance);
+ assertNull("found unexpected proposal: "+selector, proposal);
+ } finally {
+ closeEditor(fEditor);
+ }
+ }
+
+ // from 3.4 CodeCompletionTest
+ private void assertAppliedProposal(String contents, IJavaCompletionProposal proposal, String completion) {
+ IDocument doc= new Document(contents);
+ proposal.apply(doc);
+ int offset2= contents.indexOf("//here");
+ String result= contents.substring(0, offset2) + completion + contents.substring(offset2);
+ assertEquals(result, doc.get());
+ }
+
+ private ICompilationUnit createCU(IPackageFragment pack1, String contents) throws JavaModelException {
+ ICompilationUnit cu= pack1.createCompilationUnit("Completion_" + getName() + ".java", contents, false, null);
+ return cu;
+ }
+
+ private ICompletionProposal findNonNullProposal(String prefix, ICompilationUnit cu, IRegion selection, int requiredRelevance) throws JavaModelException, PartInitException {
+ ICompletionProposal proposal= findNamedProposal(prefix, cu, selection, requiredRelevance);
+ assertNotNull("no proposal starting with \"" + prefix + "\"", proposal);
+ return proposal;
+ }
+
+ private ICompletionProposal findNamedProposal(String prefix, ICompilationUnit cu, IRegion selection, int requiredRelevance) throws JavaModelException, PartInitException {
+ ICompletionProposal[] proposals= collectProposals(cu, selection);
+
+ ICompletionProposal found= null;
+ for (int i= 0; i < proposals.length; i++) {
+ if (proposals[i] instanceof IJavaCompletionProposal)
+ if (((IJavaCompletionProposal)proposals[i]).getRelevance() < requiredRelevance)
+ continue;
+ String displayString= proposals[i].getDisplayString();
+ if (displayString.startsWith(prefix)) {
+ if (found == null || displayString.equals(prefix))
+ found= proposals[i];
+ }
+ }
+ return found;
+ }
+
+ private ICompletionProposal[] collectProposals(ICompilationUnit cu, IRegion selection) throws JavaModelException, PartInitException {
+ waitBeforeCoreCompletion();
+ ContentAssistant assistant= new ContentAssistant();
+ assistant.setDocumentPartitioning(IJavaPartitions.JAVA_PARTITIONING);
+ IContentAssistProcessor javaProcessor= new JavaCompletionProcessor(fEditor, assistant, getContentType());
+
+ ICompletionProposal[] proposals= javaProcessor.computeCompletionProposals(fEditor.getViewer(), selection.getOffset());
+ return proposals;
+ }
+
+ /**
+ * Invokes {@link Thread#sleep(long)} if {@link #waitBeforeCompleting(boolean)} was set to
+ * <code>true</code> or camel case completions are enabled. For some reasons, inner types and
+ * camel case matches don't show up otherwise.
+ *
+ * @since 3.2
+ */
+ private void waitBeforeCoreCompletion() {
+ if (fWaitBeforeCompleting || JavaCore.ENABLED.equals(JavaCore.getOption(JavaCore.CODEASSIST_CAMEL_CASE_MATCH))) {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException x) {
+ }
+ }
+ }
+
+ protected String getContentType() {
+ return IDocument.DEFAULT_CONTENT_TYPE;
+ }
+
+ private void apply(ITextEditor editor, IDocument doc, ICompletionProposal proposal, IRegion selection) {
+ if (proposal instanceof ICompletionProposalExtension2) {
+ ICompletionProposalExtension2 ext= (ICompletionProposalExtension2) proposal;
+ ITextViewer viewer= (ITextViewer) editor.getAdapter(ITextOperationTarget.class);
+ ext.selected(viewer, false);
+ viewer.setSelectedRange(selection.getOffset(), selection.getLength());
+ ext.apply(viewer, fTrigger, 0, selection.getOffset());
+ Point range= proposal.getSelection(doc);
+ if (range != null)
+ viewer.setSelectedRange(range.x, range.y);
+ } else if (proposal instanceof ICompletionProposalExtension) {
+ ICompletionProposalExtension ext= (ICompletionProposalExtension) proposal;
+ ext.apply(doc, fTrigger, selection.getOffset() + selection.getLength());
+ } else {
+ proposal.apply(doc);
+ }
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CompletionTestSetup.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CompletionTestSetup.java
new file mode 100644
index 0000000..76bb759
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/CompletionTestSetup.java
@@ -0,0 +1,77 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: CompletionTestSetup.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.ui.tests.core.ProjectTestSetup;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+
+/*
+ * Copied from org.eclipse.jdt.text.tests (Version 3.4 as of Mar 07, 2008)
+ */
+class CompletionTestSetup extends ProjectTestSetup {
+
+ // SH: added parameter
+ public static IPackageFragment getTestPackage(String relativeName) throws CoreException {
+ String packageName = "test1";
+ if (relativeName != null)
+ packageName += '.'+relativeName;
+ return getAbsoluteTestPackage(packageName);
+ }
+ public static IPackageFragment getAbsoluteTestPackage(String packageName) throws CoreException {
+ IJavaProject project= getProject();
+ IPackageFragmentRoot root= project.getPackageFragmentRoot("src");
+ if (!root.exists())
+ root= JavaProjectHelper.addSourceContainer(project, "src");
+
+ IPackageFragment fragment= root.getPackageFragment(packageName);
+ if (!fragment.exists())
+ fragment= root.createPackageFragment(packageName, false, null);
+
+ return fragment;
+ }
+
+ private static int fAnonymousSoureFolderCounter= 0;
+ public static IPackageFragment getAnonymousTestPackage() throws CoreException {
+ IJavaProject project= getProject();
+ String sourceFolder= "src" + fAnonymousSoureFolderCounter++;
+ IPackageFragmentRoot root= project.getPackageFragmentRoot(sourceFolder);
+ if (!root.exists())
+ root= JavaProjectHelper.addSourceContainer(project, sourceFolder);
+
+ IPackageFragment fragment= root.getPackageFragment("test1");
+ if (!fragment.exists())
+ fragment= root.createPackageFragment("test1", false, null);
+
+ return fragment;
+ }
+
+ public CompletionTestSetup(Test test) {
+ super(test);
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ModifierCorrectionsQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ModifierCorrectionsQuickFixTest.java
new file mode 100644
index 0000000..1bc7ecf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ModifierCorrectionsQuickFixTest.java
@@ -0,0 +1,420 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.ArrayList;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.CUCorrectionProposal;
+
+/**
+ * Test OT-specific quickfixes (here: modifier corrections).
+ * @author stephan
+ * @since 1.2.1
+ */
+// structure OT_COPY_PASTE from {@link org.eclipse.jdt.ui.tests.quickfix.ModifierCorrectionsQuickFixTest}
+public class ModifierCorrectionsQuickFixTest extends OTQuickFixTest {
+
+
+ private static final Class THIS= ModifierCorrectionsQuickFixTest.class;
+
+
+ public ModifierCorrectionsQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return setUpTest(new TestSuite(THIS));
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ public static Test suite() {
+ return allTests();
+ }
+
+
+ /* calling a non-public role constructor from the team. */
+ public void testRoleCtorCalled1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" R(){}\n");
+ buf.append(" }\n");
+ buf.append(" void foo() {\n");
+ buf.append(" R r = new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" protected R(){}\n");
+ buf.append(" }\n");
+ buf.append(" void foo() {\n");
+ buf.append(" R r = new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /* calling a non-public role constructor from a sibling role. */
+ public void testRoleCtorCalled2() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" R(){}\n");
+ buf.append(" }\n");
+ buf.append(" protected class R2 {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" R r = new R();\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" protected R(){}\n");
+ buf.append(" }\n");
+ buf.append(" protected class R2 {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" R r = new R();\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /* calling a non-public role constructor from a sibling role file. */
+ public void testRoleCtorCalled3() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ IPackageFragment pack1T= fSourceFolder.createPackageFragment("test1.T", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" R(){}\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("team package test1.T;\n");
+ buf.append("protected class R2 {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" R r = new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1T.createCompilationUnit("R2.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" protected R(){}\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /* a non-public constructor of a role file is called from a sibling role. */
+ public void testRoleCtorCalled4() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ IPackageFragment pack1T= fSourceFolder.createPackageFragment("test1.T", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("team package test1.T;\n");
+ buf.append("protected class R2 {\n");
+ buf.append(" R2(){}\n");
+ buf.append("}\n");
+ pack1T.createCompilationUnit("R2.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" R2 r = new R2();\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("team package test1.T;\n");
+ buf.append("protected class R2 {\n");
+ buf.append(" protected R2(){}\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /* calling a non-public role constructor as externalized. */
+ public void testRoleCtorCalled5() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" public class R {\n");
+ buf.append(" R(){}\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class Main {\n");
+ buf.append(" void foo(final T t) {\n");
+ buf.append(" R<@t> r = t.new R();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("Main.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot, 2, null);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" public class R {\n");
+ buf.append(" public R(){}\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /* calling a non-public role method on externalized. */
+ public void testRoleMethodCalled() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" public class R {\n");
+ buf.append(" void bar(){}\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class Main {\n");
+ buf.append(" void foo(final T t, R<@t> r) {\n");
+ buf.append(" r.bar();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("Main.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T {\n");
+ buf.append(" public class R {\n");
+ buf.append(" public void bar(){}\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ public void testCalloutToPrivate() throws Exception {
+ IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class BaseBar {\n");
+ buf.append(" private int foo() { return 0; }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("BaseBar.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class TeamFoo {\n");
+ buf.append(" protected class R playedBy BaseBar {\n");
+ buf.append(" @SuppressWarnings(\"decapsulation\")\n");
+ buf.append(" int goo() -> int foo();\n");
+ buf.append(" }\n");
+ buf.append(" void t(R r) {\n");
+ buf.append(" int j = r.goo();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("TeamFoo.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class TeamFoo {\n");
+ buf.append(" protected class R playedBy BaseBar {\n");
+ buf.append(" @SuppressWarnings(\"decapsulation\")\n");
+ buf.append(" protected\n");
+ buf.append(" int goo() -> int foo();\n");
+ buf.append(" }\n");
+ buf.append(" void t(R r) {\n");
+ buf.append(" int j = r.goo();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+
+ public void testCalloutViaExternalized() throws Exception {
+ IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class BaseBar {\n");
+ buf.append(" int foo() { return 0; }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("BaseBar.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class TeamFoo {\n");
+ buf.append(" public class R playedBy BaseBar {\n");
+ buf.append(" int goo() -> int foo();\n");
+ buf.append(" }\n");
+ buf.append(" void t(final TeamFoo t, R<@t> r) {\n");
+ buf.append(" int j = r.goo();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("TeamFoo.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class TeamFoo {\n");
+ buf.append(" public class R playedBy BaseBar {\n");
+ buf.append(" public int goo() -> int foo();\n");
+ buf.append(" }\n");
+ buf.append(" void t(final TeamFoo t, R<@t> r) {\n");
+ buf.append(" int j = r.goo();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /** @SuppressWarnings("bindingconventions") was added a wrong location. */
+ public void testSuppressWarnings1() throws Exception {
+ IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class BaseBar {\n");
+ buf.append(" int foo() { return 0; }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("BaseBar.java", buf.toString(), false, null);
+
+ IPackageFragment pack2 = fSourceFolder.createPackageFragment("test2", false, null);
+ buf = new StringBuffer();
+ buf.append("package test2;\n");
+ buf.append("import test1.BaseBar;\n");
+ buf.append("public team class TeamFoo {\n");
+ buf.append(" public class R playedBy BaseBar {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack2.createCompilationUnit("TeamFoo.java", buf.toString(), false, null);
+
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test2;\n");
+ buf.append("import test1.BaseBar;\n");
+ buf.append("public team class TeamFoo {\n");
+ buf.append(" @SuppressWarnings(\"bindingconventions\")\n");
+ buf.append(" public class R playedBy BaseBar {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTJavadocQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTJavadocQuickFixTest.java
new file mode 100644
index 0000000..c475b01
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTJavadocQuickFixTest.java
@@ -0,0 +1,155 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: OTJavadocQuickFixTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
+import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.CUCorrectionProposal;
+import org.eclipse.jdt.testplugin.TestOptions;
+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;
+
+/**
+ * largely inspired by org.eclipse.jdt.ui.tests.quickfix.JavadocQuickFixTest.
+ * @author stephan
+ * @since 1.2.5
+ */
+public class OTJavadocQuickFixTest extends OTQuickFixTest {
+
+ private static final Class THIS= OTJavadocQuickFixTest.class;
+
+ public OTJavadocQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return setUpTest(new TestSuite(THIS));
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ public static Test suite() {
+ return allTests();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void setUp() throws Exception {
+ Hashtable options= TestOptions.getDefaultOptions();
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");
+ options.put(JavaCore.COMPILER_PB_INVALID_JAVADOC, JavaCore.ERROR);
+ options.put(JavaCore.COMPILER_PB_INVALID_JAVADOC_TAGS, JavaCore.ENABLED);
+ options.put(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS, JavaCore.ERROR);
+ options.put(JavaCore.COMPILER_PB_MISSING_JAVADOC_COMMENTS, JavaCore.ERROR);
+ options.put(JavaCore.COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING, JavaCore.ENABLED);
+ JavaCore.setOptions(options);
+
+ StringBuffer comment= new StringBuffer();
+ comment.append("/**\n");
+ comment.append(" * A comment.\n");
+ comment.append(" * ${tags}\n");
+ comment.append(" */");
+ String res= comment.toString();
+ StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORCOMMENT_ID, res, null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.METHODCOMMENT_ID, res, null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.TYPECOMMENT_ID, res, null);
+
+ comment= new StringBuffer();
+ comment.append("/**\n");
+ comment.append(" * A field comment for ${field}.\n");
+ comment.append(" */");
+ StubUtility.setCodeTemplate(CodeTemplateContextType.FIELDCOMMENT_ID, comment.toString(), null);
+
+ comment= new StringBuffer();
+ comment.append("/**\n");
+ comment.append(" * A override comment.\n");
+ comment.append(" * ${see_to_overridden}\n");
+ comment.append(" */");
+ StubUtility.setCodeTemplate(CodeTemplateContextType.OVERRIDECOMMENT_ID, comment.toString(), null);
+
+ comment= new StringBuffer();
+ comment.append("/**\n");
+ comment.append(" * A delegate comment.\n");
+ comment.append(" * ${see_to_target}\n");
+ comment.append(" */");
+ StubUtility.setCodeTemplate(CodeTemplateContextType.DELEGATECOMMENT_ID, comment.toString(), null);
+
+ fJProject1= ProjectTestSetup.getProject();
+
+ fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+
+//{ObjectTeams: add the OTRE:
+ JavaProjectHelper.addLibrary(fJProject1, new Path(OTRE_JAR_PATH));
+// SH}
+ }
+
+ public void testMissingRoleTag1() throws Exception {
+ IPackageFragment teamPkg = fSourceFolder.createPackageFragment("test1.MyTeam", false, null);
+ teamPkg.createCompilationUnit("MyRole.java",
+ "team package test1.MyTeam;\n" +
+ "public class MyRole {}\n",
+ true, null);
+
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("/**\n");
+ buf.append(" */\n");
+ buf.append("public team class MyTeam {\n");
+ buf.append(" private MyRole r = null;\n"); // use field to trigger loading of role file
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("MyTeam.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot, 1);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview1= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("/**\n");
+ buf.append(" * @role MyRole\n");
+ buf.append(" */\n");
+ buf.append("public team class MyTeam {\n");
+ buf.append(" private MyRole r = null;\n");
+ buf.append("}\n");
+ String expected= buf.toString();
+ assertEqualString(preview1, expected);
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java
new file mode 100644
index 0000000..dbe2553
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java
@@ -0,0 +1,92 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: OTQuickFixTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.io.File;
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+import org.eclipse.jdt.testplugin.TestOptions;
+import org.eclipse.jdt.ui.tests.quickfix.QuickFixTest;
+import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin;
+
+public class OTQuickFixTest extends QuickFixTest {
+
+ protected IJavaProject fJProject1;
+
+ protected IPackageFragmentRoot fSourceFolder;
+
+ public OTQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test suite() {
+ TestSuite suite= new TestSuite();
+ suite.addTest(ModifierCorrectionsQuickFixTest.suite());
+ suite.addTest(CalloutQuickFixTest.suite());
+ suite.addTest(CallinQuickFixTest.suite());
+ suite.addTest(UnresolvedMethodsQuickFixTest.suite());
+ suite.addTest(OTJavadocQuickFixTest.suite());
+
+ return suite;
+ }
+
+ public static final String OT_RUNTIME_PATH;
+ public static final String OTRE_JAR_PATH;
+ static {
+ OT_RUNTIME_PATH = JavaCore.getClasspathVariable(OTDTPlugin.OTDT_INSTALLDIR).toOSString();
+ OTRE_JAR_PATH = OT_RUNTIME_PATH
+ + File.separator
+ + "lib" //$NON-NLS-1$
+ + File.separator
+ + "otre.jar"; //$NON-NLS-1$
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void addOptions(Hashtable options) {
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");
+ options.put(JavaCore.COMPILER_PB_STATIC_ACCESS_RECEIVER, JavaCore.ERROR);
+ }
+
+ protected void setUp() throws Exception {
+ Hashtable options= TestOptions.getDefaultOptions();
+ addOptions(options);
+
+ JavaCore.setOptions(options);
+
+ fJProject1= ProjectTestSetup.getProject();
+
+ fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+ }
+
+ protected void tearDown() throws Exception {
+ JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OrganizeImportsTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OrganizeImportsTest.java
new file mode 100644
index 0000000..54989d3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OrganizeImportsTest.java
@@ -0,0 +1,836 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: OrganizeImportsTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.core.search.TypeNameMatch;
+import org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation;
+import org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation.IChooseImportQuery;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.objectteams.otdt.core.ext.OTREContainer;
+import org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper;
+import org.eclipse.objectteams.otdt.ui.tests.util.TestOptions;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * This class contains tests that have been copied from the original class
+ * <code>org.eclipse.jdt.ui.tests.core.ImportOrganizeTest</code> in the test suite
+ * <code>org.eclipse.jdt.ui.tests.refactoring</code> provided by Eclipse as
+ * well as new OT-specific tests.
+ *
+ * @author brcan
+ */
+@SuppressWarnings("restriction")
+public class OrganizeImportsTest extends TestCase
+{
+ private IJavaProject _project;
+
+ public OrganizeImportsTest(String name)
+ {
+ super(name);
+ }
+
+ public static Test allTests()
+ {
+ return new ProjectTestSetup(new TestSuite(OrganizeImportsTest.class));
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return allTests();
+ }
+ else
+ {
+ TestSuite suite = new TestSuite();
+ suite.addTest(new OrganizeImportsTest("testVisibility_bug56704"));
+ return new ProjectTestSetup(suite);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void setUp() throws Exception
+ {
+ _project = ProjectTestSetup.getProject();
+
+ Hashtable options = TestOptions.getFormatterOptions();
+ options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE,
+ String.valueOf(99));
+ JavaCore.setOptions(options);
+ }
+
+ protected void tearDown() throws Exception
+ {
+ JavaProjectHelper.clear(_project, ProjectTestSetup.getDefaultClasspath());
+ OTREContainer.initializeOTJProject(_project.getProject());
+ }
+
+ private IChooseImportQuery createQuery(
+ final String name,
+ final String[] choices,
+ final int[] nEntries)
+ {
+ return new IChooseImportQuery() {
+ public TypeNameMatch[] chooseImports(TypeNameMatch[][] openChoices, ISourceRange[] ranges)
+ {
+ assertTrue(
+ name + "-query-nchoices1",
+ choices.length == openChoices.length);
+ assertTrue(
+ name + "-query-nchoices2",
+ nEntries.length == openChoices.length);
+ if (nEntries != null)
+ {
+ for (int i = 0; i < nEntries.length; i++)
+ {
+ assertTrue(
+ name + "-query-cnt" + i,
+ openChoices[i].length == nEntries[i]);
+ }
+ }
+ TypeNameMatch[] res = new TypeNameMatch[openChoices.length];
+ for (int i = 0; i < openChoices.length; i++)
+ {
+ TypeNameMatch[] selection = openChoices[i];
+ assertNotNull(name + "-query-setset" + i, selection);
+ assertTrue(name + "-query-setlen" + i, selection.length > 0);
+ TypeNameMatch found = null;
+ for (int k = 0; k < selection.length; k++)
+ {
+ if (selection[k].getFullyQualifiedName().equals(choices[i]))
+ {
+ found = selection[k];
+ }
+ }
+ assertNotNull(name + "-query-notfound" + i, found);
+ res[i] = found;
+ }
+ return res;
+ }
+ };
+ }
+
+ public static void assertEqualString(String actual, String expected)
+ {
+ StringAsserts.assertEqualString(actual, expected);
+ }
+
+ //OT-specific tests
+ public void testTypeReferenceInRoleclass1() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testTypeReferenceInRoleclass2() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B2 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B2.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" }\n");
+ buf.append(" public class R2 playedBy B2 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("import base basePkg.B2;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" }\n");
+ buf.append(" public class R2 playedBy B2 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testTypeReferenceInRoleclass3() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 {\n");
+ buf.append(" callin void rm1(B1 b1) {\n");
+ buf.append(" base.rm1(b1);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import basePkg.B1;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 {\n");
+ buf.append(" callin void rm1(B1 b1) {\n");
+ buf.append(" base.rm1(b1);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testTypeReferenceInRoleclass4() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public void setBase(B1 b1) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" void setBase(B1 b1) -> void setBase(B1 b1);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" void setBase(B1 b1) -> void setBase(B1 b1);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testTypeReferenceInRoleclass5() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public team class T2 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("T2.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy T2 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import base basePkg.T2;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy T2 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+ /** playedBy inner base class - role and base have same name. */
+ public void testTypeReferenceInRoleclass6() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" public class Inner {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("import base basePkg.B1.Inner;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class Inner playedBy Inner {\n");
+ buf.append(" }\n");
+ buf.append(" protected class R0 playedBy B1 {\n");
+ buf.append(" Inner other;\n");
+ buf.append(" };\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("import base basePkg.B1.Inner;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class Inner playedBy Inner {\n");
+ buf.append(" }\n");
+ buf.append(" protected class R0 playedBy B1 {\n");
+ buf.append(" Inner other;\n");
+ buf.append(" };\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ // base import for role file
+ public void testTypeReferenceInRoleclass7() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment aspectPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append("}\n");
+ ICompilationUnit cu = aspectPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ // create the role file:
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg.T1",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("team package teamPkg.T1;\n");
+ buf.append("public class R1 playedBy B1 {\n");
+ buf.append("}\n");
+ teamPkg.createCompilationUnit("R1.java", buf.toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testCalloutToStatic() throws Exception
+ {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" private static void testB1() { }");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" abstract static void test();");
+ buf.append(" void test() -> void testB1();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" abstract static void test();");
+ buf.append(" void test() -> void testB1();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+
+ // invoke a second time to produce https://svn.objectteams.org/trac/ot/ticket/2
+ op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testStaticImportInGuard1() throws CoreException, BackingStoreException {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" private static void testB1() { }");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import static java.lang.Math.max;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 when (max(1,2)==2) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import static java.lang.Math.max;\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 when (max(1,2)==2) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testStaticImportInGuard2() throws CoreException, BackingStoreException {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append(" void testB1() { }");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import static java.lang.Math.max;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" void rm() { }\n");
+ buf.append(" rm <- after test\n");
+ buf.append(" base when (max(1,2)==2);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import static java.lang.Math.max;\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R1 playedBy B1 {\n");
+ buf.append(" void rm() { }\n");
+ buf.append(" rm <- after test\n");
+ buf.append(" base when (max(1,2)==2);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ // Trac 19: organize imports must preserve a base import,
+ // even if role and base have the same name and the role
+ // is also referenced from a sibling role.
+ public void testRoleHidesBase1() throws CoreException, BackingStoreException {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper
+ .addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public class B1 {\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("B1.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R2 {\n");
+ buf.append(" B1 other;\n");
+ buf.append(" }\n");
+ buf.append(" public class B1 playedBy B1 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import base basePkg.B1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R2 {\n");
+ buf.append(" B1 other;\n");
+ buf.append(" }\n");
+ buf.append(" public class B1 playedBy B1 {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ public void testImportRole() throws CoreException, BackingStoreException {
+ IPackageFragmentRoot sourceFolder = JavaProjectHelper.addSourceContainer(_project, "src");
+
+ IPackageFragment basePkg = sourceFolder.createPackageFragment(
+ "basePkg",
+ false,
+ null);
+ StringBuffer buf = new StringBuffer();
+ buf.append("package basePkg;\n");
+ buf.append("public team class BaseTeam {\n");
+ buf.append(" public class BaseRole {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ basePkg.createCompilationUnit("BaseTeam.java", buf.toString(), false, null);
+
+ IPackageFragment teamPkg = sourceFolder.createPackageFragment(
+ "teamPkg",
+ false,
+ null);
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import basePkg.BaseTeam;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" BaseTeam t;\n");
+ buf.append(" BaseRole r;\n");
+ buf.append("}\n");
+ ICompilationUnit cu = teamPkg.createCompilationUnit("T1.java", buf
+ .toString(), false, null);
+
+ String[] order = new String[0];
+ IChooseImportQuery query = createQuery(
+ "T1",
+ new String[] {},
+ new int[] {});
+
+ OrganizeImportsOperation op = createOperation(cu, order,
+ 99, false, true, true, query);
+ op.run(null);
+
+ buf = new StringBuffer();
+ buf.append("package teamPkg;\n");
+ buf.append("import basePkg.BaseTeam;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" BaseTeam t;\n");
+ buf.append(" BaseRole r;\n");
+ buf.append("}\n");
+ assertEqualString(cu.getSource(), buf.toString());
+ }
+
+ private OrganizeImportsOperation createOperation(ICompilationUnit cu, String[] order, int threshold, boolean ignoreLowerCaseNames, boolean save, boolean doResolve, IChooseImportQuery chooseImportQuery) throws CoreException, BackingStoreException {
+ setOrganizeImportSettings(order, threshold, threshold, cu.getJavaProject());
+ return new OrganizeImportsOperation(cu, null, ignoreLowerCaseNames, save, doResolve, chooseImportQuery);
+ }
+
+ private void setOrganizeImportSettings(String[] order, int threshold, int staticThreshold, IJavaProject project) throws BackingStoreException {
+ IEclipsePreferences scope= new ProjectScope(project.getProject()).getNode(JavaUI.ID_PLUGIN);
+ if (order == null) {
+ scope.remove(PreferenceConstants.ORGIMPORTS_IMPORTORDER);
+ scope.remove(PreferenceConstants.ORGIMPORTS_ONDEMANDTHRESHOLD);
+ } else {
+ StringBuffer buf= new StringBuffer();
+ for (int i= 0; i < order.length; i++) {
+ buf.append(order[i]);
+ buf.append(';');
+ }
+ scope.put(PreferenceConstants.ORGIMPORTS_IMPORTORDER, buf.toString());
+ scope.put(PreferenceConstants.ORGIMPORTS_ONDEMANDTHRESHOLD, String.valueOf(threshold));
+ }
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ProjectTestSetup.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ProjectTestSetup.java
new file mode 100644
index 0000000..f9cf3e0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ProjectTestSetup.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * 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
+ * $Id: ProjectTestSetup.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * Fraunhofer FIRST - extended API and implementation
+ * Technical University Berlin - extended API and implementation
+ *******************************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.util.CoreUtility;
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+import org.eclipse.jdt.testplugin.TestOptions;
+import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin;
+
+//{OT_COPY_PASTE: Copy of class org.eclipse.jdt.ui.tests.core.ProjectTestSetup
+/**
+ * Sets up an 1.5 project with rtstubs15.jar and compiler, code formatting, code generation, and template options.
+ */
+public class ProjectTestSetup extends TestSetup {
+
+ public static final String PROJECT_NAME= "TestSetupProject";
+
+ public static IJavaProject getProject() {
+ IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME);
+ return JavaCore.create(project);
+ }
+
+ public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+ IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_15);
+//{ObjectTeams: OTRE:
+ IPath otrePath = new Path("OTRE");
+/* orig:
+ return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], true) };
+ :giro */
+ return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], true), JavaCore.newContainerEntry(otrePath) };
+// SH}
+ }
+
+
+ private IJavaProject fJProject;
+
+ private boolean fAutobuilding;
+
+ public ProjectTestSetup(Test test) {
+ super(test);
+ }
+
+ /* (non-Javadoc)
+ * @see junit.extensions.TestSetup#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ IJavaProject project= getProject();
+ if (project.exists()) { // allow nesting of ProjectTestSetups
+ return;
+ }
+
+ fAutobuilding = CoreUtility.setAutoBuilding(false);
+//{ObjectTeams: create an OT project and keep otre.jar (don't overwrite with setRawClasspath)
+/* orig:
+ fJProject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
+ fJProject.setRawClasspath(getDefaultClasspath(), null);
+ :giro */
+ fJProject = org.eclipse.objectteams.otdt.ui.tests.util.JavaProjectHelper.createOTJavaProject(PROJECT_NAME, "bin");
+ JavaProjectHelper.addRTJar(fJProject);
+//gbr}
+
+ TestOptions.initializeProjectOptions(fJProject);
+
+ JavaCore.setOptions(TestOptions.getDefaultOptions());
+ TestOptions.initializeCodeGenerationOptions();
+ JavaPlugin.getDefault().getCodeTemplateStore().load();
+ }
+
+ protected void tearDown() throws Exception {
+ if (fJProject != null) {
+ JavaProjectHelper.delete(fJProject);
+ CoreUtility.setAutoBuilding(fAutobuilding);
+ }
+ }
+
+}
+//gbr}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ProposalAdaptor.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ProposalAdaptor.java
new file mode 100644
index 0000000..8dc509d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/ProposalAdaptor.java
@@ -0,0 +1,42 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: ProposalAdaptor.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+
+import base org.eclipse.jdt.internal.ui.text.java.ParameterGuessingProposal;
+
+public team class ProposalAdaptor {
+
+ /** Just decapsulate one private field ;-) */
+ protected class GuessingProposal playedBy ParameterGuessingProposal {
+
+ @SuppressWarnings("decapsulation")
+ protected
+ ICompletionProposal[][] getFChoices() -> get ICompletionProposal[][] fChoices;
+
+ }
+ /** API */
+ public ICompletionProposal[][] getChoices(ParameterGuessingProposal as GuessingProposal proposal) {
+ return proposal.getFChoices();
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/StringAsserts.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/StringAsserts.java
new file mode 100644
index 0000000..d432854
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/StringAsserts.java
@@ -0,0 +1,200 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: StringAsserts.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import junit.framework.Assert;
+
+/**
+ * @author brcan
+ */
+public class StringAsserts
+{
+
+ public StringAsserts()
+ {
+ super();
+ }
+
+ private static int getDiffPos(String str1, String str2)
+ {
+ int len1 = Math.min(str1.length(), str2.length());
+
+ int diffPos = -1;
+ for (int i = 0; i < len1; i++)
+ {
+ if (str1.charAt(i) != str2.charAt(i))
+ {
+ diffPos = i;
+ break;
+ }
+ }
+ if (diffPos == -1 && str1.length() != str2.length())
+ {
+ diffPos = len1;
+ }
+ return diffPos;
+ }
+
+ private static final int printRange = 6;
+
+ public static void assertEqualString(String actual, String expected)
+ {
+ if (actual == null || expected == null)
+ {
+ if (actual == expected)
+ {
+ return;
+ }
+ if (actual == null)
+ {
+ Assert.assertTrue(
+ "Content not as expected: is 'null' expected: " + expected, false);
+ }
+ else
+ {
+ Assert.assertTrue(
+ "Content not as expected: expected 'null' is: " + actual, false);
+ }
+ }
+
+ int diffPos = getDiffPos(actual, expected);
+ if (diffPos != -1)
+ {
+ int diffAhead = Math.max(0, diffPos - printRange);
+ int diffAfter = Math.min(actual.length(), diffPos + printRange);
+
+ String diffStr = actual.substring(diffAhead, diffPos) + '^'
+ + actual.substring(diffPos, diffAfter);
+
+ // use detailed message
+ String message = "Content not as expected: is\n" + actual + "\nDiffers at pos " + diffPos + ": " + diffStr + "\nexpected:\n" + expected;
+
+ Assert.assertEquals(message, expected, actual);
+ }
+ }
+
+ public static void assertEqualStringIgnoreDelim(String actual, String expected)
+ throws IOException
+ {
+ if (actual == null || expected == null)
+ {
+ if (actual == expected)
+ {
+ return;
+ }
+ if (actual == null)
+ {
+ Assert.assertTrue(
+ "Content not as expected: is 'null' expected: " + expected, false);
+ }
+ else
+ {
+ Assert.assertTrue(
+ "Content not as expected: expected 'null' is: " + actual, false);
+ }
+ }
+
+ BufferedReader read1 = new BufferedReader(new StringReader(actual));
+ BufferedReader read2 = new BufferedReader(new StringReader(expected));
+
+ int line = 1;
+ do
+ {
+ String s1 = read1.readLine();
+ String s2 = read2.readLine();
+
+ if (s1 == null || !s1.equals(s2))
+ {
+ if (s1 == null && s2 == null)
+ {
+ return;
+ }
+ String diffStr = (s1 == null) ? s2 : s1;
+
+ String message = "Content not as expected: Content is: \n"
+ + actual + "\nDiffers at line " + line + ": " + diffStr
+ + "\nExpected contents: \n" + expected;
+ Assert.assertEquals(message, expected, actual);
+ }
+ line++;
+ }
+ while (true);
+ }
+
+ public static void assertEqualStringsIgnoreOrder(String[] actuals, String[] expecteds)
+ {
+ ArrayList<String> list1 = new ArrayList<String>(Arrays.asList(actuals));
+ ArrayList<String> list2 = new ArrayList<String>(Arrays.asList(expecteds));
+
+ for (int i = list1.size() - 1; i >= 0; i--)
+ {
+ if (list2.remove(list1.get(i)))
+ {
+ list1.remove(i);
+ }
+ }
+
+ int n1 = list1.size();
+ int n2 = list2.size();
+
+ if (n1 + n2 > 0)
+ {
+ if (n1 == 1 && n2 == 1)
+ {
+ assertEqualString((String) list1.get(0), (String) list2.get(0));
+ }
+
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < n1; i++)
+ {
+ String s1 = (String) list1.get(i);
+ if (s1 != null)
+ {
+ buf.append(s1);
+ buf.append("\n");
+ }
+ }
+ String actual = buf.toString();
+
+ buf = new StringBuffer();
+ for (int i = 0; i < n2; i++)
+ {
+ String s2 = (String) list2.get(i);
+ if (s2 != null)
+ {
+ buf.append(s2);
+ buf.append("\n");
+ }
+ }
+ String expected = buf.toString();
+
+ String message = "Content not as expected: Content is: \n" + actual
+ + "\nExpected contents: \n" + expected;
+ Assert.assertEquals(message, expected, actual);
+ }
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/UnresolvedMethodsQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/UnresolvedMethodsQuickFixTest.java
new file mode 100644
index 0000000..c8acb53
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/UnresolvedMethodsQuickFixTest.java
@@ -0,0 +1,536 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: UnresolvedMethodsQuickFixTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.core;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
+import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.CUCorrectionProposal;
+import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+
+/**
+ * Testing corrections for unresolved methods in OT specific contexts.
+ * @author stephan
+ * @since 1.2.1
+ */
+public class UnresolvedMethodsQuickFixTest extends OTQuickFixTest {
+ private static final Class THIS= UnresolvedMethodsQuickFixTest.class;
+
+ public UnresolvedMethodsQuickFixTest(String name) {
+ super(name);
+ }
+
+ public static Test allTests() {
+ return setUpTest(new TestSuite(THIS));
+ }
+
+ public static Test suite() {
+ return allTests();
+ }
+
+ public static Test setUpTest(Test test) {
+ return new ProjectTestSetup(test);
+ }
+
+ @Override
+ protected void addOptions(Hashtable options) {
+ super.addOptions(options);
+ IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
+ store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
+
+ StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
+ StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
+ }
+
+ public void testMethodInSameType() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" void foo(Vector vec) {\n");
+ buf.append(" int i= goo(vec, true);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" void foo(Vector vec) {\n");
+ buf.append(" int i= goo(vec, true);\n");
+ buf.append(" }\n");
+ buf.append("\n");
+ buf.append(" private int goo(Vector vec, boolean b) {\n");
+ buf.append(" return 0;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+
+ proposal= (CUCorrectionProposal) proposals.get(1);
+ preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" void foo(Vector vec) {\n");
+ buf.append(" int i= goo(vec, true);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("\n");
+ buf.append(" public int goo(Vector vec, boolean b) {\n");
+ buf.append(" return 0;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ public void testMethodInDifferentClass1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("public team class T {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" void foo(Vector vec, R2 r) {\n");
+ buf.append(" int i= r.goo(vec, true);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("team package test1.T;\n");
+ buf.append("public class R2 {\n");
+ buf.append("}\n");
+ IPackageFragment pack1T= fSourceFolder.createPackageFragment("test1.T", false, null);
+ pack1T.createCompilationUnit("R2.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 2); // 2nd proposal not really useful (cast to Object??)
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("team package test1.T;\n");
+ buf.append("\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("\n");
+ buf.append("public class R2 {\n");
+ buf.append("\n");
+ buf.append(" public int goo(Vector vec, boolean b) {\n");
+ buf.append(" return 0;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ /* See Trac #12 */
+ public void testMethodInDifferentClass2() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("public team class T2 {\n");
+ buf.append(" public class R2 {\n");
+ buf.append(" void foo(final T1 t1, R<@t1> r, Vector vec) {\n");
+ buf.append(" int i= r.goo(vec, true);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T2.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 2); // 2nd proposal not really useful (cast to Object??)
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R {\n");
+ buf.append("\n");
+ buf.append(" public int goo(Vector vec, boolean b) {\n");
+ buf.append(" return 0;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+ public void testTSuperConstructor() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T2 extends T1 {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" public R(int i) {\n");
+ buf.append(" tsuper(i);\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu1=pack1.createCompilationUnit("T2.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu1);
+ ArrayList proposals= collectCorrections(cu1, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview1= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" protected class R {\n");
+ buf.append("\n");
+ buf.append(" public R(int i) {\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ proposal= (CUCorrectionProposal) proposals.get(1);
+ String preview2= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T2 extends T1 {\n");
+ buf.append(" protected class R {\n");
+ buf.append(" public R(int i) {\n");
+ buf.append(" tsuper();\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
+
+ }
+
+ // static callin method created
+ public void testCallinMethod1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B {\n");
+ buf.append(" static void foo(int i) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R playedBy B {\n");
+ buf.append(" void voo(int j) <- replace void foo(int i);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1); // don't propose to generate into team!!
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R playedBy B {\n");
+ buf.append(" void voo(int j) <- replace void foo(int i);\n");
+ buf.append(" static callin void voo(int j) {\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+ // non-static callin method created
+ public void testCallinMethod2() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class B {\n");
+ buf.append(" String foo(int i, Boolean b) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("B.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R playedBy B {\n");
+ buf.append(" String voo(int j, Boolean b) <- replace String foo(int i, Boolean b);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("T1.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot);
+ assertNumberOfProposals(proposals, 1); // don't propose to generate into team!!
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public team class T1 {\n");
+ buf.append(" public class R playedBy B {\n");
+ buf.append(" String voo(int j, Boolean b) <- replace String foo(int i, Boolean b);\n");
+ buf.append(" callin String voo(int j, Boolean b) {\n");
+ buf.append(" return null;\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
+
+/* some orig tests for use in OT-variants:
+
+ public void testClassInstanceCreation() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" A a= new A(i);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class A {\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu1);
+ ArrayList proposals= collectCorrections(cu1, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview1= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class A {\n");
+ buf.append("\n");
+ buf.append(" public A(int i) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ proposal= (CUCorrectionProposal) proposals.get(1);
+ String preview2= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" A a= new A();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
+ }
+
+ public void testClassInstanceCreation2() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" A a= new A(\"test\");\n");
+ buf.append(" }\n");
+ buf.append(" class A {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu1);
+ ArrayList proposals= collectCorrections(cu1, astRoot);
+ assertNumberOfProposals(proposals, 2);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview1= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" A a= new A(\"test\");\n");
+ buf.append(" }\n");
+ buf.append(" class A {\n");
+ buf.append("\n");
+ buf.append(" public A(String string) {\n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ proposal= (CUCorrectionProposal) proposals.get(1);
+ String preview2= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" A a= new A();\n");
+ buf.append(" }\n");
+ buf.append(" class A {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
+ }
+
+
+ public void testConstructorInvocation() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public E(int i) {\n");
+ buf.append(" this(i, true);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu1);
+ ArrayList proposals= collectCorrections(cu1, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview1= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E {\n");
+ buf.append(" public E(int i) {\n");
+ buf.append(" this(i, true);\n");
+ buf.append(" }\n");
+ buf.append("\n");
+ buf.append(" public E(int i, boolean b) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ assertEqualString(preview1, expected1);
+ }
+
+
+ public void testSuperMethodInvocation() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class E extends A {\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" super.foo(i);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class A {\n");
+ buf.append("}\n");
+ pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu1);
+ ArrayList proposals= collectCorrections(cu1, astRoot);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public class A {\n");
+ buf.append("\n");
+ buf.append(" public void foo(int i) {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+
+ }
+*/
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/AllTests.java
new file mode 100644
index 0000000..c617a89
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/AllTests.java
@@ -0,0 +1,42 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author ike
+ *
+ * $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class AllTests {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(
+ "Test for org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider");
+ //$JUnit-BEGIN$
+ suite.addTest(OTSubHierarchyContentProviderTests.suite());
+ suite.addTest(SuperHierarchyContentProviderTests.suite());
+ //$JUnit-END$
+ return suite;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/Comparator.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/Comparator.java
new file mode 100644
index 0000000..16c1620
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/Comparator.java
@@ -0,0 +1,27 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: Comparator.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider;
+
+
+public interface Comparator
+{
+ public boolean same(Object o1, Object o2);
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/ITypeComparator.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/ITypeComparator.java
new file mode 100644
index 0000000..927c999
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/ITypeComparator.java
@@ -0,0 +1,41 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: ITypeComparator.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider;
+
+import org.eclipse.jdt.core.IType;
+
+
+public class ITypeComparator implements Comparator
+{
+ public boolean same(Object o1, Object o2)
+ {
+ if(o1 == null && o2 == null)
+ {
+ return true;
+ }
+ if((o1 == null || o2 == null)
+ || !(o1 instanceof IType && o2 instanceof IType))
+ {
+ return false;
+ }
+ return ((IType)o1).equals((IType)o2) ;
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/OTSubHierarchyContentProviderTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/OTSubHierarchyContentProviderTests.java
new file mode 100644
index 0000000..6a76f9f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/OTSubHierarchyContentProviderTests.java
@@ -0,0 +1,366 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: OTSubHierarchyContentProviderTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.typehierarchy.SubTypeHierarchyViewer;
+import org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+
+/**
+ * @author haebor
+ *
+ * 18.07.2005
+ */
+public class OTSubHierarchyContentProviderTests extends FileBasedUITest
+{
+ private static final String FAKED_PLUGIN_ID = "org.eclipse.objectteams.otdt.tests";
+
+ private static final String PROJECT_DIR = "Hierarchy";
+ private static final String SRC_FOLDER = "src";
+
+ private SubTypeHierarchyViewer.SubTypeHierarchyContentProvider _testObject;
+ //call doHierarchyRefresh(IJavaElement element, null) on _lifeCycle
+ //to create a hierarchy on element.
+ private TypeHierarchyLifeCycle _lifeCycle;
+
+ private IType _T1;
+ private IType _T2;
+ private IType _T3;
+ private IType _T4;
+ private IType _T5;
+ private IType _T6;
+ private IType _T7;
+ private IType _T8;
+
+ private IType _T1_R1;
+ private IType _T1_R2;
+
+ private IType _T2_R1;
+ private IType _T2_R2;
+
+ private IType _T3_R1;
+ private IType _T3_R2;
+
+ private IType _T4_R2;
+
+ private IType _T5_R1;
+ private IType _T5_R2;
+ private IType _T5_R3;
+
+ private IType _T6_R1;
+
+ private IType _T7_R2;
+ private IType _T7_R3;
+
+ private IType _T8_R2;
+
+ private IType[] _allTypesInProject;
+
+
+ public OTSubHierarchyContentProviderTests(String name)
+ {
+ super(name);
+ }
+
+ protected String getPluginID()
+ {
+ //overwrites the ID because tests are using the
+ //workspace of org.eclipse.objectteams.otdt.tests
+ return FAKED_PLUGIN_ID;
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return new Suite(OTSubHierarchyContentProviderTests.class);
+ }
+ junit.framework.TestSuite suite = new Suite(OTSubHierarchyContentProviderTests.class
+ .getName());
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir(PROJECT_DIR);
+
+ super.setUpSuite();
+
+
+ String pkg = "test001";
+
+ _T1 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T1");
+
+ _T2 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T2");
+
+ _T3 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T3");
+
+
+ _T4 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T4");
+
+ _T5 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5");
+
+ _T6 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T6");
+
+
+ _T7 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T7");
+
+ _T8 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T8");
+
+ _T1_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T1",
+ "R1").getCorrespondingJavaElement();
+
+ _T1_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T1",
+ "R2").getCorrespondingJavaElement();
+
+ _T2_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T2",
+ "R1").getCorrespondingJavaElement();
+
+ _T2_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T2",
+ "R2").getCorrespondingJavaElement();
+
+ _T3_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T3",
+ "R1").getCorrespondingJavaElement();
+
+ _T3_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T3",
+ "R2").getCorrespondingJavaElement();
+
+ _T4_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T4",
+ "R2").getCorrespondingJavaElement();
+
+ _T5_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5",
+ "R1").getCorrespondingJavaElement();
+
+ _T5_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5",
+ "R2").getCorrespondingJavaElement();
+
+ _T5_R3 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5",
+ "R3").getCorrespondingJavaElement();
+
+ _T6_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T6",
+ "R1").getCorrespondingJavaElement();
+
+ _T7_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T7",
+ "R2").getCorrespondingJavaElement();
+
+ _T7_R3 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T7",
+ "R3").getCorrespondingJavaElement();
+
+ _T8_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T8",
+ "R2").getCorrespondingJavaElement();
+
+
+ _allTypesInProject = new IType[]
+ {
+ _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8,
+ _T1_R1, _T1_R2,
+ _T2_R1, _T2_R2,
+ _T3_R1, _T3_R2,
+ _T4_R2,
+ _T5_R1, _T5_R2, _T5_R3,
+ _T6_R1,
+ _T7_R2, _T7_R3,
+ _T8_R2
+ };
+ _lifeCycle = new TypeHierarchyLifeCycle(false);
+ _testObject =
+ new SubTypeHierarchyViewer.SubTypeHierarchyContentProvider(
+ _lifeCycle);
+ }
+
+ public void testHierarchyCreated()
+ {
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T1_R1, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ }
+
+ ITypeHierarchy hierarchy = _lifeCycle.getHierarchy();
+ assertNotNull(hierarchy);
+ }
+
+ public void testGetParentAlwaysNull()
+ {
+ Object expected = null;
+ Object actual;
+
+ for (int idx = 0; idx < _allTypesInProject.length; idx++)
+ {
+ IType cur = _allTypesInProject[idx];
+ actual = _testObject.getParent(cur);
+ assertEquals("Parent not null for " + cur.getElementName() + " ", expected, actual);
+ }
+ }
+
+ public void testRecursiveGetChildren_T1R1()
+ {
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T1_R1, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ }
+
+ TreeNode actualRoot;
+ TreeNode expectedRoot;
+
+ //pretty ugly, maybe replace this with an automatic hierarchy creation
+ //that generates the hierarchy according to some String or with the help
+ //of an array of types that denotes a path :-I
+ expectedRoot = new TreeNode(_T1_R1);
+
+ expectedRoot.setChildrenByElements(new Object[] {_T2_R1});
+
+ expectedRoot.getChildNode(_T2_R1).setChildrenByElements(new Object[] {_T2_R2, _T3_R1, _T5_R1, _T6_R1, _T4_R2});
+
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T2_R2).setChildrenByElements(new Object[] {_T3_R2, _T4_R2, _T5_R2, _T8_R2});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T3_R1).setChildrenByElements(new Object[] {_T3_R2});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T5_R1).setChildrenByElements(new Object[] {_T5_R3, _T7_R3});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T6_R1).setChildrenByElements(new Object[] {_T8_R2, _T2_R2});
+
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T2_R2).getChildNode(_T5_R2).setChildrenByElements(new Object[] {_T7_R2});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T5_R1).getChildNode(_T5_R3).setChildrenByElements(new Object[] {_T7_R3, _T5_R2});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T5_R1).getChildNode(_T7_R3).setChildrenByElements(new Object[] {_T7_R2});
+
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T5_R1).getChildNode(_T5_R3).getChildNode(_T7_R3).setChildrenByElements(new Object[] {_T7_R2});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T5_R1).getChildNode(_T5_R3).getChildNode(_T5_R2).setChildrenByElements(new Object[] {_T7_R2});
+
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T6_R1).getChildNode(_T2_R2).setChildrenByElements(new Object[] {_T3_R2, _T5_R2, _T4_R2, _T8_R2});
+ expectedRoot.getChildNode(_T2_R1).getChildNode(_T6_R1).getChildNode(_T2_R2).getChildNode(_T5_R2).setChildrenByElements(new Object[]{_T7_R2});
+
+ actualRoot = fillTree(_testObject, new TreeNode(_T1_R1));
+
+ assertTrue("Hierarchy trees don't match", expectedRoot.equalsAsserted(actualRoot, new ITypeComparator(), 0));
+ }
+
+ private TreeNode fillTree(ITreeContentProvider contentProvider, TreeNode curNode)
+ {
+ Object[] children = contentProvider.getChildren(curNode.getElement());
+ TreeNode[] treeChildren = curNode.setChildrenByElements(children);
+
+ for (int idx = 0; idx < treeChildren.length; idx++)
+ {
+ fillTree(contentProvider, treeChildren[idx]);
+ }
+ return curNode;
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/SuperHierarchyContentProviderTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/SuperHierarchyContentProviderTests.java
new file mode 100644
index 0000000..7d7570b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/SuperHierarchyContentProviderTests.java
@@ -0,0 +1,464 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: SuperHierarchyContentProviderTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.typehierarchy.SuperTypeHierarchyViewer;
+import org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+
+/**
+ * @author haebor
+ *
+ * 18.07.2005
+ */
+public class SuperHierarchyContentProviderTests extends FileBasedUITest
+{
+ private static final String FAKED_PLUGIN_ID = "org.eclipse.objectteams.otdt.tests";
+
+ private static final String PROJECT_DIR = "Hierarchy";
+ private static final String SRC_FOLDER = "src";
+
+ private SuperTypeHierarchyViewer.SuperTypeHierarchyContentProvider _testObject;
+ //call doHierarchyRefresh(IJavaElement element, null) on _lifeCycle
+ //to create a hierarchy on element.
+ private TypeHierarchyLifeCycle _lifeCycle;
+
+ private IType _objectType;
+
+ private IType _T1;
+ private IType _T2;
+ private IType _T3;
+ private IType _T4;
+ private IType _T5;
+ private IType _T6;
+ private IType _T7;
+ private IType _T8;
+
+ private IType _T1_R1;
+ private IType _T1_R2;
+
+ private IType _T2_R1;
+ private IType _T2_R2;
+
+ private IType _T3_R1;
+ private IType _T3_R2;
+
+ private IType _T4_R2;
+
+ private IType _T5_R1;
+ private IType _T5_R2;
+ private IType _T5_R3;
+
+ private IType _T6_R1;
+
+ private IType _T7_R2;
+ private IType _T7_R3;
+
+ private IType _T8_R2;
+
+ private IType[] _allTypesInProject;
+
+
+ public SuperHierarchyContentProviderTests(String name)
+ {
+ super(name);
+ }
+
+ protected String getPluginID()
+ {
+ //overwrites the ID because tests are using the
+ //workspace of org.eclipse.objectteams.otdt.tests
+ return FAKED_PLUGIN_ID;
+ }
+
+ public static Test suite()
+ {
+ if (true)
+ {
+ return new Suite(SuperHierarchyContentProviderTests.class);
+ }
+ junit.framework.TestSuite suite = new Suite(SuperHierarchyContentProviderTests.class
+ .getName());
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir(PROJECT_DIR);
+
+ super.setUpSuite();
+
+
+ String pkg = "test001";
+
+ _T1 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T1");
+
+ _T2 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T2");
+
+ _T3 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T3");
+
+
+ _T4 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T4");
+
+ _T5 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5");
+
+ _T6 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T6");
+
+
+ _T7 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T7");
+
+ _T8 =
+ getType(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T8");
+
+ _objectType =
+ getType(getTestProjectDir(),
+ "rt.jar",
+ "java.lang",
+ "Object");
+
+ _T1_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T1",
+ "R1").getCorrespondingJavaElement();
+
+ _T1_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T1",
+ "R2").getCorrespondingJavaElement();
+
+ _T2_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T2",
+ "R1").getCorrespondingJavaElement();
+
+ _T2_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T2",
+ "R2").getCorrespondingJavaElement();
+
+ _T3_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T3",
+ "R1").getCorrespondingJavaElement();
+
+ _T3_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T3",
+ "R2").getCorrespondingJavaElement();
+
+ _T4_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T4",
+ "R2").getCorrespondingJavaElement();
+
+ _T5_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5",
+ "R1").getCorrespondingJavaElement();
+
+ _T5_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5",
+ "R2").getCorrespondingJavaElement();
+
+ _T5_R3 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T5",
+ "R3").getCorrespondingJavaElement();
+
+ _T6_R1 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T6",
+ "R1").getCorrespondingJavaElement();
+
+ _T7_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T7",
+ "R2").getCorrespondingJavaElement();
+
+ _T7_R3 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T7",
+ "R3").getCorrespondingJavaElement();
+
+ _T8_R2 = (IType)
+ getRole(getTestProjectDir(),
+ SRC_FOLDER,
+ pkg,
+ "T8",
+ "R2").getCorrespondingJavaElement();
+
+
+ _allTypesInProject = new IType[]
+ {
+ _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8,
+ _T1_R1, _T1_R2,
+ _T2_R1, _T2_R2,
+ _T3_R1, _T3_R2,
+ _T4_R2,
+ _T5_R1, _T5_R2, _T5_R3,
+ _T6_R1,
+ _T7_R2, _T7_R3,
+ _T8_R2
+ };
+ _lifeCycle = new TypeHierarchyLifeCycle(true);
+ _testObject =
+ new SuperTypeHierarchyViewer.SuperTypeHierarchyContentProvider(
+ _lifeCycle);
+
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T5_R3, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ fail("JavaModelException while refreshing hierarchy");
+ }
+ }
+
+ public void testHierarchyCreated()
+ {
+ ITypeHierarchy hierarchy = _lifeCycle.getHierarchy();
+ assertNotNull(hierarchy);
+ }
+
+ public void testGetParentAlwaysNull()
+ {
+ Object expected = null;
+ Object actual;
+
+ for (int idx = 0; idx < _allTypesInProject.length; idx++)
+ {
+ IType cur = _allTypesInProject[idx];
+ actual = _testObject.getParent(cur);
+ assertEquals("Parent not null for " + cur.getElementName() + " ", expected, actual);
+ }
+ }
+
+ public void testGetChildren_T5R3()
+ {
+ IType[] expected = new IType[]{ _T5_R1 };
+ IType[] actual = castToIType(_testObject.getChildren(_T5_R3));
+
+ assertTrue("Wrong supertypes", compareTypes(expected, actual));
+ }
+
+ public void testGetChildren_T3R2()
+ {
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T3_R2, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ fail("JavaModelException while refreshing hierarchy");
+ }
+
+ IType[] expected = new IType[]{ _T3_R1, _T2_R2 };
+ IType[] actual = castToIType(_testObject.getChildren(_T3_R2));
+
+ assertTrue("Wrong supertypes", compareTypes(expected, actual));
+ }
+
+ public void testGetChildren_T1R2()
+ {
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T1_R2, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ fail("JavaModelException while refreshing hierarchy");
+ }
+
+ IType[] expected = new IType[]{ _objectType };
+ IType[] actual = castToIType(_testObject.getChildren(_T1_R2));
+
+ assertTrue("Wrong supertypes", compareTypes(expected, actual));
+ }
+
+ public void testGetChildren_T8R2()
+ {
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T8_R2, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ fail("JavaModelException while refreshing hierarchy");
+ }
+
+ IType[] expected = new IType[]{ _T6_R1, _T2_R2 };
+ IType[] actual = castToIType(_testObject.getChildren(_T8_R2));
+
+ assertTrue("Wrong supertypes", compareTypes(expected, actual));
+ }
+
+ public void testRecursiveGetChildren_T7R3()
+ {
+ try
+ {
+ _lifeCycle.doHierarchyRefresh(_T7_R3, new NullProgressMonitor());
+ }
+ catch (JavaModelException exc)
+ {
+ exc.printStackTrace();
+ fail("JavaModelException while refreshing hierarchy");
+ }
+
+ TreeNode actualRoot;
+ TreeNode expectedRoot;
+
+ //pretty ugly, maybe replace this with an automatic hierarchy creation
+ //that generates the hierarchy according to some String or with the help
+ //of an array of types that denotes a path :-I
+ expectedRoot = new TreeNode(_T7_R3);
+
+ expectedRoot.setChildrenByElements(new Object[] {_T5_R1, _T5_R3});
+ expectedRoot.getChildNode(_T5_R1).setChildrenByElements(new Object[] {_T2_R1, _objectType});
+ expectedRoot.getChildNode(_T5_R3).setChildrenByElements(new Object[] {_T5_R1});
+
+ expectedRoot.getChildNode(_T5_R1).getChildNode(_T2_R1).setChildrenByElements(new Object[] {_T1_R1, _objectType});
+ expectedRoot.getChildNode(_T5_R3).getChildNode(_T5_R1).setChildrenByElements(new Object[] {_T2_R1, _objectType});
+
+ expectedRoot.getChildNode(_T5_R3).getChildNode(_T5_R1).getChildNode(_T2_R1).setChildrenByElements(new Object[] {_T1_R1, _objectType});
+
+ expectedRoot.getChildNode(_T5_R1).getChildNode(_T2_R1).getChildNode(_T1_R1).setChildrenByElements(new Object[] {_objectType});
+
+ expectedRoot.getChildNode(_T5_R3).getChildNode(_T5_R1).getChildNode(_T2_R1).getChildNode(_T1_R1).setChildrenByElements(new Object[] {_objectType});
+
+
+ actualRoot = fillTree(_testObject, new TreeNode(_T7_R3));
+
+ assertTrue("Hierarchy trees don't match", expectedRoot.equalsAsserted(actualRoot, new ITypeComparator(), 0));
+ }
+
+// test looks quite incomplete!?
+// public void testOwnMethods_T8R2()
+// {
+// try
+// {
+// _lifeCycle.doHierarchyRefresh(_T8_R2, new NullProgressMonitor());
+// }
+// catch (JavaModelException exc)
+// {
+// exc.printStackTrace();
+// fail("JavaModelException while refreshing hierarchy");
+// }
+//
+// assertTrue("Wrong methods", false);
+// }
+
+ private TreeNode fillTree(ITreeContentProvider contentProvider, TreeNode curNode)
+ {
+ Object[] children = contentProvider.getChildren(curNode.getElement());
+ TreeNode[] treeChildren = curNode.setChildrenByElements(children);
+
+ for (int idx = 0; idx < treeChildren.length; idx++)
+ {
+ fillTree(contentProvider, treeChildren[idx]);
+ }
+ return curNode;
+ }
+
+ private IType[] castToIType(Object[] types)
+ {
+ if(types == null)
+ {
+ return null;
+ }
+ IType[] result = new IType[types.length];
+
+ for (int idx = 0; idx < types.length; idx++)
+ {
+ result[idx] = (IType)types[idx];
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/TreeNode.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/TreeNode.java
new file mode 100644
index 0000000..e4a5edf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/hierarchy/contentprovider/TreeNode.java
@@ -0,0 +1,120 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: TreeNode.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.hierarchy.contentprovider;
+
+import java.util.HashMap;
+
+import org.eclipse.objectteams.otdt.tests.FileBasedTest;
+
+
+
+public class TreeNode
+{
+ private HashMap<Object, TreeNode> _children; //keys: elements, values: TreeNodes
+ private Object _element;
+
+ public TreeNode(Object element)
+ {
+ _element = element;
+ _children = new HashMap<Object, TreeNode>();
+ }
+
+ public TreeNode getChildNode(Object element)
+ {
+ return _children.get(element);
+ }
+
+ public TreeNode[] setChildrenByElements(Object[] childrenElements)
+ {
+ if(childrenElements == null)
+ {
+ return null;
+ }
+ for (int idx = 0; idx < childrenElements.length; idx++)
+ {
+ _children.put(childrenElements[idx], new TreeNode(childrenElements[idx]));
+ }
+ return getChildren();
+ }
+
+ public Object getElement()
+ {
+ return _element;
+ }
+
+ public TreeNode[] getChildren()
+ {
+ return _children.values().toArray(new TreeNode[_children.values().size()]);
+ }
+
+ public HashMap<Object, TreeNode> getChildrenMap()
+ {
+ return _children;
+ }
+
+ public Object[] getChildrenElements()
+ {
+ return _children.keySet().toArray();
+ }
+
+ public boolean equalsAsserted(TreeNode other, Comparator comp, int level)
+ {
+ if(!comp.same(_element, other.getElement()))
+ {
+ FileBasedTest.assertTrue("This tree element " + _element
+ + " is different from " + other.getElement()
+ + " at level: " + level, false);
+ return false;
+ }
+
+ HashMap<Object, TreeNode> othersChildren = other.getChildrenMap();
+ if(_children.size() != othersChildren.size())
+ {
+ FileBasedTest.assertEquals("this: " + _element + ", other: " + other.getElement() + " at level: "
+ + level, _children.size(), othersChildren.size());
+ return false;
+ }
+ if(_children.isEmpty())
+ {
+ return true;
+ }
+ Object[] childrenElements = _children.keySet().toArray();
+ for (int idx = 0; idx < childrenElements.length; idx++)
+ {
+ Object curChild = childrenElements[idx];
+ if(!othersChildren.containsKey(curChild))
+ {
+ FileBasedTest.assertTrue("Child " + curChild + " for parent " + other.getElement() + " at level " + level + " is missing", false);
+ return false;
+ }
+ }
+ level = level + 1;
+ for (int idx = 0; idx < childrenElements.length; idx++)
+ {
+ Object curChild = childrenElements[idx];
+ if(!_children.get(curChild).equalsAsserted(othersChildren.get(curChild), comp, level))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/AllInternalRoleCreationTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/AllInternalRoleCreationTests.java
new file mode 100644
index 0000000..3b37785
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/AllInternalRoleCreationTests.java
@@ -0,0 +1,97 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: AllInternalRoleCreationTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.typecreator;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.objectteams.otdt.tests.AbstractJavaModelTests;
+import org.eclipse.objectteams.otdt.tests.otmodel.TestDataHandler;
+import org.eclipse.objectteams.otdt.tests.otmodel.TestSetting;
+
+/**
+ * @author kaschja
+ * @version $Id: AllInternalRoleCreationTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class AllInternalRoleCreationTests extends TestCase
+{
+ public AllInternalRoleCreationTests(String name)
+ {
+ super(name);
+ }
+
+ public static Class[] getAllTestClasses()
+ {
+ return new Class[]
+ {
+ org.eclipse.objectteams.otdt.ui.tests.typecreator.RoleCreationTests.class
+ };
+ }
+
+ public static TestSetting getActualTestSetting()
+ {
+ return new TestSetting("CreationTestProject", "internaldefinedrole", "teampkg");
+ }
+
+ public static Test suite()
+ {
+ TestSuite ts = new TestSuite(AllInternalRoleCreationTests.class.getName());
+
+ Class[] testClasses = getAllTestClasses();
+ // Reset forgotten subsets of tests
+// AbstractJavaModelTests.testsNames = null;
+// AbstractJavaModelTests.testsNumbers = null;
+// AbstractJavaModelTests.testsRange = null;
+
+ for (int idx = 0; idx < testClasses.length; idx++)
+ {
+ Class testClass = testClasses[idx];
+
+ // call the suite() method and add the resulting suite to the suite
+ try
+ {
+ TestDataHandler.addTestSetting(testClass, getActualTestSetting());
+
+ Method suiteMethod = testClass.getDeclaredMethod(
+ "suite", new Class[0]); //$NON-NLS-1$
+ Test suite = (Test) suiteMethod.invoke(null, new Object[0]);
+ ts.addTest(suite);
+ }
+ catch (IllegalAccessException ex)
+ {
+ ex.printStackTrace();
+ }
+ catch (InvocationTargetException ex)
+ {
+ ex.getTargetException().printStackTrace();
+ }
+ catch (NoSuchMethodException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ return ts;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/AllTests.java
new file mode 100644
index 0000000..4b03858
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/AllTests.java
@@ -0,0 +1,45 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.typecreator;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author anklam
+ *
+ * @version $Id: AllTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class AllTests
+{
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite(
+ "All TypeCreation Tests");
+ //$JUnit-BEGIN$
+ suite.addTestSuite(NewTeamWizardPageListenerTest.class);
+ suite.addTest(RoleCreationTests.suite());
+ suite.addTest(TeamCreationTests.suite());
+ //$JUnit-END$
+ return suite;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/NewTeamWizardPageListenerTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/NewTeamWizardPageListenerTest.java
new file mode 100644
index 0000000..37e22cd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/NewTeamWizardPageListenerTest.java
@@ -0,0 +1,56 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: NewTeamWizardPageListenerTest.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.typecreator;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
+import org.eclipse.objectteams.otdt.internal.ui.wizards.NewTeamWizardPage;
+import org.eclipse.objectteams.otdt.internal.ui.wizards.listeners.NewTeamWizardPageListener;
+
+/**
+ * @author anklam
+ *
+ * $Id: NewTeamWizardPageListenerTest.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class NewTeamWizardPageListenerTest extends TestCase
+{
+ private NewTeamWizardPage _teamWizardPage;
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ _teamWizardPage = new NewTeamWizardPage();
+ NewTeamWizardPageListener listener = new NewTeamWizardPageListener(_teamWizardPage);
+ }
+
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ public void testValidateTypeName()
+ {
+ StringDialogField teamName = _teamWizardPage.getTypeNameDialogField();
+ // validateTypeName() is called indirectly after setText()
+ teamName.setText("TEST");
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java
new file mode 100644
index 0000000..460b3bd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java
@@ -0,0 +1,896 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: RoleCreationTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.typecreator;
+
+import java.util.ArrayList;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.objectteams.otdt.core.IOTType;
+import org.eclipse.objectteams.otdt.core.IRoleType;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.internal.ui.wizards.typecreation.RoleCreator;
+import org.eclipse.objectteams.otdt.internal.ui.wizards.typecreation.RoleTypeInfo;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+
+/**
+ * @author kaschja
+ * @version $Id: RoleCreationTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class RoleCreationTests extends FileBasedUITest
+{
+ /*this test class contains tests for internal defined roles*/
+ private static boolean DOINLINE = true;
+ private static String SRC_FOLDER_NAME = "internaldefinedrole";
+
+ private RoleCreator _roleCreator;
+
+
+ public RoleCreationTests(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ if (false)
+ {
+ Suite suite = new Suite(RoleCreationTests.class.getName());
+ suite.addTest(new RoleCreationTests("testRoleCreation_WithExplicitSuperClassAndInheritedMethod_FromSameTeam"));
+ return suite;
+ }
+ Suite suite = new Suite(RoleCreationTests.class);
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir("CreationTestProject");
+ super.setUpSuite();
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ _roleCreator = new RoleCreator();
+ }
+
+// /**
+// * only for debug purposes
+// * if created directory is not deleted after a test run
+// * the next test run will fail because the types to be created already exist
+// */
+// public void tearDownSuite()
+// {
+// //don't call super method, so created directory will not be deleted
+// }
+
+ private IType getJavaType(String projectName, String srcFolderName, String pkgName, String typeName) throws JavaModelException
+ {
+ ICompilationUnit typeUnit = getCompilationUnit(
+ projectName,
+ srcFolderName,
+ pkgName,
+ typeName +".java");
+ IType typeJavaElem = typeUnit.getType(typeName);
+
+ if ((typeJavaElem != null) && (typeJavaElem.exists()))
+ {
+ return typeJavaElem;
+ }
+ return null;
+ }
+
+ /**
+ * This method tests the creation of a simple role class (no super role, no super interface, no base class)
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_SimpleRole() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("SimpleRole", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForSimpleRole");
+ typeInfo.setInline(false);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForSimpleRole");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg.TeamForSimpleRole", "SimpleRole");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+ }
+
+ /**
+ * This method tests the creation of a simple role class (no super role, no super interface, no base class)
+ * initially the role's hosting team already contains one role class
+ */
+ public void testRoleCreation_SimpleRole_InTeamPreviouslyWithOneRole() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("SimpleRole", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForSimpleRole_PreviouslyWithOneRole");
+ typeInfo.setInline(DOINLINE);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForSimpleRole_PreviouslyWithOneRole");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("SimpleRole");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+ }
+
+ /**
+ * This method tests the creation of a simple role class (no super role, no super interface, no base class)
+ * initially the role's hosting team already contains several role classes
+ */
+ public void testRoleCreation_SimpleRole_InTeamPreviouslyWithSeveralRoles() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("SimpleRole", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForSimpleRole_PreviouslyWithTwoRoles");
+ typeInfo.setInline(DOINLINE);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForSimpleRole_PreviouslyWithTwoRoles");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("SimpleRole");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+ }
+
+ /**
+ * This method tests the creation of a role class that has one super interface
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_WithOneSuperInterface() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNameList = new ArrayList<String>();
+ interfaceNameList.add("ordinarypkg.InterfaceWithOneMethod");
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("RoleWithOneSuperInterface", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForRoleWithOneSuperInterface");
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperInterfacesNames(interfaceNameList);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithOneSuperInterface");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithOneSuperInterface");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ String[] interfaceNames = roleOTElem.getSuperInterfaceNames();
+ assertNotNull(interfaceNames);
+ assertTrue(interfaceNames.length == 1);
+ assertEquals("InterfaceWithOneMethod", interfaceNames[0]);
+
+ String[] interfacesSignatures = roleOTElem.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfacesSignatures);
+ assertTrue(interfacesSignatures.length == 1);
+ assertEquals("QInterfaceWithOneMethod;", interfacesSignatures[0]);
+ }
+
+ /**
+ * This method tests the creation of a role class that has several super interfaces
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_WithSeveralSuperInterfaces() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNameList = new ArrayList<String>();
+ interfaceNameList.add("ordinarypkg.InterfaceWithOneMethod");
+ interfaceNameList.add("ordinarypkg.InterfaceWithTwoMethods");
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("RoleWithSeveralSuperInterfaces", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForRoleWithSeveralSuperInterfaces");
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperInterfacesNames(interfaceNameList);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithSeveralSuperInterfaces");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithSeveralSuperInterfaces");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ String[] interfaceNames = roleOTElem.getSuperInterfaceNames();
+ assertNotNull(interfaceNames);
+ assertTrue(interfaceNames.length > 0);
+ assertTrue(interfaceNames.length == 2);
+ assertEquals("InterfaceWithOneMethod", interfaceNames[0]);
+ assertEquals("InterfaceWithTwoMethods", interfaceNames[1]);
+
+ String[] interfacesSignatures = roleOTElem.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfacesSignatures);
+ assertTrue(interfacesSignatures.length > 0);
+ assertTrue(interfacesSignatures.length == 2);
+ assertEquals("QInterfaceWithOneMethod;", interfacesSignatures[0]);
+ assertEquals("QInterfaceWithTwoMethods;", interfacesSignatures[1]);
+ }
+
+ /**
+ * This method tests the creation of a role class that has one super interface
+ * the role class should contain the abstract method that it inherits from its super interface
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_WithOneSuperInterfaceAndInheritedMethod() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNameList = new ArrayList<String>();
+ interfaceNameList.add("ordinarypkg.InterfaceWithOneMethod");
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("RoleWithSuperInterfaceAndInheritedMethod", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForRoleWithOneSuperInterfaceAndInheritedMethod");
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperInterfacesNames(interfaceNameList);
+ typeInfo.setCreateAbstractInheritedMethods(true);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithOneSuperInterfaceAndInheritedMethod");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithSuperInterfaceAndInheritedMethod");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ String[] interfaceNames = roleOTElem.getSuperInterfaceNames();
+ assertNotNull(interfaceNames);
+ assertTrue(interfaceNames.length == 1);
+ assertEquals("InterfaceWithOneMethod", interfaceNames[0]);
+
+ String[] interfacesSignatures = roleOTElem.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfacesSignatures);
+ assertTrue(interfacesSignatures.length == 1);
+ assertEquals("QInterfaceWithOneMethod;", interfacesSignatures[0]);
+
+ IMethod[] methods = roleJavaElem.getMethods();
+ assertNotNull(methods);
+ assertTrue(methods.length > 0);
+ assertTrue(methods.length == 1);
+ assertEquals("methodToImplement", methods[0].getElementName());
+ }
+
+ /**
+ * This method tests the creation of a role class that has several super interfaces
+ * the role class should contain all abstract methods that it inherits from its several super interfaces
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_WithSeveralSuperInterfacesAndInheritedMethods() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNameList = new ArrayList<String>();
+ interfaceNameList.add("ordinarypkg.InterfaceWithOneMethod");
+ interfaceNameList.add("ordinarypkg.InterfaceWithTwoMethods");
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("RoleWithSeveralSuperInterfacesAndInheritedMethods", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods");
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperInterfacesNames(interfaceNameList);
+ typeInfo.setCreateAbstractInheritedMethods(true);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithSeveralSuperInterfacesAndInheritedMethods");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ String[] interfaceNames = roleOTElem.getSuperInterfaceNames();
+ assertNotNull(interfaceNames);
+ assertTrue(interfaceNames.length > 0);
+ assertTrue(interfaceNames.length == 2);
+ assertEquals("InterfaceWithOneMethod", interfaceNames[0]);
+ assertEquals("InterfaceWithTwoMethods", interfaceNames[1]);
+
+ String[] interfacesSignatures = roleOTElem.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfacesSignatures);
+ assertTrue(interfacesSignatures.length > 0);
+ assertTrue(interfacesSignatures.length == 2);
+ assertEquals("QInterfaceWithOneMethod;", interfacesSignatures[0]);
+ assertEquals("QInterfaceWithTwoMethods;", interfacesSignatures[1]);
+
+ IMethod[] methods = roleJavaElem.getMethods();
+ assertNotNull(methods);
+ assertTrue(methods.length > 0);
+ assertTrue(methods.length == 3);
+
+ IMethod method = roleJavaElem.getMethod("methodToImplement", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+
+ method = roleJavaElem.getMethod("methodToImplementA", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+
+ method = roleJavaElem.getMethod("methodToImplementB", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+ }
+
+ /**
+ * This method tests the creation of a role class that is bound to a base class
+ * the base class is an ordinary class
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_WithOrdinaryBase() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("RoleWithOrdinaryBase", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForRoleWithOrdinaryBase");
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setBaseTypeName("ordinarypkg.EmptyClass");
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithOrdinaryBase");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithOrdinaryBase");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertTrue(roleOTElem instanceof IRoleType);
+ IRoleType roleOTRoleElem = (IRoleType) roleOTElem;
+ IType baseJavaElem = roleOTRoleElem.getBaseClass();
+
+ assertNotNull(baseJavaElem);
+ assertEquals("ordinarypkg.EmptyClass", baseJavaElem.getFullyQualifiedName());
+ }
+
+ /**
+ * This method tests the creation of a role class that is bound to a base class
+ * the base class is a team class
+ * initially the role's hosting team class is empty
+ */
+ public void testRoleCreation_WithTeamBase() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo("RoleWithTeamBase", pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForRoleWithTeamBase");
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setBaseTypeName("teampkg.EmptyBaseTeam");
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithTeamBase");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithTeamBase");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertTrue(roleOTElem instanceof IRoleType);
+ IRoleType roleOTRoleElem = (IRoleType) roleOTElem;
+ IType baseJavaElem = roleOTRoleElem.getBaseClass();
+
+ assertNotNull(baseJavaElem);
+ assertEquals("teampkg.EmptyBaseTeam", baseJavaElem.getFullyQualifiedName());
+
+ IOTType baseOTElem = OTModelManager.getOTElement(baseJavaElem);
+ assertNotNull(baseOTElem);
+ assertTrue(baseOTElem.isTeam());
+ }
+
+
+ /**
+ * This method tests the creation of a role class that has an explicit superclass.
+ * The explicit superclass resides in the same team class as the newly created role class.
+ */
+ public void testRoleCreation_WithExplicitSuperClass_FromSameTeam() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ final String TEAM_CLASS_NAME = "TeamForRoleWithExplicitSuperclass_PreviouslyWithOneRole";
+ final String ROLE_CLASS_NAME = "RoleWithExplicitSuperClass";
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo(ROLE_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg."+TEAM_CLASS_NAME);
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperClassName("teampkg.TeamForRoleWithExplicitSuperclass_PreviouslyWithOneRole.SuperRole");
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(ROLE_CLASS_NAME));
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", TEAM_CLASS_NAME);
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType(ROLE_CLASS_NAME);
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertEquals("SuperRole", roleJavaElem.getSuperclassName());
+ assertEquals("QSuperRole;", roleJavaElem.getSuperclassTypeSignature());
+ }
+
+
+ /**
+ * This method tests the creation of a role class that has an explicit superclass.
+ * The explicit superclass does not reside in the same team class as the newly created role class,
+ * but in a super team of that team.
+ */
+ public void testRoleCreation_WithExplicitSuperClass_FromSuperTeam() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ final String TEAM_CLASS_NAME = "TeamForRoleWithExplicitSuperclass_PreviouslyEmpty";
+ final String ROLE_CLASS_NAME = "RoleWithExplicitSuperClass";
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo(ROLE_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg."+TEAM_CLASS_NAME);
+ typeInfo.setInline(DOINLINE);
+//TODO (kaschja) ??? must "teampkg.TeamWithRoleWithAbstractMethod.RoleWithAbstractMethod" be set as super role class ??? (because it is the team class where the super role comes from)
+ typeInfo.setSuperClassName("teampkg.TeamForRoleWithExplicitSuperclass_PreviouslyEmpty.RoleWithAbstractMethod");
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(ROLE_CLASS_NAME));
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", TEAM_CLASS_NAME);
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType(ROLE_CLASS_NAME);
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertEquals("RoleWithAbstractMethod", roleJavaElem.getSuperclassName());
+ assertEquals("QRoleWithAbstractMethod;", roleJavaElem.getSuperclassTypeSignature());
+ }
+
+
+ /**
+ * This method tests the creation of a role class that has an explicit superclass.
+ * the role class should contain the abstract method that it inherits from its superclass
+ * The explicit superclass resides in the same team class as the newly created role class.
+ */
+ public void testRoleCreation_WithExplicitSuperClassAndInheritedMethod_FromSameTeam() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ final String TEAM_CLASS_NAME = "TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyWithOneRole";
+ final String ROLE_CLASS_NAME = "RoleWithExplicitSuperClassAndInheritedMethod";
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo(ROLE_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg."+TEAM_CLASS_NAME);
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperClassName("teampkg.TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyWithOneRole.RoleWithAbstractMethod");
+ typeInfo.setCreateAbstractInheritedMethods(true);
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(ROLE_CLASS_NAME));
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", TEAM_CLASS_NAME);
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType(ROLE_CLASS_NAME);
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertEquals("RoleWithAbstractMethod", roleJavaElem.getSuperclassName());
+ assertEquals("QRoleWithAbstractMethod;", roleJavaElem.getSuperclassTypeSignature());
+
+ IMethod[] methods = roleJavaElem.getMethods();
+ assertNotNull(methods);
+ assertTrue(methods.length > 0);
+ assertTrue(methods.length == 1);
+ assertEquals("methodToImplement1", methods[0].getElementName());
+ }
+
+
+ /**
+ * This method tests the creation of a role class that has an explicit superclass.
+ * The role class should contain the abstract method that it inherits from its superclass.
+ * The explicit superclass does not reside in the same team class as the newly created role class
+ * but in the super team of that team.
+ */
+ public void testRoleCreation_WithExplicitSuperClassAndInheritedMethod_FromSuperTeam() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ final String TEAM_CLASS_NAME = "TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty";
+ final String ROLE_CLASS_NAME = "RoleWithExplicitSuperClassAndInheritedMethod";
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo(ROLE_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg."+TEAM_CLASS_NAME);
+ typeInfo.setInline(DOINLINE);
+//TODO (kaschja) ??? must "teampkg.TeamWithRoleWithAbstractMethod.RoleWithAbstractMethod" be set as super role class ??? (because it is the team class where the super role comes from)
+// typeInfo.setSuperClassName("teampkg.TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty.RoleWithAbstractMethod");
+ typeInfo.setSuperClassName("teampkg.TeamWithRoleWithAbstractMethod.RoleWithAbstractMethod");
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(ROLE_CLASS_NAME));
+
+
+ typeInfo.setCreateAbstractInheritedMethods(true);
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithExplicitSuperClassAndInheritedMethod");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertEquals("RoleWithAbstractMethod", roleJavaElem.getSuperclassName());
+ assertEquals("QRoleWithAbstractMethod;", roleJavaElem.getSuperclassTypeSignature());
+
+ IMethod[] methods = roleJavaElem.getMethods();
+ assertNotNull(methods);
+ assertTrue(methods.length > 0);
+ assertTrue(methods.length == 1);
+ assertEquals("methodToImplement1", methods[0].getElementName());
+ }
+
+
+ /**
+ * This method tests the creation of a role class that has an implicit superclass.
+ * The role class should contain the abstract method that it inherits from its superclass.
+ */
+ public void testRoleCreation_WithImplicitSuperClassAndInheritedMethod() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ final String TEAM_CLASS_NAME = "TeamForRoleWithImplicitSuperClassAndInheritedMethod";
+ final String ROLE_CLASS_NAME = "RoleWithAbstractMethod";
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo(ROLE_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg."+TEAM_CLASS_NAME);
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setCreateAbstractInheritedMethods(true);
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(ROLE_CLASS_NAME));
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithImplicitSuperClassAndInheritedMethod");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithAbstractMethod");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ IMethod[] methods = roleJavaElem.getMethods();
+ assertNotNull(methods);
+ assertTrue(methods.length > 0);
+ assertTrue(methods.length == 1);
+ assertEquals("methodToImplement1", methods[0].getElementName());
+ }
+
+
+ /**
+ * This method tests the creation of a role class that has
+ * an implicit superclass and an explicit superclass and several super interfaces.
+ * The role class should contain all abstract methods that it inherits from
+ * its several super classes and interfaces
+ */
+ public void testRoleCreation_WithSeveralSuperTypesAndInheritedMethods() throws InterruptedException,
+ CoreException
+ {
+ /*creation of role*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNameList = new ArrayList<String>();
+ interfaceNameList.add("ordinarypkg.InterfaceWithOneMethod");
+ interfaceNameList.add("ordinarypkg.InterfaceWithTwoMethods");
+
+ //the role to be created should be named "RoleWithAbstractMethod" although it contains several abstract methods
+ //in order to establish the implicit inheritence relationship with TeamWithRoleWithAbstractMethod.RoleWithAbstractMethod
+ final String ROLE_CLASS_NAME = "RoleWithAbstractMethod";
+ final String TEAM_CLASS_NAME = "TeamForRoleWithSeveralSuperTypesAndInheritedMethods";
+
+ RoleTypeInfo typeInfo = new RoleTypeInfo(ROLE_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setEnclosingTypeName("teampkg."+TEAM_CLASS_NAME);
+ typeInfo.setInline(DOINLINE);
+ typeInfo.setSuperClassName("teampkg.TeamForRoleWithSeveralSuperTypesAndInheritedMethods.AbstractSuperRole");
+ typeInfo.setSuperInterfacesNames(interfaceNameList);
+ typeInfo.setCreateAbstractInheritedMethods(true);
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(ROLE_CLASS_NAME));
+
+ assertNotNull(_roleCreator);
+ _roleCreator.setTypeInfo(typeInfo);
+ _roleCreator.createType(new NullProgressMonitor());
+
+ /*test of role existence and properties*/
+
+ IType enclosingTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForRoleWithSeveralSuperTypesAndInheritedMethods");
+ assertNotNull(enclosingTeamJavaElem);
+
+ IType roleJavaElem = enclosingTeamJavaElem.getType("RoleWithAbstractMethod");
+ assertNotNull(roleJavaElem);
+ assertTrue(roleJavaElem.exists());
+
+ IOTType roleOTElem = OTModelManager.getOTElement(roleJavaElem);
+ assertNotNull(roleOTElem);
+ assertTrue(roleOTElem.isRole());
+
+ assertEquals("AbstractSuperRole", roleJavaElem.getSuperclassName());
+ assertEquals("QAbstractSuperRole;", roleJavaElem.getSuperclassTypeSignature());
+
+ String[] interfaceNames = roleJavaElem.getSuperInterfaceNames();
+ assertNotNull(interfaceNames);
+ assertTrue(interfaceNames.length > 0);
+ assertTrue(interfaceNames.length == 2);
+ assertEquals("InterfaceWithOneMethod", interfaceNames[0]);
+ assertEquals("InterfaceWithTwoMethods", interfaceNames[1]);
+
+ String[] interfaceSignatures = roleJavaElem.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfaceSignatures);
+ assertTrue(interfaceSignatures.length > 0);
+ assertTrue(interfaceSignatures.length == 2);
+ assertEquals("QInterfaceWithOneMethod;", interfaceSignatures[0]);
+ assertEquals("QInterfaceWithTwoMethods;", interfaceSignatures[1]);
+
+ IMethod[] methods = roleJavaElem.getMethods();
+ assertNotNull(methods);
+ assertTrue(methods.length > 0);
+ assertTrue(methods.length == 5);
+
+ //method inherited from "InterfaceWithOneMethod"
+ IMethod method = roleJavaElem.getMethod("methodToImplement", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+
+ //methods inherited from "InterfaceWithTwoMethods"
+ method = roleJavaElem.getMethod("methodToImplementA", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+ method = roleJavaElem.getMethod("methodToImplementB", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+
+ //method inherited from explicit superclass "AbstractSuperRole"
+ method = roleJavaElem.getMethod("methodToImplementX", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+
+ //method inherited from implicit superclass "TeamWithRoleWithAbstractMethod.RoleWithAbstractMethod"
+ method = roleJavaElem.getMethod("methodToImplement1", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java
new file mode 100644
index 0000000..0589bd9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java
@@ -0,0 +1,401 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: TeamCreationTests.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.typecreator;
+
+import java.util.ArrayList;
+
+import junit.framework.Test;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IInitializer;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.objectteams.otdt.core.IOTType;
+import org.eclipse.objectteams.otdt.core.OTModelManager;
+import org.eclipse.objectteams.otdt.internal.ui.wizards.typecreation.TeamCreator;
+import org.eclipse.objectteams.otdt.internal.ui.wizards.typecreation.TypeInfo;
+import org.eclipse.objectteams.otdt.ui.tests.FileBasedUITest;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamCreationTests.java 23495 2010-02-05 23:15:16Z stephan $
+ */
+public class TeamCreationTests extends FileBasedUITest
+{
+
+ private static final String SRC_FOLDER_NAME = "teams";
+
+ private TeamCreator _teamCreator;
+
+
+ public TeamCreationTests(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ if (false)
+ {
+ Suite suite = new Suite(TeamCreationTests.class.getName());
+ suite.addTest(new TeamCreationTests("testCreation_TeamWithSuperInterfaceAndInheritedMethod"));
+ return suite;
+ }
+ junit.framework.TestSuite suite = new Suite(TeamCreationTests.class);
+ return suite;
+ }
+
+ public void setUpSuite() throws Exception
+ {
+ setTestProjectDir("CreationTestProject");
+
+ super.setUpSuite();
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ _teamCreator = new TeamCreator();
+ }
+
+// /**
+// * only for debug purposes
+// * suppresses the deletion of the folders and files that have been created during the test run
+// */
+// public void tearDownSuite()
+// {
+// //don't call super method, so created directory will not be deleted
+// }
+
+
+ private IType getJavaType(String projectName, String srcFolderName, String pkgName, String typeName) throws JavaModelException
+ {
+ ICompilationUnit typeUnit = getCompilationUnit(
+ projectName,
+ srcFolderName,
+ pkgName,
+ typeName +".java");
+ IType typeJavaElem = typeUnit.getType(typeName);
+
+ if ((typeJavaElem != null) && (typeJavaElem.exists()))
+ {
+ return typeJavaElem;
+ }
+ return null;
+ }
+
+
+ public void testCreation_EmptyTeam() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ TypeInfo typeInfo = new TypeInfo("EmptyTeam", pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperClassName("org.objectteams.Team");
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType createdJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "EmptyTeam");
+ assertNotNull(createdJavaType);
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+ }
+
+
+ public void testCreation_NestedTeam() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ TypeInfo typeInfo = new TypeInfo("NestedTeam", pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setEnclosingTypeName("teampkg.TeamForNestedTeam");
+ typeInfo.setInline(true);
+ typeInfo.setCreateAbstractInheritedMethods(true);
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType enclosingJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamForNestedTeam");
+ IType createdJavaType = enclosingJavaType.getType("NestedTeam");
+ assertNotNull(createdJavaType);
+ assertTrue("created type should exist", createdJavaType.exists());
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+
+ IMethod[] methods = createdJavaType.getMethods();
+ assertEquals("Should not have created methods", 0, methods.length);
+ }
+
+
+ public void testCreation_TeamWithConstructor() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ String TEAM_CLASS_NAME = "TeamWithConstructor";
+ TypeInfo typeInfo = new TypeInfo(TEAM_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperClassName("org.objectteams.Team");
+ typeInfo.setCreateConstructor(true);
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(TEAM_CLASS_NAME));
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType createdJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", TEAM_CLASS_NAME);
+ assertNotNull(createdJavaType);
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+
+ // constructor is a method by the name of the enclosing class:
+ IMethod constructor = createdJavaType.getMethod(TEAM_CLASS_NAME, new String[0]);
+ assertNotNull(constructor);
+ assertTrue(constructor.exists());
+ }
+
+ public void testCreation_TeamWithMainMethod() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ TypeInfo typeInfo = new TypeInfo("TeamWithMainMethod", pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperClassName("org.objectteams.Team");
+ typeInfo.setCreateMainMethod(true);
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType createdJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamWithMainMethod");
+ assertNotNull(createdJavaType);
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+
+ String[] paraTypes = {"[QString;"};
+ IMethod method = createdJavaType.getMethod("main", paraTypes);
+ assertNotNull(method);
+ assertTrue(method.exists());
+}
+
+ public void testCreation_EmptyTeamWithEmptySuperTeam() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ String TEAM_CLASS_NAME = "EmptyTeamWithEmptySuperTeam";
+ TypeInfo typeInfo = new TypeInfo(TEAM_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperClassName("teampkg.EmptyTeam");
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(TEAM_CLASS_NAME));
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType subTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "EmptyTeamWithEmptySuperTeam");
+ assertNotNull(subTeamJavaElem);
+
+ IOTType subTeamOTElem = OTModelManager.getOTElement(subTeamJavaElem);
+ assertNotNull(subTeamOTElem);
+ assertTrue(subTeamOTElem.isTeam());
+
+ assertEquals(subTeamOTElem.getSuperclassName(), "EmptyTeam");
+ assertEquals(subTeamOTElem.getSuperclassTypeSignature(), "QEmptyTeam;");
+ }
+
+
+ public void testCreation_EmptyTeamWithSuperInterface() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IType interfaceJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "ordinarypkg", "InterfaceWithOneMethod");
+ assertNotNull(interfaceJavaElem);
+ assertTrue(interfaceJavaElem.exists());
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNames = new ArrayList<String>();
+ interfaceNames.add("ordinary.InterfaceWithOneMethod");
+
+ TypeInfo typeInfo = new TypeInfo("EmptyTeamWithSuperInterface", pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperInterfacesNames(interfaceNames);
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType createdJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "EmptyTeamWithSuperInterface");
+ assertNotNull(createdJavaType);
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+
+ String[] interfaces = createdOTType.getSuperInterfaceNames();
+ assertNotNull(interfaces);
+ assertTrue(interfaces.length == 1);
+ assertEquals(interfaces[0], "InterfaceWithOneMethod");
+
+ String[] interfaceSignatures = createdOTType.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfaceSignatures);
+ assertTrue(interfaceSignatures.length == 1);
+ assertEquals(interfaceSignatures[0], "QInterfaceWithOneMethod;");
+ }
+
+
+ public void testCreation_TeamWithSuperInterfaceAndInheritedMethod() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IType interfaceJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "ordinarypkg", "InterfaceWithOneMethod");
+ assertNotNull(interfaceJavaElem);
+ assertTrue(interfaceJavaElem.exists());
+
+ /*creation of team*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ ArrayList<String> interfaceNames = new ArrayList<String>();
+ interfaceNames.add("ordinarypkg.InterfaceWithOneMethod");
+
+ String TEAM_CLASS_NAME = "TeamWithSuperInterfaceAndInheritedMethod";
+ TypeInfo typeInfo = new TypeInfo(TEAM_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperInterfacesNames(interfaceNames);
+ typeInfo.setCreateAbstractInheritedMethods(true);
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(TEAM_CLASS_NAME));
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType createdJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamWithSuperInterfaceAndInheritedMethod");
+ assertNotNull(createdJavaType);
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+
+ String[] interfaces = createdOTType.getSuperInterfaceNames();
+ assertNotNull(interfaces);
+ assertTrue(interfaces.length == 1);
+ assertEquals(interfaces[0], "InterfaceWithOneMethod");
+
+ String[] interfaceSignatures = createdOTType.getSuperInterfaceTypeSignatures();
+ assertNotNull(interfaceSignatures);
+ assertTrue(interfaceSignatures.length == 1);
+ assertEquals(interfaceSignatures[0], "QInterfaceWithOneMethod;");
+
+ IMethod method = createdJavaType.getMethod("methodToImplement", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+ }
+
+
+ public void testCreation_TeamWithSuperTeamAndInheritedMethod() throws JavaModelException,
+ InterruptedException,
+ CoreException
+ {
+ IType superTeamJavaElem = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "AbstractTeamWithAbstractMethod");
+ assertNotNull(superTeamJavaElem);
+ assertTrue(superTeamJavaElem.exists());
+
+ /*creation of team*/
+
+ IPackageFragmentRoot pkgFragRoot = getPackageFragmentRoot(getTestProjectDir(), SRC_FOLDER_NAME);
+ IPackageFragment pkgFrag = getPackageFragment(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg");
+ assertNotNull(pkgFragRoot);
+ assertNotNull(pkgFrag);
+
+ String TEAM_CLASS_NAME = "TeamWithSuperTeamAndInheritedMethod";
+ TypeInfo typeInfo = new TypeInfo(TEAM_CLASS_NAME, pkgFragRoot, pkgFrag);
+ typeInfo.setModifier(Flags.AccPublic+Flags.AccTeam);
+ typeInfo.setSuperClassName("teampkg.AbstractTeamWithAbstractMethod");
+ typeInfo.setCreateAbstractInheritedMethods(true);
+ typeInfo.setCurrentType(pkgFrag.getCompilationUnit(TEAM_CLASS_NAME+".java").getType(TEAM_CLASS_NAME));
+
+ assertNotNull(_teamCreator);
+ _teamCreator.setTypeInfo(typeInfo);
+ _teamCreator.createType(new NullProgressMonitor());
+
+ IType createdJavaType = getJavaType(getTestProjectDir(), SRC_FOLDER_NAME, "teampkg", "TeamWithSuperTeamAndInheritedMethod");
+ assertNotNull(createdJavaType);
+
+ IOTType createdOTType = OTModelManager.getOTElement(createdJavaType);
+ assertNotNull(createdOTType);
+ assertTrue(createdOTType.isTeam());
+
+ assertEquals(createdJavaType.getSuperclassName(), "AbstractTeamWithAbstractMethod");
+ assertEquals(createdJavaType.getSuperclassTypeSignature(), "QAbstractTeamWithAbstractMethod;");
+
+ IMethod method = createdJavaType.getMethod("methodToImplement", new String[0]);
+ assertNotNull(method);
+ assertTrue(method.exists());
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/util/JavaProjectHelper.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/util/JavaProjectHelper.java
new file mode 100644
index 0000000..8acb134
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/util/JavaProjectHelper.java
@@ -0,0 +1,144 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: JavaProjectHelper.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.util;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceDescription;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.ui.util.CoreUtility;
+import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin;
+import org.eclipse.objectteams.otdt.core.ext.OTREContainer;
+import org.eclipse.objectteams.otdt.ui.tests.TestPlugin;
+
+/**
+ * Helper methods to set up a IJavaProject.
+ */
+public class JavaProjectHelper extends org.eclipse.jdt.testplugin.JavaProjectHelper
+{
+
+ public static final IPath RT_STUBS = new Path("testresources/rtstubs.jar");
+
+ /**
+ * OT: new method: OT specific project creation.
+ * Creates a IJavaProject.
+ */
+ public static IJavaProject createOTJavaProject(String projectName,
+ String binFolderName) throws CoreException
+ {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ IProject project = root.getProject(projectName);
+ if (!project.exists())
+ {
+ project.create(null);
+ }
+ else
+ {
+ project.refreshLocal(IResource.DEPTH_INFINITE, null);
+ }
+
+ if (!project.isOpen())
+ {
+ project.open(null);
+ }
+
+ IPath outputLocation;
+ if (binFolderName != null && binFolderName.length() > 0)
+ {
+ IFolder binFolder = project.getFolder(binFolderName);
+ if (!binFolder.exists())
+ {
+ CoreUtility.createFolder(binFolder, false, true, null);
+ }
+ outputLocation = binFolder.getFullPath();
+ }
+ else
+ {
+ outputLocation = project.getFullPath();
+ }
+
+ if (!project.hasNature(JavaCore.NATURE_ID) &&
+ !project.hasNature(JavaCore.OTJ_NATURE_ID))
+ {
+ addNatureToProject(project, JavaCore.NATURE_ID, null);
+ //add OT nature to project
+ addNatureToProject(project, JavaCore.OTJ_NATURE_ID, null);
+ }
+ IProjectDescription description = project.getDescription();
+ //add OT build spec to project
+ description.setBuildSpec(OTDTPlugin.createProjectBuildCommands(description));
+ project.setDescription(description, null);
+
+ IJavaProject jproject = JavaCore.create(project);
+
+ jproject.setOutputLocation(outputLocation, null);
+ jproject.setRawClasspath(new IClasspathEntry[0], null);
+
+ OTREContainer.initializeOTJProject(project);
+
+ return jproject;
+ }
+
+ /**
+ * OT: use our TestPlugin:
+ * Try to find rt.jar
+ */
+ public static IPath[] findRtJar()
+ {
+ File rtStubs = TestPlugin.getDefault().getFileInPlugin(
+ RT_STUBS);
+ if (rtStubs != null && rtStubs.exists())
+ {
+ return new IPath[] { new Path(rtStubs.getPath()), null, null };
+ }
+
+ return null;
+ }
+
+ /**
+ * Additional Method:
+ * Sets autobuilding state for the test workspace.
+ */
+ public static boolean setAutoBuilding(boolean state) throws CoreException
+ {
+ // disable auto build
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IWorkspaceDescription desc = workspace.getDescription();
+ boolean result = desc.isAutoBuilding();
+ desc.setAutoBuilding(state);
+ workspace.setDescription(desc);
+ return result;
+ }
+
+}
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/util/TestOptions.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/util/TestOptions.java
new file mode 100644
index 0000000..6c2003f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/util/TestOptions.java
@@ -0,0 +1,611 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ *
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ *
+ * 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
+ * $Id: TestOptions.java 23495 2010-02-05 23:15:16Z stephan $
+ *
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ *
+ * Contributors:
+ * Fraunhofer FIRST - Initial API and implementation
+ * Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.ui.tests.util;
+
+import java.util.Hashtable;
+
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.internal.formatter.align.Alignment;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class TestOptions {
+
+ @SuppressWarnings("unchecked")
+ public static Hashtable getFormatterOptions()
+ {
+ Hashtable result= JavaCore.getDefaultOptions();
+ result.putAll(TestFormatterOptions.getSettings());
+ return result;
+ }
+
+ public static void initializeCodeGenerationOptions()
+ {
+ IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
+ store.setValue(PreferenceConstants.CODEGEN_KEYWORD_THIS, false);
+ store.setValue(PreferenceConstants.CODEGEN_IS_FOR_GETTERS, true);
+ store.setValue(PreferenceConstants.CODEGEN_EXCEPTION_VAR_NAME, "e"); //$NON-NLS-1$
+ store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, true);
+ store.setValue(PreferenceConstants.ORGIMPORTS_IMPORTORDER, "java;javax;org;com"); //$NON-NLS-1$
+ store.setValue(PreferenceConstants.ORGIMPORTS_ONDEMANDTHRESHOLD, 99);
+ store.setValue(PreferenceConstants.ORGIMPORTS_IGNORELOWERCASE, true);
+ }
+}
+
+class TestFormatterOptions
+{
+ public static Hashtable getSettings()
+ {
+ TestFormatterOptions options = new TestFormatterOptions();
+ options.setDefaultSettings();
+ return options.getMap();
+ }
+
+ public int alignment_for_arguments_in_allocation_expression;
+ public int alignment_for_arguments_in_explicit_constructor_call;
+ public int alignment_for_arguments_in_method_invocation;
+ public int alignment_for_arguments_in_qualified_allocation_expression;
+ public int alignment_for_binary_expression;
+ public int alignment_for_compact_if;
+ public int alignment_for_conditional_expression;
+ public int alignment_for_expressions_in_array_initializer;
+ public int alignment_for_multiple_fields;
+ public int alignment_for_parameters_in_constructor_declaration;
+ public int alignment_for_parameters_in_method_declaration;
+ public int alignment_for_selector_in_method_invocation;
+ public int alignment_for_superclass_in_type_declaration;
+ public int alignment_for_superinterfaces_in_type_declaration;
+ public int alignment_for_throws_clause_in_constructor_declaration;
+ public int alignment_for_throws_clause_in_method_declaration;
+
+ public boolean align_type_members_on_columns;
+
+ public String brace_position_for_anonymous_type_declaration;
+ public String brace_position_for_array_initializer;
+ public String brace_position_for_block;
+ public String brace_position_for_block_in_case;
+ public String brace_position_for_constructor_declaration;
+ public String brace_position_for_method_declaration;
+ public String brace_position_for_type_declaration;
+ public String brace_position_for_switch;
+
+ public int continuation_indentation;
+ public int continuation_indentation_for_array_initializer;
+
+ public int blank_lines_after_imports;
+ public int blank_lines_after_package;
+ public int blank_lines_before_field;
+ public int blank_lines_before_first_class_body_declaration;
+ public int blank_lines_before_imports;
+ public int blank_lines_before_member_type;
+ public int blank_lines_before_method;
+ public int blank_lines_before_new_chunk;
+ public int blank_lines_before_package;
+ public int blank_lines_between_type_declarations;
+ public int blank_lines_at_beginning_of_method_body;
+
+ public boolean indent_statements_compare_to_block;
+ public boolean indent_statements_compare_to_body;
+ public boolean indent_body_declarations_compare_to_type_header;
+ public boolean indent_breaks_compare_to_cases;
+ public boolean indent_switchstatements_compare_to_cases;
+ public boolean indent_switchstatements_compare_to_switch;
+
+ public boolean insert_new_line_after_opening_brace_in_array_initializer;
+ public boolean insert_new_line_before_catch_in_try_statement;
+ public boolean insert_new_line_before_closing_brace_in_array_initializer;
+ public boolean insert_new_line_before_else_in_if_statement;
+ public boolean insert_new_line_before_finally_in_try_statement;
+ public boolean insert_new_line_before_while_in_do_statement;
+ public boolean insert_new_line_in_empty_anonymous_type_declaration;
+ public boolean insert_new_line_in_empty_block;
+ public boolean insert_new_line_in_empty_method_body;
+ public boolean insert_new_line_in_empty_type_declaration;
+ public boolean insert_space_after_assignment_operator;
+ public boolean insert_space_after_binary_operator;
+ public boolean insert_space_after_closing_paren_in_cast;
+ public boolean insert_space_after_closing_brace_in_block;
+ public boolean insert_space_after_colon_in_assert;
+ public boolean insert_space_after_colon_in_case;
+ public boolean insert_space_after_colon_in_conditional;
+ public boolean insert_space_after_colon_in_labeled_statement;
+ public boolean insert_space_after_comma_in_allocation_expression;
+ public boolean insert_space_after_comma_in_array_initializer;
+ public boolean insert_space_after_comma_in_constructor_declaration_parameters;
+ public boolean insert_space_after_comma_in_constructor_declaration_throws;
+ public boolean insert_space_after_comma_in_explicit_constructor_call_arguments;
+ public boolean insert_space_after_comma_in_for_increments;
+ public boolean insert_space_after_comma_in_for_inits;
+ public boolean insert_space_after_comma_in_method_invocation_arguments;
+ public boolean insert_space_after_comma_in_method_declaration_parameters;
+ public boolean insert_space_after_comma_in_method_declaration_throws;
+ public boolean insert_space_after_comma_in_multiple_field_declarations;
+ public boolean insert_space_after_comma_in_multiple_local_declarations;
+ public boolean insert_space_after_comma_in_superinterfaces;
+ public boolean insert_space_after_opening_bracket_in_array_allocation_expression;
+ public boolean insert_space_after_opening_bracket_in_array_reference;
+ public boolean insert_space_after_opening_brace_in_array_initializer;
+ public boolean insert_space_after_opening_paren_in_cast;
+ public boolean insert_space_after_opening_paren_in_catch;
+ public boolean insert_space_after_opening_paren_in_constructor_declaration;
+ public boolean insert_space_after_opening_paren_in_for;
+ public boolean insert_space_after_opening_paren_in_if;
+ public boolean insert_space_after_opening_paren_in_method_declaration;
+ public boolean insert_space_after_opening_paren_in_method_invocation;
+ public boolean insert_space_after_opening_paren_in_parenthesized_expression;
+ public boolean insert_space_after_opening_paren_in_switch;
+ public boolean insert_space_after_opening_paren_in_synchronized;
+ public boolean insert_space_after_opening_paren_in_while;
+ public boolean insert_space_after_postfix_operator;
+ public boolean insert_space_after_prefix_operator;
+ public boolean insert_space_after_question_in_conditional;
+ public boolean insert_space_after_semicolon_in_for;
+ public boolean insert_space_after_unary_operator;
+ public boolean insert_space_before_assignment_operator;
+ public boolean insert_space_before_binary_operator;
+ public boolean insert_space_before_closing_brace_in_array_initializer;
+ public boolean insert_space_before_closing_bracket_in_array_allocation_expression;
+ public boolean insert_space_before_closing_bracket_in_array_reference;
+ public boolean insert_space_before_closing_paren_in_cast;
+ public boolean insert_space_before_closing_paren_in_catch;
+ public boolean insert_space_before_closing_paren_in_constructor_declaration;
+ public boolean insert_space_before_closing_paren_in_for;
+ public boolean insert_space_before_closing_paren_in_if;
+ public boolean insert_space_before_closing_paren_in_method_declaration;
+ public boolean insert_space_before_closing_paren_in_method_invocation;
+ public boolean insert_space_before_closing_paren_in_parenthesized_expression;
+ public boolean insert_space_before_closing_paren_in_switch;
+ public boolean insert_space_before_closing_paren_in_synchronized;
+ public boolean insert_space_before_closing_paren_in_while;
+ public boolean insert_space_before_colon_in_assert;
+ public boolean insert_space_before_colon_in_case;
+ public boolean insert_space_before_colon_in_conditional;
+ public boolean insert_space_before_colon_in_default;
+ public boolean insert_space_before_colon_in_labeled_statement;
+ public boolean insert_space_before_comma_in_allocation_expression;
+ public boolean insert_space_before_comma_in_array_initializer;
+ public boolean insert_space_before_comma_in_constructor_declaration_parameters;
+ public boolean insert_space_before_comma_in_constructor_declaration_throws;
+ public boolean insert_space_before_comma_in_explicit_constructor_call_arguments;
+ public boolean insert_space_before_comma_in_for_increments;
+ public boolean insert_space_before_comma_in_for_inits;
+ public boolean insert_space_before_comma_in_method_invocation_arguments;
+ public boolean insert_space_before_comma_in_method_declaration_parameters;
+ public boolean insert_space_before_comma_in_method_declaration_throws;
+ public boolean insert_space_before_comma_in_multiple_field_declarations;
+ public boolean insert_space_before_comma_in_multiple_local_declarations;
+ public boolean insert_space_before_comma_in_superinterfaces;
+ public boolean insert_space_before_opening_brace_in_anonymous_type_declaration;
+ public boolean insert_space_before_opening_brace_in_array_initializer;
+ public boolean insert_space_before_opening_brace_in_block;
+ public boolean insert_space_before_opening_brace_in_constructor_declaration;
+ public boolean insert_space_before_opening_brace_in_method_declaration;
+ public boolean insert_space_before_opening_brace_in_type_declaration;
+ public boolean insert_space_before_opening_bracket_in_array_allocation_expression;
+ public boolean insert_space_before_opening_bracket_in_array_reference;
+ public boolean insert_space_before_opening_bracket_in_array_type_reference;
+ public boolean insert_space_before_opening_paren_in_catch;
+ public boolean insert_space_before_opening_paren_in_constructor_declaration;
+ public boolean insert_space_before_opening_paren_in_for;
+ public boolean insert_space_before_opening_paren_in_if;
+ public boolean insert_space_before_opening_paren_in_method_invocation;
+ public boolean insert_space_before_opening_paren_in_method_declaration;
+ public boolean insert_space_before_opening_paren_in_switch;
+ public boolean insert_space_before_opening_brace_in_switch;
+ public boolean insert_space_before_opening_paren_in_synchronized;
+ public boolean insert_space_before_opening_paren_in_parenthesized_expression;
+ public boolean insert_space_before_opening_paren_in_while;
+ public boolean insert_space_before_postfix_operator;
+ public boolean insert_space_before_prefix_operator;
+ public boolean insert_space_before_question_in_conditional;
+ public boolean insert_space_before_semicolon;
+ public boolean insert_space_before_semicolon_in_for;
+ public boolean insert_space_before_unary_operator;
+ public boolean insert_space_between_brackets_in_array_type_reference;
+ public boolean insert_space_between_empty_braces_in_array_initializer;
+ public boolean insert_space_between_empty_brackets_in_array_allocation_expression;
+ public boolean insert_space_between_empty_parens_in_constructor_declaration;
+ public boolean insert_space_between_empty_parens_in_method_declaration;
+ public boolean insert_space_between_empty_parens_in_method_invocation;
+ public boolean compact_else_if;
+ public boolean keep_guardian_clause_on_one_line;
+ public boolean keep_else_statement_on_same_line;
+ public boolean keep_empty_array_initializer_on_one_line;
+ public boolean keep_simple_if_on_one_line;
+ public boolean keep_then_statement_on_same_line;
+ public int number_of_empty_lines_to_preserve;
+ public boolean put_empty_statement_on_new_line;
+ public int tab_size;
+ public final char filling_space = ' ';
+ public int page_width;
+ public boolean use_tab;
+
+ public int initial_indentation_level;
+ public String line_separator;
+
+ private TestFormatterOptions()
+ {
+ // cannot be instantiated
+ }
+
+ private String getAlignment(int alignment)
+ {
+ return Integer.toString(alignment);
+ }
+
+ @SuppressWarnings("unchecked")
+ private Hashtable getMap()
+ {
+ Hashtable options = new Hashtable();
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ALLOCATION_EXPRESSION, getAlignment(this.alignment_for_arguments_in_allocation_expression));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_EXPLICIT_CONSTRUCTOR_CALL, getAlignment(this.alignment_for_arguments_in_explicit_constructor_call));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION, getAlignment(this.alignment_for_arguments_in_method_invocation));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_QUALIFIED_ALLOCATION_EXPRESSION, getAlignment(this.alignment_for_arguments_in_qualified_allocation_expression));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_BINARY_EXPRESSION, getAlignment(this.alignment_for_binary_expression));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_COMPACT_IF, getAlignment(this.alignment_for_compact_if));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_CONDITIONAL_EXPRESSION, getAlignment(this.alignment_for_conditional_expression));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER, getAlignment(this.alignment_for_expressions_in_array_initializer));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_MULTIPLE_FIELDS, getAlignment(this.alignment_for_multiple_fields));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_CONSTRUCTOR_DECLARATION, getAlignment(this.alignment_for_parameters_in_constructor_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION, getAlignment(this.alignment_for_parameters_in_method_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_SELECTOR_IN_METHOD_INVOCATION, getAlignment(this.alignment_for_selector_in_method_invocation));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_SUPERCLASS_IN_TYPE_DECLARATION, getAlignment(this.alignment_for_superclass_in_type_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_TYPE_DECLARATION, getAlignment(this.alignment_for_superinterfaces_in_type_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_CONSTRUCTOR_DECLARATION, getAlignment(this.alignment_for_throws_clause_in_constructor_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_METHOD_DECLARATION, getAlignment(this.alignment_for_throws_clause_in_method_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS, this.align_type_members_on_columns ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION, this.brace_position_for_anonymous_type_declaration);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_ARRAY_INITIALIZER, this.brace_position_for_array_initializer);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_BLOCK, this.brace_position_for_block);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_BLOCK_IN_CASE, this.brace_position_for_block_in_case);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION, this.brace_position_for_constructor_declaration);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION, this.brace_position_for_method_declaration);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION, this.brace_position_for_type_declaration);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_SWITCH, this.brace_position_for_switch);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION, Integer.toString(this.continuation_indentation));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER, Integer.toString(this.continuation_indentation_for_array_initializer));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_AFTER_IMPORTS, Integer.toString(this.blank_lines_after_imports));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_AFTER_PACKAGE, Integer.toString(this.blank_lines_after_package));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_FIELD, Integer.toString(this.blank_lines_before_field));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_FIRST_CLASS_BODY_DECLARATION, Integer.toString(this.blank_lines_before_first_class_body_declaration));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_IMPORTS, Integer.toString(this.blank_lines_before_imports));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_MEMBER_TYPE, Integer.toString(this.blank_lines_before_member_type));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_METHOD, Integer.toString(this.blank_lines_before_method));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_NEW_CHUNK, Integer.toString(this.blank_lines_before_new_chunk));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BEFORE_PACKAGE, Integer.toString(this.blank_lines_before_package));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_BETWEEN_TYPE_DECLARATIONS, Integer.toString(this.blank_lines_between_type_declarations));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_BLANK_LINES_AT_BEGINNING_OF_METHOD_BODY, Integer.toString(this.blank_lines_at_beginning_of_method_body));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK, this.indent_statements_compare_to_block ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BODY, this.indent_statements_compare_to_body ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_TYPE_HEADER, this.indent_body_declarations_compare_to_type_header ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_BREAKS_COMPARE_TO_CASES, this.indent_breaks_compare_to_cases ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES, this.indent_switchstatements_compare_to_cases ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH, this.indent_switchstatements_compare_to_switch ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER, this.insert_new_line_after_opening_brace_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_BEFORE_CATCH_IN_TRY_STATEMENT, this.insert_new_line_before_catch_in_try_statement? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER, this.insert_new_line_before_closing_brace_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_BEFORE_ELSE_IN_IF_STATEMENT, this.insert_new_line_before_else_in_if_statement? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_BEFORE_FINALLY_IN_TRY_STATEMENT, this.insert_new_line_before_finally_in_try_statement? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_BEFORE_WHILE_IN_DO_STATEMENT, this.insert_new_line_before_while_in_do_statement? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANONYMOUS_TYPE_DECLARATION, this.insert_new_line_in_empty_anonymous_type_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_IN_EMPTY_BLOCK, this.insert_new_line_in_empty_block? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_IN_EMPTY_METHOD_BODY, this.insert_new_line_in_empty_method_body? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_IN_EMPTY_TYPE_DECLARATION, this.insert_new_line_in_empty_type_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR, this.insert_space_after_assignment_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_BINARY_OPERATOR, this.insert_space_after_binary_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST, this.insert_space_after_closing_paren_in_cast? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_BRACE_IN_BLOCK, this.insert_space_after_closing_brace_in_block? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT, this.insert_space_after_colon_in_assert? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CASE, this.insert_space_after_colon_in_case? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CONDITIONAL, this.insert_space_after_colon_in_conditional? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT, this.insert_space_after_colon_in_labeled_statement? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ALLOCATION_EXPRESSION, this.insert_space_after_comma_in_allocation_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ARRAY_INITIALIZER, this.insert_space_after_comma_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS, this.insert_space_after_comma_in_constructor_declaration_parameters? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS, this.insert_space_after_comma_in_constructor_declaration_throws? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS, this.insert_space_after_comma_in_explicit_constructor_call_arguments? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INCREMENTS, this.insert_space_after_comma_in_for_increments? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INITS, this.insert_space_after_comma_in_for_inits? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_INVOCATION_ARGUMENTS, this.insert_space_after_comma_in_method_invocation_arguments? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_PARAMETERS, this.insert_space_after_comma_in_method_declaration_parameters? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_THROWS, this.insert_space_after_comma_in_method_declaration_throws? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS, this.insert_space_after_comma_in_multiple_field_declarations? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS, this.insert_space_after_comma_in_multiple_local_declarations? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_SUPERINTERFACES, this.insert_space_after_comma_in_superinterfaces? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, this.insert_space_after_opening_bracket_in_array_allocation_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_REFERENCE, this.insert_space_after_opening_bracket_in_array_reference? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER, this.insert_space_after_opening_brace_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CAST, this.insert_space_after_opening_paren_in_cast? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CATCH, this.insert_space_after_opening_paren_in_catch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION, this.insert_space_after_opening_paren_in_constructor_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_FOR, this.insert_space_after_opening_paren_in_for? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_IF, this.insert_space_after_opening_paren_in_if? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_DECLARATION, this.insert_space_after_opening_paren_in_method_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_INVOCATION, this.insert_space_after_opening_paren_in_method_invocation? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION, this.insert_space_after_opening_paren_in_parenthesized_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SWITCH, this.insert_space_after_opening_paren_in_switch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SYNCHRONIZED, this.insert_space_after_opening_paren_in_synchronized? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_WHILE, this.insert_space_after_opening_paren_in_while? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_POSTFIX_OPERATOR, this.insert_space_after_postfix_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_PREFIX_OPERATOR, this.insert_space_after_prefix_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_CONDITIONAL, this.insert_space_after_question_in_conditional? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_SEMICOLON_IN_FOR, this.insert_space_after_semicolon_in_for? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_UNARY_OPERATOR, this.insert_space_after_unary_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR, this.insert_space_before_assignment_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR, this.insert_space_before_binary_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER, this.insert_space_before_closing_brace_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, this.insert_space_before_closing_bracket_in_array_allocation_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_REFERENCE, this.insert_space_before_closing_bracket_in_array_reference? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CAST, this.insert_space_before_closing_paren_in_cast? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH, this.insert_space_before_closing_paren_in_catch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CONSTRUCTOR_DECLARATION, this.insert_space_before_closing_paren_in_constructor_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_FOR, this.insert_space_before_closing_paren_in_for? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_IF, this.insert_space_before_closing_paren_in_if? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_DECLARATION, this.insert_space_before_closing_paren_in_method_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_INVOCATION, this.insert_space_before_closing_paren_in_method_invocation? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_PARENTHESIZED_EXPRESSION, this.insert_space_before_closing_paren_in_parenthesized_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SWITCH, this.insert_space_before_closing_paren_in_switch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SYNCHRONIZED, this.insert_space_before_closing_paren_in_synchronized? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_WHILE, this.insert_space_before_closing_paren_in_while? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT, this.insert_space_before_colon_in_assert? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CASE, this.insert_space_before_colon_in_case? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CONDITIONAL, this.insert_space_before_colon_in_conditional? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_DEFAULT, this.insert_space_before_colon_in_default? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT, this.insert_space_before_colon_in_labeled_statement? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ALLOCATION_EXPRESSION, this.insert_space_before_comma_in_allocation_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ARRAY_INITIALIZER, this.insert_space_before_comma_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS, this.insert_space_before_comma_in_constructor_declaration_parameters? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS, this.insert_space_before_comma_in_constructor_declaration_throws? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS, this.insert_space_before_comma_in_explicit_constructor_call_arguments? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INCREMENTS, this.insert_space_before_comma_in_for_increments? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INITS, this.insert_space_before_comma_in_for_inits? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_INVOCATION_ARGUMENTS, this.insert_space_before_comma_in_method_invocation_arguments? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_PARAMETERS, this.insert_space_before_comma_in_method_declaration_parameters? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_THROWS, this.insert_space_before_comma_in_method_declaration_throws? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS, this.insert_space_before_comma_in_multiple_field_declarations? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS, this.insert_space_before_comma_in_multiple_local_declarations? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_SUPERINTERFACES, this.insert_space_before_comma_in_superinterfaces? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION, this.insert_space_before_opening_brace_in_anonymous_type_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ARRAY_INITIALIZER, this.insert_space_before_opening_brace_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_BLOCK, this.insert_space_before_opening_brace_in_block? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_CONSTRUCTOR_DECLARATION, this.insert_space_before_opening_brace_in_constructor_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_METHOD_DECLARATION, this.insert_space_before_opening_brace_in_method_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION, this.insert_space_before_opening_brace_in_type_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, this.insert_space_before_opening_bracket_in_array_allocation_expression ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE, this.insert_space_before_opening_bracket_in_array_reference? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE, this.insert_space_before_opening_bracket_in_array_type_reference? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH, this.insert_space_before_opening_paren_in_catch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION, this.insert_space_before_opening_paren_in_constructor_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR, this.insert_space_before_opening_paren_in_for? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_IF, this.insert_space_before_opening_paren_in_if? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_INVOCATION, this.insert_space_before_opening_paren_in_method_invocation? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_DECLARATION, this.insert_space_before_opening_paren_in_method_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SWITCH, this.insert_space_before_opening_paren_in_switch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_SWITCH, this.insert_space_before_opening_brace_in_switch? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SYNCHRONIZED, this.insert_space_before_opening_paren_in_synchronized? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION, this.insert_space_before_opening_paren_in_parenthesized_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_WHILE, this.insert_space_before_opening_paren_in_while? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_POSTFIX_OPERATOR, this.insert_space_before_postfix_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_PREFIX_OPERATOR, this.insert_space_before_prefix_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL, this.insert_space_before_question_in_conditional? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON, this.insert_space_before_semicolon? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON_IN_FOR, this.insert_space_before_semicolon_in_for? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_UNARY_OPERATOR, this.insert_space_before_unary_operator? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_BRACKETS_IN_ARRAY_TYPE_REFERENCE, this.insert_space_between_brackets_in_array_type_reference? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACES_IN_ARRAY_INITIALIZER, this.insert_space_between_empty_braces_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACKETS_IN_ARRAY_ALLOCATION_EXPRESSION, this.insert_space_between_empty_brackets_in_array_allocation_expression? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_CONSTRUCTOR_DECLARATION, this.insert_space_between_empty_parens_in_constructor_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_DECLARATION, this.insert_space_between_empty_parens_in_method_declaration? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_INVOCATION, this.insert_space_between_empty_parens_in_method_invocation? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_COMPACT_ELSE_IF, this.compact_else_if ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_KEEP_GUARDIAN_CLAUSE_ON_ONE_LINE, this.keep_guardian_clause_on_one_line ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_KEEP_ELSE_STATEMENT_ON_SAME_LINE, this.keep_else_statement_on_same_line ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_KEEP_EMPTY_ARRAY_INITIALIZER_ON_ONE_LINE, this.keep_empty_array_initializer_on_one_line ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_KEEP_SIMPLE_IF_ON_ONE_LINE, this.keep_simple_if_on_one_line ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_KEEP_THEN_STATEMENT_ON_SAME_LINE, this.keep_then_statement_on_same_line ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, Integer.toString(this.number_of_empty_lines_to_preserve));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_PUT_EMPTY_STATEMENT_ON_NEW_LINE, this.put_empty_statement_on_new_line ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT, Integer.toString(this.page_width));
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, this.use_tab ? JavaCore.TAB: JavaCore.SPACE);
+ options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, Integer.toString(this.tab_size));
+ return options;
+ }
+
+ private void setDefaultSettings()
+ {
+ this.alignment_for_arguments_in_allocation_expression = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_arguments_in_explicit_constructor_call = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_arguments_in_method_invocation = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_arguments_in_qualified_allocation_expression = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_binary_expression = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_compact_if = Alignment.M_ONE_PER_LINE_SPLIT | Alignment.M_INDENT_BY_ONE;
+ this.alignment_for_conditional_expression = Alignment.M_ONE_PER_LINE_SPLIT;
+ this.alignment_for_expressions_in_array_initializer = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_multiple_fields = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_parameters_in_constructor_declaration = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_parameters_in_method_declaration = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_selector_in_method_invocation = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_superclass_in_type_declaration = Alignment.M_NEXT_SHIFTED_SPLIT;
+ this.alignment_for_superinterfaces_in_type_declaration = Alignment.M_NEXT_SHIFTED_SPLIT;
+ this.alignment_for_throws_clause_in_constructor_declaration = Alignment.M_COMPACT_SPLIT;
+ this.alignment_for_throws_clause_in_method_declaration = Alignment.M_COMPACT_SPLIT;
+ this.align_type_members_on_columns = false;
+ this.brace_position_for_anonymous_type_declaration = DefaultCodeFormatterConstants.END_OF_LINE;
+ this.brace_position_for_array_initializer = DefaultCodeFormatterConstants.END_OF_LINE;
+ this.brace_position_for_block = DefaultCodeFormatterConstants.END_OF_LINE;
+ this.brace_position_for_block_in_case = DefaultCodeFormatterConstants.END_OF_LINE;
+ this.brace_position_for_constructor_declaration = DefaultCodeFormatterConstants.END_OF_LINE;
+//{ObjectTeams: according to code conventions of Fraunhofer FIRST
+ this.brace_position_for_method_declaration = DefaultCodeFormatterConstants.NEXT_LINE;
+//gbr}
+ this.brace_position_for_type_declaration = DefaultCodeFormatterConstants.END_OF_LINE;
+ this.brace_position_for_switch = DefaultCodeFormatterConstants.END_OF_LINE;
+ this.continuation_indentation = 2;
+ this.continuation_indentation_for_array_initializer = 2;
+ this.blank_lines_after_imports = 0;
+ this.blank_lines_after_package = 0;
+ this.blank_lines_before_field = 0;
+ this.blank_lines_before_first_class_body_declaration = 0;
+ this.blank_lines_before_imports = 0;
+ this.blank_lines_before_member_type = 0;
+ this.blank_lines_before_method = 0;
+ this.blank_lines_before_new_chunk = 0;
+ this.blank_lines_before_package = 0;
+ this.blank_lines_between_type_declarations = 0;
+ this.blank_lines_at_beginning_of_method_body = 0;
+ this.indent_statements_compare_to_block = true;
+ this.indent_statements_compare_to_body = true;
+ this.indent_body_declarations_compare_to_type_header = true;
+ this.indent_breaks_compare_to_cases = true;
+ this.indent_switchstatements_compare_to_cases = true;
+ this.indent_switchstatements_compare_to_switch = true;
+ this.insert_new_line_after_opening_brace_in_array_initializer = false;
+ this.insert_new_line_before_catch_in_try_statement = false;
+ this.insert_new_line_before_closing_brace_in_array_initializer = false;
+ this.insert_new_line_before_else_in_if_statement = false;
+ this.insert_new_line_before_finally_in_try_statement = false;
+ this.insert_new_line_before_while_in_do_statement = false;
+ this.insert_new_line_in_empty_anonymous_type_declaration = true;
+ this.insert_new_line_in_empty_block = true;
+ this.insert_new_line_in_empty_method_body = true;
+ this.insert_new_line_in_empty_type_declaration = true;
+ this.insert_space_after_assignment_operator = true;
+ this.insert_space_after_binary_operator = true;
+ this.insert_space_after_closing_paren_in_cast = true;
+ this.insert_space_after_closing_brace_in_block = true;
+ this.insert_space_after_colon_in_assert = true;
+ this.insert_space_after_colon_in_case = true;
+ this.insert_space_after_colon_in_conditional = true;
+ this.insert_space_after_colon_in_labeled_statement = true;
+ this.insert_space_after_comma_in_allocation_expression = true;
+ this.insert_space_after_comma_in_array_initializer = true;
+ this.insert_space_after_comma_in_constructor_declaration_parameters = true;
+ this.insert_space_after_comma_in_constructor_declaration_throws = true;
+ this.insert_space_after_comma_in_explicit_constructor_call_arguments = true;
+ this.insert_space_after_comma_in_for_increments = true;
+ this.insert_space_after_comma_in_for_inits = true;
+ this.insert_space_after_comma_in_method_invocation_arguments = true;
+ this.insert_space_after_comma_in_method_declaration_parameters = true;
+ this.insert_space_after_comma_in_method_declaration_throws = true;
+ this.insert_space_after_comma_in_multiple_field_declarations = true;
+ this.insert_space_after_comma_in_multiple_local_declarations = true;
+ this.insert_space_after_comma_in_superinterfaces = true;
+ this.insert_space_after_opening_bracket_in_array_allocation_expression = false;
+ this.insert_space_after_opening_bracket_in_array_reference = false;
+ this.insert_space_after_opening_brace_in_array_initializer = false;
+ this.insert_space_after_opening_paren_in_cast = false;
+ this.insert_space_after_opening_paren_in_catch = false;
+ this.insert_space_after_opening_paren_in_constructor_declaration = false;
+ this.insert_space_after_opening_paren_in_for = false;
+ this.insert_space_after_opening_paren_in_if = false;
+ this.insert_space_after_opening_paren_in_method_declaration = false;
+ this.insert_space_after_opening_paren_in_method_invocation = false;
+ this.insert_space_after_opening_paren_in_parenthesized_expression = false;
+ this.insert_space_after_opening_paren_in_switch = false;
+ this.insert_space_after_opening_paren_in_synchronized = false;
+ this.insert_space_after_opening_paren_in_while = false;
+ this.insert_space_after_postfix_operator = false;
+ this.insert_space_after_prefix_operator = false;
+ this.insert_space_after_question_in_conditional = true;
+ this.insert_space_after_semicolon_in_for = true;
+ this.insert_space_after_unary_operator = false;
+ this.insert_space_before_assignment_operator = true;
+ this.insert_space_before_binary_operator = true;
+ this.insert_space_before_closing_brace_in_array_initializer = false;
+ this.insert_space_before_closing_bracket_in_array_allocation_expression = false;
+ this.insert_space_before_closing_bracket_in_array_reference = false;
+ this.insert_space_before_closing_paren_in_cast = false;
+ this.insert_space_before_closing_paren_in_catch = false;
+ this.insert_space_before_closing_paren_in_constructor_declaration = false;
+ this.insert_space_before_closing_paren_in_for = false;
+ this.insert_space_before_closing_paren_in_if = false;
+ this.insert_space_before_closing_paren_in_method_declaration = false;
+ this.insert_space_before_closing_paren_in_method_invocation = false;
+ this.insert_space_before_closing_paren_in_parenthesized_expression = false;
+ this.insert_space_before_closing_paren_in_switch = false;
+ this.insert_space_before_closing_paren_in_synchronized = false;
+ this.insert_space_before_closing_paren_in_while = false;
+ this.insert_space_before_colon_in_assert = true;
+ this.insert_space_before_colon_in_case = true;
+ this.insert_space_before_colon_in_conditional = true;
+ this.insert_space_before_colon_in_default = true;
+ this.insert_space_before_colon_in_labeled_statement = true;
+ this.insert_space_before_comma_in_allocation_expression = false;
+ this.insert_space_before_comma_in_array_initializer = false;
+ this.insert_space_before_comma_in_constructor_declaration_parameters = false;
+ this.insert_space_before_comma_in_constructor_declaration_throws = false;
+ this.insert_space_before_comma_in_explicit_constructor_call_arguments = false;
+ this.insert_space_before_comma_in_for_increments = false;
+ this.insert_space_before_comma_in_for_inits = false;
+ this.insert_space_before_comma_in_method_invocation_arguments = false;
+ this.insert_space_before_comma_in_method_declaration_parameters = false;
+ this.insert_space_before_comma_in_method_declaration_throws = false;
+ this.insert_space_before_comma_in_multiple_field_declarations = false;
+ this.insert_space_before_comma_in_multiple_local_declarations = false;
+ this.insert_space_before_comma_in_superinterfaces = false;
+ this.insert_space_before_opening_brace_in_anonymous_type_declaration = true;
+ this.insert_space_before_opening_brace_in_array_initializer = false;
+ this.insert_space_before_opening_brace_in_block = true;
+ this.insert_space_before_opening_brace_in_constructor_declaration = true;
+ this.insert_space_before_opening_brace_in_method_declaration = true;
+ this.insert_space_before_opening_brace_in_switch = true;
+ this.insert_space_before_opening_brace_in_type_declaration = true;
+ this.insert_space_before_opening_bracket_in_array_allocation_expression = false;
+ this.insert_space_before_opening_bracket_in_array_reference = false;
+ this.insert_space_before_opening_bracket_in_array_type_reference = false;
+ this.insert_space_before_opening_paren_in_catch = true;
+ this.insert_space_before_opening_paren_in_constructor_declaration = false;
+ this.insert_space_before_opening_paren_in_for = true;
+ this.insert_space_before_opening_paren_in_if = true;
+ this.insert_space_before_opening_paren_in_method_invocation = false;
+ this.insert_space_before_opening_paren_in_method_declaration = false;
+ this.insert_space_before_opening_paren_in_switch = true;
+ this.insert_space_before_opening_paren_in_synchronized = true;
+ this.insert_space_before_opening_paren_in_parenthesized_expression = false;
+ this.insert_space_before_opening_paren_in_while = true;
+ this.insert_space_before_postfix_operator = false;
+ this.insert_space_before_prefix_operator = false;
+ this.insert_space_before_question_in_conditional = true;
+ this.insert_space_before_semicolon = false;
+ this.insert_space_before_semicolon_in_for = false;
+ this.insert_space_before_unary_operator = false;
+ this.insert_space_between_brackets_in_array_type_reference = false;
+ this.insert_space_between_empty_braces_in_array_initializer = false;
+ this.insert_space_between_empty_brackets_in_array_allocation_expression = false;
+ this.insert_space_between_empty_parens_in_constructor_declaration = false;
+ this.insert_space_between_empty_parens_in_method_declaration = false;
+ this.insert_space_between_empty_parens_in_method_invocation = false;
+ this.compact_else_if = true;
+ this.keep_guardian_clause_on_one_line = false;
+ this.keep_else_statement_on_same_line = false;
+ this.keep_empty_array_initializer_on_one_line = false;
+ this.keep_simple_if_on_one_line = false;
+ this.keep_then_statement_on_same_line = false;
+ this.number_of_empty_lines_to_preserve = 1;
+ this.put_empty_statement_on_new_line = false;
+ this.tab_size = 4;
+ this.page_width = 80;
+ this.use_tab = true; // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=49081
+ }
+}
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/test.xml b/testplugins/org.eclipse.objectteams.otdt.ui.tests/test.xml
new file mode 100644
index 0000000..47d6fd5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/test.xml
@@ -0,0 +1,66 @@
+<project name="testsuite" default="run" basedir=".">
+
+ <property name="otdt-tests-workspace" value="${test.eclipseDir}/otdt-tests-workspace"/>
+
+ <!-- sets the properties eclipseTest-home, and library-file -->
+ <property name="plugin-name" value="org.eclipse.objectteams.otdt.ui.tests"/>
+
+ <!-- library.xml need these properties-->
+ <property name="eclipse-home" value="${test.eclipseDir}"/>
+ <property name="test.target" value="performance"/>
+
+ <property name="library-file" value="${test.eclipseDir}/plugins/${org.eclipse.test}/library.xml"/>
+
+ <!-- This target holds all initialization code that needs to be done for -->
+ <!-- all tests that are to be run. Initialization for individual tests -->
+ <!-- should be done within the body of the suite target. -->
+ <target name="init">
+ <tstamp/>
+ <delete>
+ <fileset dir="${test.eclipseDir}" includes="org.eclipse.objectteams.otdt.ui.tests.AllTests.xml,${plugin-name}.${file-id}.xml"/>
+ </delete>
+ </target>
+
+ <!-- This target defines the tests that need to be run. -->
+ <target name="suite">
+
+ <!-- All OTDT UI tests -->
+ <property name="otdt-ui-folder"
+ value="${otdt-tests-workspace}/otdt-ui-folder"/>
+ <delete dir="${otdt-ui-folder}" quiet="true"/>
+
+ <ant target="ui-test" antfile="${library-file}" dir="${test.eclipseDir}">
+ <property name="data-dir" value="${otdt-ui-folder}"/>
+ <property name="plugin-name" value="${plugin-name}"/>
+ <property name="classname"
+ value="org.eclipse.objectteams.otdt.ui.tests.AllTests"/>
+ </ant>
+ </target>
+
+
+
+ <target name="checkOS">
+ <condition property="os.isWindows">
+ <os family="windows"/>
+ </condition>
+ </target>
+
+ <!-- This target holds code to cleanup the testing environment after -->
+ <!-- after all of the tests have been run. You can use this target to -->
+ <!-- delete temporary files that have been created. -->
+ <target name="cleanup">
+
+ </target>
+
+ <!-- This target runs the test suite. Any actions that need to happen -->
+ <!-- after all the tests have been run should go here. -->
+ <target name="run" depends="init,suite,cleanup">
+<!--
+ <ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">
+ <property name="includes" value="org.eclipse.objectteams.otdt.ui.tests.AllTests.xml"/>
+ <property name="output-file" value="${plugin-name}.${file-id}.xml"/>
+ </ant>
+-->
+ </target>
+
+</project>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/.classpath b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/.classpath
new file mode 100644
index 0000000..72bc474
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="var" path="JCL_LIB" sourcepath="JCL_SRC" rootpath="JCL_SRCROOT"/>
+ <classpathentry kind="var" path="OTDT_INSTALLDIR/lib/otre.jar"/>
+</classpath>
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/.project b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/.project
new file mode 100644
index 0000000..906d5fd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>CallinMarker</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/bar/BaseTeam.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/bar/BaseTeam.java
new file mode 100644
index 0000000..0c3d462
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/bar/BaseTeam.java
@@ -0,0 +1,9 @@
+package bar;
+
+public team class BaseTeam {
+ protected class R playedBy MissingBase {
+ somethingElse <- replace toString;
+ void somethingElse () {}
+ }
+ public void murx() {}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/bar/TeamTeam.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/bar/TeamTeam.java
new file mode 100644
index 0000000..bd3c3d3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/bar/TeamTeam.java
@@ -0,0 +1,7 @@
+package bar;
+public team class TeamTeam {
+ protected class TR playedBy BaseTeam {
+ void nix() {}
+ nix <- after murx;
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle/Base1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle/Base1.java
new file mode 100644
index 0000000..4ca1b9a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle/Base1.java
@@ -0,0 +1,9 @@
+package cycle;
+public class Base1 {
+ public static class Inner {
+ void foo() {}
+ static class Leaf extends Inner {
+ @Override void foo() {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle/CTeam.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle/CTeam.java
new file mode 100644
index 0000000..e7599e1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle/CTeam.java
@@ -0,0 +1,8 @@
+package cycle;
+import base cycle.Base1.Inner;
+public team class CTeam {
+ protected class R playedBy Inner {
+ void nop() {}
+ nop <- after foo;
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/Main.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/Main.java
new file mode 100644
index 0000000..85583f6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/Main.java
@@ -0,0 +1,14 @@
+package foo;
+
+public class Main {
+
+ public static void main(String[] args) {
+// MyTeam t = new MyTeam();
+// t.activate();
+ MyBase b = new MyBase();
+ b.baseMethod();
+ b.bm2();
+ b.bm3();
+ b.bm4();
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyBase.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyBase.java
new file mode 100644
index 0000000..9c09b17
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyBase.java
@@ -0,0 +1,24 @@
+package foo;
+
+public class MyBase {
+
+ public void baseMethod() {
+ System.out.println("baseMethod");
+ }
+
+ public void bm2() {
+ System.out.println("bm2");
+ }
+
+ public void bm3() {
+ System.out.println("bm3");
+ }
+
+ public void foobar() {
+ System.out.println("MyBase.foobar()");
+ }
+
+ public void bm4() {
+ System.out.println("MyBase.bm4()");
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam.java
new file mode 100644
index 0000000..c7608a4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam.java
@@ -0,0 +1,35 @@
+package foo;
+
+public team class MyTeam {
+
+ public class R1 playedBy MyBase
+ {
+ public void foo1()
+ {
+ System.out.println("R1.foo()");
+ }
+
+ public void foo2()
+ {
+ System.out.println("R1.foo2()");
+ }
+
+ public void foo3()
+ {
+ System.out.println("R1.foo3()");
+ }
+
+ foo1 <- after baseMethod;
+ }
+
+ public class R2 extends R1
+ {
+ public void foobar1()
+ {
+ System.out.println("R2.foobar1()");
+ }
+
+ foo2 <- after bm2;
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam2.java
new file mode 100644
index 0000000..14d6b9b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam2.java
@@ -0,0 +1,10 @@
+package foo;
+
+public team class MyTeam2 extends MyTeam {
+
+ public class R1
+ {
+ foo3 <- after bm3;
+ }
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam2/R2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam2/R2.java
new file mode 100644
index 0000000..7601b22
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/foo/MyTeam2/R2.java
@@ -0,0 +1,10 @@
+team package foo.MyTeam2;
+
+public class R2 {
+ R2()
+ {
+ base();
+ }
+
+ foobar1 <- after bm4;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/.classpath b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/.classpath
new file mode 100644
index 0000000..db005f8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/.classpath
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="teams"/>
+ <classpathentry kind="src" path="internaldefinedrole"/>
+ <classpathentry kind="var" path="JCL_LIB" sourcepath="JCL_SRC" rootpath="JCL_SRCROOT"/>
+ <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="lib" sourcepath="src" path="bins"/>
+
+ <classpathentry kind="var" path="OTDT_INSTALLDIR/lib/otre.jar"/>
+</classpath>
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/.project b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/.project
new file mode 100644
index 0000000..bf5f830
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>CreationTestProject</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/EmptyClass.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/EmptyClass.java
new file mode 100644
index 0000000..2ee3c3a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/EmptyClass.java
@@ -0,0 +1,10 @@
+package ordinarypkg;
+
+/**
+ * @author kaschja
+ * @version $Id: EmptyClass.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class EmptyClass
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/InterfaceWithOneMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/InterfaceWithOneMethod.java
new file mode 100644
index 0000000..cca7529
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/InterfaceWithOneMethod.java
@@ -0,0 +1,10 @@
+package ordinarypkg;
+
+/**
+ * @author kaschja
+ * @version $Id: InterfaceWithOneMethod.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public interface InterfaceWithOneMethod
+{
+ public abstract void methodToImplement();
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/InterfaceWithTwoMethods.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/InterfaceWithTwoMethods.java
new file mode 100644
index 0000000..100e574
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/ordinarypkg/InterfaceWithTwoMethods.java
@@ -0,0 +1,11 @@
+package ordinarypkg;
+
+/**
+ * @author kaschja
+ * @version
+ */
+public interface InterfaceWithTwoMethods
+{
+ public abstract void methodToImplementA();
+ public abstract void methodToImplementB();
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/AbstractTeamWithAbstractMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/AbstractTeamWithAbstractMethod.java
new file mode 100644
index 0000000..9f9b363
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/AbstractTeamWithAbstractMethod.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: AbstractTeamWithAbstractMethod.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public abstract team class AbstractTeamWithAbstractMethod
+{
+ public abstract void methodToImplement();
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/EmptyBaseTeam.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/EmptyBaseTeam.java
new file mode 100644
index 0000000..095cb71
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/EmptyBaseTeam.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: EmptyBaseTeam.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class EmptyBaseTeam
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty.java
new file mode 100644
index 0000000..5849569
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version
+ */
+public team class TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyEmpty extends TeamWithRoleWithAbstractMethod
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyWithOneRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyWithOneRole.java
new file mode 100644
index 0000000..18617bc
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyWithOneRole.java
@@ -0,0 +1,13 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version
+ */
+public team class TeamForRoleWithExplicitSuperclassAndInheritedMethod_PreviouslyWithOneRole
+{
+ public abstract class RoleWithAbstractMethod
+ {
+ public abstract void methodToImplement1();
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclass_PreviouslyEmpty.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclass_PreviouslyEmpty.java
new file mode 100644
index 0000000..4372fb2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclass_PreviouslyEmpty.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version
+ */
+public team class TeamForRoleWithExplicitSuperclass_PreviouslyEmpty extends TeamWithRoleWithAbstractMethod
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclass_PreviouslyWithOneRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclass_PreviouslyWithOneRole.java
new file mode 100644
index 0000000..c9f09e8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithExplicitSuperclass_PreviouslyWithOneRole.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version
+ */
+public team class TeamForRoleWithExplicitSuperclass_PreviouslyWithOneRole
+{
+ public class SuperRole {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithImplicitSuperClassAndInheritedMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithImplicitSuperClassAndInheritedMethod.java
new file mode 100644
index 0000000..bd023b2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithImplicitSuperClassAndInheritedMethod.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithImplicitSuperClassAndInheritedMethod.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithImplicitSuperClassAndInheritedMethod extends TeamWithRoleWithAbstractMethod
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOneSuperInterface.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOneSuperInterface.java
new file mode 100644
index 0000000..fba8262
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOneSuperInterface.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithOneSuperInterface.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithOneSuperInterface
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOneSuperInterfaceAndInheritedMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOneSuperInterfaceAndInheritedMethod.java
new file mode 100644
index 0000000..a293774
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOneSuperInterfaceAndInheritedMethod.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithOneSuperInterfaceAndInheritedMethod.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithOneSuperInterfaceAndInheritedMethod
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOrdinaryBase.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOrdinaryBase.java
new file mode 100644
index 0000000..a2ba9f3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithOrdinaryBase.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithOrdinaryBase.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithOrdinaryBase
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperInterfaces.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperInterfaces.java
new file mode 100644
index 0000000..cc282d2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperInterfaces.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithSeveralSuperInterfaces.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithSeveralSuperInterfaces
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods.java
new file mode 100644
index 0000000..19fced3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithSeveralSuperInterfacesAndInheritedMethods
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperTypesAndInheritedMethods.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperTypesAndInheritedMethods.java
new file mode 100644
index 0000000..758c27f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithSeveralSuperTypesAndInheritedMethods.java
@@ -0,0 +1,13 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithSeveralSuperTypesAndInheritedMethods.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithSeveralSuperTypesAndInheritedMethods extends TeamWithRoleWithAbstractMethod
+{
+ public abstract class AbstractSuperRole
+ {
+ public abstract void methodToImplementX();
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithTeamBase.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithTeamBase.java
new file mode 100644
index 0000000..b78253a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForRoleWithTeamBase.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForRoleWithTeamBase.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForRoleWithTeamBase
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole.java
new file mode 100644
index 0000000..cb657b7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForSimpleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForSimpleRole
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole_PreviouslyWithOneRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole_PreviouslyWithOneRole.java
new file mode 100644
index 0000000..657d376
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole_PreviouslyWithOneRole.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForSimpleRole_PreviouslyWithOneRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForSimpleRole_PreviouslyWithOneRole
+{
+ public class PreviouslyExistingRoleClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole_PreviouslyWithTwoRoles.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole_PreviouslyWithTwoRoles.java
new file mode 100644
index 0000000..f4dd822
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamForSimpleRole_PreviouslyWithTwoRoles.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamForSimpleRole_PreviouslyWithTwoRoles.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamForSimpleRole_PreviouslyWithTwoRoles
+{
+ public class PreviouslyExistingRoleClassA {}
+
+ public class PreviouslyExistingRoleClassB {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamWithRoleWithAbstractMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamWithRoleWithAbstractMethod.java
new file mode 100644
index 0000000..dff1fec
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/internaldefinedrole/teampkg/TeamWithRoleWithAbstractMethod.java
@@ -0,0 +1,13 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: TeamWithRoleWithAbstractMethod.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamWithRoleWithAbstractMethod
+{
+ public abstract class RoleWithAbstractMethod
+ {
+ public abstract void methodToImplement1();
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/ordinarypkg/InterfaceWithOneMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/ordinarypkg/InterfaceWithOneMethod.java
new file mode 100644
index 0000000..28484b3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/ordinarypkg/InterfaceWithOneMethod.java
@@ -0,0 +1,10 @@
+package ordinarypkg;
+
+/**
+ * @author kaschja
+ * @version
+ */
+public interface InterfaceWithOneMethod
+{
+ public abstract void methodToImplement();
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/teampkg/AbstractTeamWithAbstractMethod.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/teampkg/AbstractTeamWithAbstractMethod.java
new file mode 100644
index 0000000..d6cf2aa
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/teampkg/AbstractTeamWithAbstractMethod.java
@@ -0,0 +1,10 @@
+package teampkg;
+
+/**
+ * @author kaschja
+ * @version $Id: AbstractTeamWithAbstractMethod.java 5885 2005-06-13 14:04:51Z anklam $
+ */
+public abstract team class AbstractTeamWithAbstractMethod
+{
+ public abstract void methodToImplement();
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/teampkg/TeamForNestedTeam.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/teampkg/TeamForNestedTeam.java
new file mode 100644
index 0000000..dedbcd8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CreationTestProject/teams/teampkg/TeamForNestedTeam.java
@@ -0,0 +1,5 @@
+package teampkg;
+
+public team class TeamForNestedTeam {
+ // empty
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/.classpath b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/.classpath
new file mode 100644
index 0000000..a5d9fdf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/.classpath
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="unbound"/>
+ <classpathentry kind="src" path="boundtoordinary"/>
+ <classpathentry kind="src" path="boundtoteam"/>
+ <classpathentry kind="src" path="bound/toteam"/>
+ <classpathentry kind="src" path="bound/toordinary"/>
+ <classpathentry kind="var" path="JCL_LIB" sourcepath="JCL_SRC" rootpath="JCL_SRCROOT"/>
+ <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="lib" sourcepath="src" path="bins"/>
+
+ <classpathentry kind="var" path="OTDT_INSTALLDIR/lib/otre.jar"/>
+</classpath>
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/.project b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/.project
new file mode 100644
index 0000000..a9197a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ExternalDefinedRole</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/basepkg/SampleBase.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/basepkg/SampleBase.java
new file mode 100644
index 0000000..dc8ce10
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/basepkg/SampleBase.java
@@ -0,0 +1,9 @@
+package basepkg;
+
+/**
+ * $Id: SampleBase.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleBase
+{
+ public void baseMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_1.java
new file mode 100644
index 0000000..3aaab4a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_1.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_1.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_1
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_1/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_1/SampleRole.java
new file mode 100644
index 0000000..2c8ca51
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_1/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_1;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_2.java
new file mode 100644
index 0000000..4b3e03a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_2.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_2.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_2
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_2/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_2/SampleRole.java
new file mode 100644
index 0000000..c874226
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_2/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_2;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public String roleAttr = 'AStringAttribut';
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3a.java
new file mode 100644
index 0000000..cffaab6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3a.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_3a.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3a
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3a/SampleRole.java
new file mode 100644
index 0000000..9312cc5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3a/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public void roleMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3b.java
new file mode 100644
index 0000000..2fd7ad6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3b.java
@@ -0,0 +1,8 @@
+package teampkg;
+
+/**
+ * $Id: Team_3b.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3b
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3b/SampleRole.java
new file mode 100644
index 0000000..5a092a8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3b/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public void roleMethod(String paraObj) {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3c.java
new file mode 100644
index 0000000..844506c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3c.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_3c.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3c
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3c/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3c/SampleRole.java
new file mode 100644
index 0000000..db4f4fb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3c/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3c;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public String roleMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3d.java
new file mode 100644
index 0000000..d0fdfed
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3d.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_3d.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3d
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3d/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3d/SampleRole.java
new file mode 100644
index 0000000..107695e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_3d/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3d;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public void roleMethod() throws Exception {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4a.java
new file mode 100644
index 0000000..b6243f8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4a.java
@@ -0,0 +1,8 @@
+package teampkg;
+
+/**
+ * $Id: Team_4a.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_4a
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4a/SampleRole.java
new file mode 100644
index 0000000..64d0a4c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4a/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_4a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public class AnInnerClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4b.java
new file mode 100644
index 0000000..1d5728a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4b.java
@@ -0,0 +1,8 @@
+package teampkg;
+
+/**
+ * $Id: Team_4b.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_4b
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4b/SampleRole.java
new file mode 100644
index 0000000..dfcdf87
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_4b/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_4b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public team class AnInnerTeamClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5a.java
new file mode 100644
index 0000000..78d4bca
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5a.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5a.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5a
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5a/SampleRole.java
new file mode 100644
index 0000000..370deeb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5a/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public abstract void roleMethod();
+ roleMethod -> baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5b.java
new file mode 100644
index 0000000..59951f6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5b.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5b.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5b
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5b/SampleRole.java
new file mode 100644
index 0000000..0d6c895
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5b/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public void roleMethod() {}
+ roleMethod => baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5c.java
new file mode 100644
index 0000000..c31cae0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5c.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5c.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5c
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5c/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5c/SampleRole.java
new file mode 100644
index 0000000..21cf675
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5c/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5c;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public void roleMethod() {}
+ roleMethod <- before baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5d.java
new file mode 100644
index 0000000..aff286e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5d.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5d.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5d
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5d/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5d/SampleRole.java
new file mode 100644
index 0000000..87669bd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5d/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5d;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public callin void roleMethod() {}
+ roleMethod <- replace baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5e.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5e.java
new file mode 100644
index 0000000..399e402
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5e.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5e.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5e
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5e/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5e/SampleRole.java
new file mode 100644
index 0000000..ab9633a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoordinary/teampkg/Team_5e/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5e;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy basepkg.SampleBase
+{
+ public void roleMethod() {}
+ roleMethod <- after baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/TeamB.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/TeamB.java
new file mode 100644
index 0000000..8d824cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/TeamB.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: TeamB.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamB
+{
+ public void baseMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_1.java
new file mode 100644
index 0000000..3aaab4a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_1.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_1.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_1
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_1/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_1/SampleRole.java
new file mode 100644
index 0000000..5b88926
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_1/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_1;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_2.java
new file mode 100644
index 0000000..4b3e03a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_2.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_2.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_2
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_2/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_2/SampleRole.java
new file mode 100644
index 0000000..01bb31d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_2/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_2;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 21820 2009-06-30 22:50:01Z stephan $
+ */
+public class SampleRole playedBy TeamB
+{
+ public String roleAttr = "AStringAttribut";
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3a.java
new file mode 100644
index 0000000..cffaab6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3a.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_3a.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3a
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3a/SampleRole.java
new file mode 100644
index 0000000..437f2e4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3a/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public void roleMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3b.java
new file mode 100644
index 0000000..2fd7ad6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3b.java
@@ -0,0 +1,8 @@
+package teampkg;
+
+/**
+ * $Id: Team_3b.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3b
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3b/SampleRole.java
new file mode 100644
index 0000000..d7c5c17
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3b/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public void roleMethod(String paraObj) {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3c.java
new file mode 100644
index 0000000..844506c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3c.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_3c.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3c
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3c/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3c/SampleRole.java
new file mode 100644
index 0000000..895a93e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3c/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3c;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public String roleMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3d.java
new file mode 100644
index 0000000..d0fdfed
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3d.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_3d.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_3d
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3d/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3d/SampleRole.java
new file mode 100644
index 0000000..8e50e5b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_3d/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3d;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public void roleMethod() throws Exception {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4a.java
new file mode 100644
index 0000000..b6243f8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4a.java
@@ -0,0 +1,8 @@
+package teampkg;
+
+/**
+ * $Id: Team_4a.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_4a
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4a/SampleRole.java
new file mode 100644
index 0000000..84185f7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4a/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_4a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 6589 2005-08-11 17:52:37Z carp $
+ */
+public class SampleRole playedBy TeamB
+{
+ public class AnInnerClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4b.java
new file mode 100644
index 0000000..1d5728a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4b.java
@@ -0,0 +1,8 @@
+package teampkg;
+
+/**
+ * $Id: Team_4b.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_4b
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4b/SampleRole.java
new file mode 100644
index 0000000..761b24d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_4b/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_4b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public team class AnInnerTeamClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5a.java
new file mode 100644
index 0000000..78d4bca
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5a.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5a.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5a
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5a/SampleRole.java
new file mode 100644
index 0000000..237daca
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5a/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public abstract void roleMethod();
+ roleMethod -> baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5b.java
new file mode 100644
index 0000000..59951f6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5b.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5b.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5b
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5b/SampleRole.java
new file mode 100644
index 0000000..95b608a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5b/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public void roleMethod() {}
+ roleMethod => baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5c.java
new file mode 100644
index 0000000..c31cae0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5c.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5c.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5c
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5c/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5c/SampleRole.java
new file mode 100644
index 0000000..a02bc4b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5c/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5c;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public void roleMethod() {}
+ roleMethod <- before baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5d.java
new file mode 100644
index 0000000..aff286e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5d.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5d.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5d
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5d/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5d/SampleRole.java
new file mode 100644
index 0000000..6982460
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5d/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5d;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public callin void roleMethod() {}
+ roleMethod <- replace baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5e.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5e.java
new file mode 100644
index 0000000..399e402
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5e.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: Team_5e.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class Team_5e
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5e/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5e/SampleRole.java
new file mode 100644
index 0000000..befab8e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/boundtoteam/teampkg/Team_5e/SampleRole.java
@@ -0,0 +1,11 @@
+team package teampkg.Team_5e;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole playedBy TeamB
+{
+ public void roleMethod() {}
+ roleMethod <- after baseMethod;
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_1.java
new file mode 100644
index 0000000..f17fae2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_1.java
@@ -0,0 +1,11 @@
+package teampkg;
+
+/**
+ * $Id: Team_1.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined, unbound role class, empty
+ */
+public team class Team_1
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_1/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_1/SampleRole.java
new file mode 100644
index 0000000..f71091f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_1/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_1;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole
+{
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_2.java
new file mode 100644
index 0000000..d98e54f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_2.java
@@ -0,0 +1,11 @@
+package teampkg;
+
+/**
+ * $Id: Team_2.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined role class with an attribut
+ */
+public team class Team_2
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_2/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_2/SampleRole.java
new file mode 100644
index 0000000..a05cb25
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_2/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_2;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 21820 2009-06-30 22:50:01Z stephan $
+ */
+public class SampleRole
+{
+ public String roleAttr = "AStringAttribut";
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3a.java
new file mode 100644
index 0000000..efe0eda
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3a.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * $Id: Team_3a.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined role class with a method
+ * the method has no parameters
+ */
+public team class Team_3a
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3a/SampleRole.java
new file mode 100644
index 0000000..5f80549
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3a/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole
+{
+ public void roleMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3b.java
new file mode 100644
index 0000000..8f2538d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3b.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * $Id: Team_3b.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined role class with a method
+ * the method has an input parameter
+ */
+public team class Team_3b
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3b/SampleRole.java
new file mode 100644
index 0000000..be42c18
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3b/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole
+{
+ public void roleMethod(String paraObj) {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3c.java
new file mode 100644
index 0000000..413f4a5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3c.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * $Id: Team_3c.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined role class with a method
+ * the method has an output parameter
+ */
+public team class Team_3c
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3c/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3c/SampleRole.java
new file mode 100644
index 0000000..28ef763
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3c/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3c;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole
+{
+ public String roleMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3d.java
new file mode 100644
index 0000000..b74fd61
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3d.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * $Id: Team_3d.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase
+ * an external defined role class with a method
+ * the method has a throw-clause
+ */
+public team class Team_3d
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3d/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3d/SampleRole.java
new file mode 100644
index 0000000..495f474
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_3d/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_3d;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole
+{
+ public void roleMethod() throws Exception {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4a.java
new file mode 100644
index 0000000..5a2d057
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4a.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * $Id: Team_4a.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined role class with an innerclass
+ * the innerclass is an ordinary class
+ */
+public team class Team_4a
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4a/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4a/SampleRole.java
new file mode 100644
index 0000000..e1ab78a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4a/SampleRole.java
@@ -0,0 +1,10 @@
+team package teampkg.Team_4a;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 6589 2005-08-11 17:52:37Z carp $
+ */
+public class SampleRole
+{
+ public class AnInnerClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4b.java
new file mode 100644
index 0000000..f100b52
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4b.java
@@ -0,0 +1,12 @@
+package teampkg;
+
+/**
+ * $Id: Team_4b.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an external defined role class with an innerclass
+ * the innerclass is a team class
+ */
+public team class Team_4b
+{
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4b/SampleRole.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4b/SampleRole.java
new file mode 100644
index 0000000..e7e2839
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/ExternalDefinedRole/unbound/teampkg/Team_4b/SampleRole.java
@@ -0,0 +1,10 @@
+package teampkg.Team_4b;
+
+/**
+ * @author kaschja
+ * @version $Id: SampleRole.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleRole
+{
+ public team class AnInnerTeamClass {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/.classpath b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/.classpath
new file mode 100644
index 0000000..1a916c9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/.classpath
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="unbound"/>
+ <classpathentry kind="src" path="boundtoordinary"/>
+ <classpathentry kind="src" path="boundtoteam"/>
+ <classpathentry kind="src" path="ordinaryclasses"/>
+ <classpathentry kind="var" path="JCL_LIB" sourcepath="JCL_SRC" rootpath="JCL_SRCROOT"/>
+ <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="lib" sourcepath="src" path="bins"/>
+
+ <classpathentry kind="var" path="OTDT_INSTALLDIR/lib/otre.jar"/>
+</classpath>
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/.project b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/.project
new file mode 100644
index 0000000..cd779f8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>InternalDefinedRole</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/basepkg/SampleBase.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/basepkg/SampleBase.java
new file mode 100644
index 0000000..dc8ce10
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/basepkg/SampleBase.java
@@ -0,0 +1,9 @@
+package basepkg;
+
+/**
+ * $Id: SampleBase.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public class SampleBase
+{
+ public void baseMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_1.java
new file mode 100644
index 0000000..95f12de
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_1.java
@@ -0,0 +1,13 @@
+package teampkg;
+
+/**
+ * $Id: Team_1.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class, empty
+ * the base class of the role is an ordinary class
+ */
+public team class Team_1
+{
+ public class SampleRole playedBy basepkg.SampleBase {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_2.java
new file mode 100644
index 0000000..a376292
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_2.java
@@ -0,0 +1,16 @@
+package teampkg;
+
+/**
+ * $Id: Team_2.java 21820 2009-06-30 22:50:01Z stephan $
+ *
+ * testcase:
+ * an internal defined bound role class with an attribut
+ * the base class of the role is an ordinary class
+ */
+public team class Team_2
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public String roleAttr = "AStringAttribut";
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3a.java
new file mode 100644
index 0000000..4834c1f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3a.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_3a.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class with a method
+ * the method has no parameters
+ * the base class of the role is an ordinary class
+ */
+public team class Team_3a
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public void roleMethod() {}
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3b.java
new file mode 100644
index 0000000..fb5f0c3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3b.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_3b.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class with a method
+ * the method has an input parameter
+ * the base class of the role is an ordinary class
+ */
+public team class Team_3b
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public void roleMethod(String paraObj) {}
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3c.java
new file mode 100644
index 0000000..c4f7ea9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3c.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_3c.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class with a method
+ * the method has an output parameter
+ * the base class of the role is an ordinary class
+ */
+public team class Team_3c
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public String roleMethod() {}
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3d.java
new file mode 100644
index 0000000..6adcd2d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_3d.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_3d.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase
+ * an internal defined bound role class with a method
+ * the method has a throw-clause
+ * the base class of the role is an ordinary class
+ */
+public team class Team_3d
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public void roleMethod() throws Exception {}
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_4a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_4a.java
new file mode 100644
index 0000000..0a30f7f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_4a.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_4a.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class with an innerclass
+ * the innerclass is an ordinary class
+ * the base class of the role is an ordinary class
+ */
+public team class Team_4a
+{
+ public team class SampleRole playedBy basepkg.SampleBase
+ {
+ public class AnInnerClass {}
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_4b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_4b.java
new file mode 100644
index 0000000..82e7a00
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_4b.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_4b.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class with an innerclass
+ * the innerclass is a team class
+ * the base class of the role is an ordinary class
+ */
+public team class Team_4b
+{
+ public team class SampleRole playedBy basepkg.SampleBase
+ {
+ public team class AnInnerTeamClass {}
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5a.java
new file mode 100644
index 0000000..fd50e11
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5a.java
@@ -0,0 +1,19 @@
+package teampkg;
+
+/**
+ * $Id: Team_5a.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase
+ * a bound role class with a method and a method mapping
+ * the method is abstract and has no parameters
+ * the method mapping is a callout mapping (->)
+ * the base class of the role is an ordinary class
+ */
+public team class Team_5a
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public abstract void roleMethod();
+ roleMethod -> baseMethod;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5b.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5b.java
new file mode 100644
index 0000000..4fe7f7a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5b.java
@@ -0,0 +1,19 @@
+package teampkg;
+
+/**
+ * $Id: Team_5b.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase
+ * a bound role class with a method and a method mapping
+ * the method is abstract and has no parameters
+ * the method mapping is a callout mapping (=>)
+ * the base class of the role is an ordinary class
+ */
+public team class Team_5b
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public void roleMethod() {}
+ roleMethod => baseMethod;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5c.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5c.java
new file mode 100644
index 0000000..4820f37
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5c.java
@@ -0,0 +1,19 @@
+package teampkg;
+
+/**
+ * $Id: Team_5c.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * a bound role class with a method and a method mapping
+ * the method is concrete and has no parameters
+ * the method mapping is a before-callin mapping
+ * the base class of the role is an ordinary class
+ */
+public team class Team_5c
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public void roleMethod() {}
+ roleMethod <- before baseMethod;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5d.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5d.java
new file mode 100644
index 0000000..950e9e8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5d.java
@@ -0,0 +1,19 @@
+package teampkg;
+
+/**
+ * $Id: Team_5d.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * a bound role class with a method and a method mapping
+ * the method is concrete, has no parameters but a callin modifier
+ * the method mapping is a replace-callin mapping
+ * the base class of the role is an ordinary class
+ */
+public team class Team_5d
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public callin void roleMethod() {}
+ roleMethod <- replace baseMethod;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5e.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5e.java
new file mode 100644
index 0000000..9ae8d7d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoordinary/teampkg/Team_5e.java
@@ -0,0 +1,19 @@
+package teampkg;
+
+/**
+ * $Id: Team_5e.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * a bound role class with a method and a method mapping
+ * the method is concrete and has no parameters
+ * the method mapping is an after-callin mapping
+ * the base class of the role is an ordinary class
+ */
+public team class Team_5e
+{
+ public class SampleRole playedBy basepkg.SampleBase
+ {
+ public void roleMethod() {}
+ roleMethod <- after baseMethod;
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/TeamB.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/TeamB.java
new file mode 100644
index 0000000..8d824cb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/TeamB.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: TeamB.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamB
+{
+ public void baseMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/TeamC.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/TeamC.java
new file mode 100644
index 0000000..b6a2eaa
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/TeamC.java
@@ -0,0 +1,9 @@
+package teampkg;
+
+/**
+ * $Id: TeamC.java 5749 2005-05-30 11:52:29Z anklam $
+ */
+public team class TeamC
+{
+ public void baseMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_1.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_1.java
new file mode 100644
index 0000000..bbc77cf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_1.java
@@ -0,0 +1,13 @@
+package teampkg;
+
+/**
+ * $Id: Team_1.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal defined bound role class, empty
+ * the base class of the role is a team
+ */
+public team class Team_1
+{
+ public class SampleRole playedBy TeamB {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_2.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_2.java
new file mode 100644
index 0000000..6122c71
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_2.java
@@ -0,0 +1,16 @@
+package teampkg;
+
+/**
+ * $Id: Team_2.java 21820 2009-06-30 22:50:01Z stephan $
+ *
+ * testcase:
+ * an internal defined bound role class with an attribut
+ * the base class of the role is a team
+ */
+public team class Team_2
+{
+ public class SampleRole playedBy TeamB
+ {
+ public String roleAttr = "AStringAttribut";
+ }
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_3a.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_3a.java
new file mode 100644
index 0000000..1f4258e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/InternalDefinedRole/boundtoteam/teampkg/Team_3a.java
@@ -0,0 +1,17 @@
+package teampkg;
+
+/**
+ * $Id: Team_3a.java 5749 2005-05-30 11:52:29Z anklam $
+ *
+ * testcase:
+ * an internal