From 651e92a3285606537cfa47913adc17ce90bc22c8 Mon Sep 17 00:00:00 2001 From: Alexander Kriegisch Date: Sat, 2 Apr 2022 08:22:42 +0700 Subject: [PATCH] Remove AspectJ Browser (ajbrowser) code and documentation Closes #148. TODO: Should more AJDE stuff be removed? Signed-off-by: Alexander Kriegisch --- ajbrowser/AJBrowser.jpx | 24 - ajbrowser/pom.xml | 46 -- ajbrowser/src/.cvsignore | 2 - .../tools/ajbrowser/BrowserManager.java | 227 ------- .../org/aspectj/tools/ajbrowser/Main.java | 72 --- .../core/BrowserBuildProgressMonitor.java | 88 --- .../core/BrowserCompilerConfiguration.java | 135 ---- .../ajbrowser/core/BrowserErrorHandler.java | 54 -- .../core/BrowserOutputLocationManager.java | 77 --- .../core/PreferenceStoreConstants.java | 24 - .../tools/ajbrowser/ui/BasicEditor.java | 187 ------ .../ajbrowser/ui/BrowserMessageHandler.java | 90 --- .../ui/BrowserRuntimeProperties.java | 38 -- .../tools/ajbrowser/ui/BrowserUIAdapter.java | 29 - .../tools/ajbrowser/ui/EditorManager.java | 167 ----- .../ui/swing/BrowserOptionsPanel.java | 159 ----- .../ui/swing/MessageHandlerPanel.java | 86 --- .../tools/ajbrowser/ui/swing/TopFrame.java | 599 ------------------ .../aspectj/tools/ajbrowser/JemmyDriver.java | 80 --- ajbrowser/testdata/.cvsignore | 1 - .../java/org/aspectj/ajde/IconRegistry.java | 6 - aspectjtools/aspectjtools-assembly.xml | 8 - .../aspectjtools-sources-assembly.xml | 5 - aspectjtools/pom.xml | 5 - build/build-properties.xml | 2 +- build/build.xml | 4 - build/products/aspectj/install/finish.html | 10 +- .../java/$installer$/org/aspectj/Main.java | 2 - .../org/aspectj/resources/finish.html | 10 +- .../org/aspectj/build/BuildModuleTests.java | 4 - .../internal/build/BuildModuleTest.java | 7 +- .../aspectj/internal/build/ModulesTest.java | 2 +- docs/devGuideDB/ajbrowser-building.gif | Bin 26404 -> 0 bytes docs/devGuideDB/ajbrowser-options.gif | Bin 9437 -> 0 bytes docs/devGuideDB/ajbrowser.xml | 421 ------------ docs/devGuideDB/ajdejbuilder.xml | 20 +- docs/devGuideDB/devguide.xml | 27 +- docs/devGuideDB/tools-intro.xml | 51 +- docs/developer/IDE.md | 8 +- docs/developer/modules.html | 156 ++--- docs/dist/README-AspectJ.html | 36 +- docs/dist/doc/index.html | 9 +- docs/faq/faq.xml | 28 +- pom.xml | 1 - .../java/RunTheseBeforeYouCommitTests.java | 1 - tests/product/ant-example.xml | 32 +- tests/product/build-aspectj/build.xml | 1 - tests/product/product-test.xml | 48 +- 48 files changed, 191 insertions(+), 2898 deletions(-) delete mode 100644 ajbrowser/AJBrowser.jpx delete mode 100644 ajbrowser/pom.xml delete mode 100644 ajbrowser/src/.cvsignore delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/BrowserManager.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/Main.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BasicEditor.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/EditorManager.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java delete mode 100644 ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java delete mode 100644 ajbrowser/src/test/java/org/aspectj/tools/ajbrowser/JemmyDriver.java delete mode 100644 ajbrowser/testdata/.cvsignore delete mode 100644 docs/devGuideDB/ajbrowser-building.gif delete mode 100644 docs/devGuideDB/ajbrowser-options.gif delete mode 100644 docs/devGuideDB/ajbrowser.xml diff --git a/ajbrowser/AJBrowser.jpx b/ajbrowser/AJBrowser.jpx deleted file mode 100644 index 9a0e5f415..000000000 --- a/ajbrowser/AJBrowser.jpx +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ajbrowser/pom.xml b/ajbrowser/pom.xml deleted file mode 100644 index 191e5c248..000000000 --- a/ajbrowser/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - 4.0.0 - - - org.aspectj - aspectj-parent - 1.9.10-SNAPSHOT - - - ajbrowser - - - - org.aspectj - ajde - ${project.version} - - - org.aspectj - util - ${project.version} - - - org.aspectj - bridge - ${project.version} - - - org.aspectj - asm - ${project.version} - - - org.aspectj - ajde.core - ${project.version} - - - org.aspectj - org.aspectj.ajdt.core - ${project.version} - - - diff --git a/ajbrowser/src/.cvsignore b/ajbrowser/src/.cvsignore deleted file mode 100644 index cf9a8cca3..000000000 --- a/ajbrowser/src/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -ajbrowser.lst -ajbrowserSrc.lst diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/BrowserManager.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/BrowserManager.java deleted file mode 100644 index e140d3bd9..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/BrowserManager.java +++ /dev/null @@ -1,227 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * Helen Hawkins Converted to new interface (bug 148190) - * ******************************************************************/ -package org.aspectj.tools.ajbrowser; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.JFrame; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.IconRegistry; -import org.aspectj.ajde.internal.BuildConfigManager; -import org.aspectj.ajde.ui.FileStructureView; -import org.aspectj.ajde.ui.InvalidResourceException; -import org.aspectj.ajde.ui.UserPreferencesAdapter; -import org.aspectj.ajde.ui.internal.UserPreferencesStore; -import org.aspectj.ajde.ui.javaoptions.JavaBuildOptions; -import org.aspectj.ajde.ui.javaoptions.JavaCompilerWarningsOptionsPanel; -import org.aspectj.ajde.ui.javaoptions.JavaComplianceOptionsPanel; -import org.aspectj.ajde.ui.javaoptions.JavaDebugOptionsPanel; -import org.aspectj.ajde.ui.javaoptions.JavaOtherOptionsPanel; -import org.aspectj.ajde.ui.swing.MultiStructureViewPanel; -import org.aspectj.asm.IHierarchy; -import org.aspectj.asm.IHierarchyListener; -import org.aspectj.tools.ajbrowser.core.BrowserBuildProgressMonitor; -import org.aspectj.tools.ajbrowser.core.BrowserCompilerConfiguration; -import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler; -import org.aspectj.tools.ajbrowser.ui.BasicEditor; -import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler; -import org.aspectj.tools.ajbrowser.ui.BrowserRuntimeProperties; -import org.aspectj.tools.ajbrowser.ui.BrowserUIAdapter; -import org.aspectj.tools.ajbrowser.ui.EditorManager; -import org.aspectj.tools.ajbrowser.ui.swing.BrowserOptionsPanel; -import org.aspectj.tools.ajbrowser.ui.swing.MessageHandlerPanel; -import org.aspectj.tools.ajbrowser.ui.swing.TopFrame; -import org.aspectj.util.FileUtil; - -/** - * IDE manager for standalone AJDE application. - * - * @author Mik Kersten - */ -public class BrowserManager { - - public static final String TITLE = "AspectJ Browser"; - - private static final BrowserManager INSTANCE = new BrowserManager(); - private EditorManager editorManager; - private UserPreferencesAdapter preferencesAdapter; - private static TopFrame topFrame = null; - - private List configFiles = new ArrayList<>(); - private JavaBuildOptions javaBuildOptions; - - public static BrowserManager getDefault() { - return INSTANCE; - } - - public final IHierarchyListener VIEW_LISTENER = new IHierarchyListener() { - public void elementsUpdated(IHierarchy model) { - FileStructureView fsv = Ajde.getDefault().getStructureViewManager().getDefaultFileView(); - if (fsv != null) { - fsv.setSourceFile(BrowserManager.getDefault().getEditorManager().getCurrFile()); - } - } - }; - - public void init(String[] configFilesArgs, boolean visible) { - try { - javaBuildOptions = new JavaBuildOptions(); - preferencesAdapter = new UserPreferencesStore(true); - topFrame = new TopFrame(); - - BasicEditor ajdeEditor = new BasicEditor(); - editorManager = new EditorManager(ajdeEditor); - - BrowserMessageHandler messageHandler = new BrowserMessageHandler(); - - Ajde.getDefault().init(new BrowserCompilerConfiguration(preferencesAdapter), messageHandler, - new BrowserBuildProgressMonitor(messageHandler), ajdeEditor, new BrowserUIAdapter(), new IconRegistry(), - topFrame, new BrowserRuntimeProperties(preferencesAdapter), true); - - setUpTopFrame(visible); - addOptionsPanels(); - - setUpConfigFiles(configFilesArgs); - - Ajde.getDefault().getModel().addListener(VIEW_LISTENER); - - } catch (Throwable t) { - t.printStackTrace(); - BrowserErrorHandler.handleError("AJDE failed to initialize.", t); - } - } - - /** - * Find and create the set of build configuration files - * - * @param configFilesArgs - */ - private void setUpConfigFiles(String[] configFilesArgs) { - configFiles = getConfigFilesList(configFilesArgs); - if (configFiles.size() == 0) { - BrowserErrorHandler.handleWarning("No build configuration selected. " - + "Select a \".lst\" build configuration file in order to compile and navigate structure."); - } else { - Ajde.getDefault().getBuildConfigManager().setActiveConfigFile((String) configFiles.get(0)); - } - } - - /** - * Create the top frame of the browser - */ - private void setUpTopFrame(boolean visible) { - MultiStructureViewPanel multiViewPanel = new MultiStructureViewPanel(Ajde.getDefault().getViewManager().getBrowserPanel(), - Ajde.getDefault().getFileStructurePanel()); - - topFrame.init(multiViewPanel, new MessageHandlerPanel(), editorManager.getEditorPanel()); - - if (visible) - topFrame.setVisible(true); - } - - public void resetEditorFrame() { - topFrame.resetSourceEditorPanel(); - } - - public void resetEditor() { - BrowserManager - .getDefault() - .getRootFrame() - .setSize(BrowserManager.getDefault().getRootFrame().getWidth() + 1, - BrowserManager.getDefault().getRootFrame().getHeight() + 1); - BrowserManager.getDefault().getRootFrame().doLayout(); - BrowserManager.getDefault().getRootFrame().repaint(); - } - - public void setStatusInformation(String text) { - topFrame.statusText_label.setText(text); - } - - public void setEditorStatusText(String text) { - topFrame.setTitle(BrowserManager.TITLE + " - " + text); - } - - public void saveAll() { - editorManager.saveContents(); - } - - public JFrame getRootFrame() { - return topFrame; - } - - public void openFile(String filePath) { - try { - if (filePath.endsWith(".lst")) { - Ajde.getDefault().getBuildConfigEditor().openFile(filePath); - topFrame.setEditorPanel(Ajde.getDefault().getBuildConfigEditor()); - } else if (FileUtil.hasSourceSuffix(filePath)) { - editorManager.showSourceLine(filePath, 0, false); - } else { - BrowserErrorHandler.handleError("File: " + filePath - + " could not be opened because the extension was not recoginzed."); - } - } catch (IOException ioe) { - BrowserErrorHandler.handleError("Could not open file: " + filePath, ioe); - } catch (InvalidResourceException ire) { - BrowserErrorHandler.handleError("Invalid file: " + filePath, ire); - } - } - - private List getConfigFilesList(String[] configFiles) { - List configs = new ArrayList<>(); - for (String configFile : configFiles) { - if (configFile.endsWith(BuildConfigManager.CONFIG_FILE_SUFFIX)) { - configs.add(configFile); - } - } - return configs; - } - - /** - * Add the different options panels to the main options frame (adds panels for java compliance, compiler warnings, debug - * warnings, other java options and options specific to ajbrowser) - */ - private void addOptionsPanels() { - Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaComplianceOptionsPanel(javaBuildOptions)); - Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaCompilerWarningsOptionsPanel(javaBuildOptions)); - Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaOtherOptionsPanel(javaBuildOptions)); - Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaDebugOptionsPanel(javaBuildOptions)); - Ajde.getDefault().getOptionsFrame().addOptionsPanel(new BrowserOptionsPanel()); - } - - /** - * @return the EditorManager - */ - public EditorManager getEditorManager() { - return editorManager; - } - - /** - * @return the UserPreferencesAdapter - */ - public UserPreferencesAdapter getPreferencesAdapter() { - return preferencesAdapter; - } - - /** - * @return the JavaBuildOptions instance being used - */ - public JavaBuildOptions getJavaBuildOptions() { - return javaBuildOptions; - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/Main.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/Main.java deleted file mode 100644 index 51a33c73e..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/Main.java +++ /dev/null @@ -1,72 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * ******************************************************************/ - -package org.aspectj.tools.ajbrowser; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -/** - * Run ajbrowser if 0+ .lst file arguments, and ajc otherwise. - */ -public class Main { - - /** - * Run ajbrowser if args contains only .lst files and ajc otherwise. - * - * @param args the String[] of args to interpret - */ - public static void main(String[] args) { - if (!compilerMain(args)) { - BrowserManager.getDefault().init(args, true); - } - } - - /** - * Invoke the compiler if there are arguments and some are not .lst files. - * - * @return false if compiler was not invoked and the browser main should be - */ - static boolean compilerMain(String[] args) { - if ((null == args) || (0 == args.length)) { - return false; - } - int numConfigFiles = 0; - for (String arg : args) { - if ((null != arg) && arg.endsWith(".lst")) { - numConfigFiles++; - } - } - if (numConfigFiles != args.length) { - try { - Class ajc = Class.forName("org.aspectj.tools.ajc.Main"); - Method main = ajc.getMethod("main", new Class[] { String[].class }); - main.invoke(null, new Object[] { args }); - return true; - } catch (ClassNotFoundException e) { - report(e); - } catch (NoSuchMethodException e) { - report(e); - } catch (IllegalAccessException e) { - report(e); - } catch (InvocationTargetException e) { - report(e.getTargetException()); - } - } - return false; - } - - private static void report(Throwable t) { - t.printStackTrace(System.err); - } -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java deleted file mode 100644 index a19c2b717..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.core; - -import javax.swing.JDialog; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.core.IBuildProgressMonitor; -import org.aspectj.ajde.ui.swing.BuildProgressPanel; -import org.aspectj.tools.ajbrowser.BrowserManager; -import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler; -import org.aspectj.tools.ajbrowser.ui.swing.TopFrame; - -/** - * Build progress monitor that shows the progress in a dialog containing - * a JProgressBar. Also updates the progress bar at the bottom of AjBrowser - * with the build progress information. - */ -public class BrowserBuildProgressMonitor extends Thread implements IBuildProgressMonitor { - - public static final String PROGRESS_HEADING = "AspectJ Build"; - - private BuildProgressPanel progressDialog = null; - private JDialog dialog = null; - private TopFrame topFrame; - - private BrowserMessageHandler handler; - - public BrowserBuildProgressMonitor(BrowserMessageHandler handler) { - this.handler = handler; - topFrame = (TopFrame) BrowserManager.getDefault().getRootFrame(); - dialog = new JDialog(topFrame, PROGRESS_HEADING, false); - progressDialog = new BuildProgressPanel(); - dialog.setContentPane(progressDialog); - dialog.setSize(550, 120); - try { - dialog.setLocationRelativeTo(topFrame); - } catch (NoSuchMethodError nsme) { - // running on 1.3 - } - } - - public void finish(boolean wasFullBuild) { - Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("build finished..."); - progressDialog.finish(); - dialog.dispose(); - if (handler.getMessages().isEmpty()) { - topFrame.hideMessagesPanel(handler); - } else { - topFrame.showMessagesPanel(handler); - } - } - - public boolean isCancelRequested() { - boolean isCancel = progressDialog.isCancelRequested(); - if (isCancel) { - Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("Compile aborted"); - } - return isCancel; - } - - public void setProgress(double percentDone) { - progressDialog.setProgressBarVal((int) (percentDone*progressDialog.getProgressBarMax())); - } - - public void setProgressText(String text) { - Ajde.getDefault().getIdeUIAdapter().displayStatusInformation(text); - progressDialog.setProgressText(text); - } - - public void begin() { - Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("starting build..."); - handler.reset(); - progressDialog.setProgressBarVal(0); - progressDialog.setProgressText("starting build..."); - dialog.setLocationRelativeTo(Ajde.getDefault().getRootFrame()); - dialog.setVisible(true); - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java deleted file mode 100644 index 24999b7b4..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.core; - -import java.io.File; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.aspectj.ajde.core.ICompilerConfiguration; -import org.aspectj.ajde.core.IOutputLocationManager; -import org.aspectj.ajde.ui.UserPreferencesAdapter; -import org.aspectj.tools.ajbrowser.BrowserManager; - -/** - * AjBrowser implementation of ICompilerConfiguration which returns something for getClasspath(), getJavaOptionsMap(), - * getNonStandardOptions() and getOutputLocationManager() and null for everything else. The reason it doesn't return anything for - * getProjectSourceFiles() is that it uses .lst files to record what is needed to build (via BuildConfigManager). - */ -public class BrowserCompilerConfiguration implements ICompilerConfiguration { - - private UserPreferencesAdapter preferencesAdapter; - private IOutputLocationManager locationManager; - - public BrowserCompilerConfiguration(UserPreferencesAdapter preferencesAdapter) { - this.preferencesAdapter = preferencesAdapter; - } - - public String getClasspath() { - StringBuilder classpath = new StringBuilder(); - String userPath = preferencesAdapter.getProjectPreference(PreferenceStoreConstants.BUILD_CLASSPATH); - if (userPath != null && userPath.trim().length() != 0) { - classpath.append(userPath); - } - List outputDirs = getOutputLocationManager().getAllOutputLocations(); - for (File dir : outputDirs) { - classpath.append(File.pathSeparator + dir.getAbsolutePath() + File.pathSeparator); - } - classpath.append(System.getProperty("java.class.path", ".")); - // System.out.println("classpath: " + classpath.toString()); - return classpath.toString(); - } - - public Map getJavaOptionsMap() { - return BrowserManager.getDefault().getJavaBuildOptions().getJavaBuildOptionsMap(); - } - - public String getNonStandardOptions() { - return preferencesAdapter.getProjectPreference(PreferenceStoreConstants.NONSTANDARD_OPTIONS); - } - - public IOutputLocationManager getOutputLocationManager() { - if (locationManager == null) { - locationManager = new BrowserOutputLocationManager(preferencesAdapter); - } - return locationManager; - } - - public List getProjectSourceFiles() { - // unimplemented in AjBrowser (uses BuildConfigManager instead) - return null; - } - - public List getProjectSourceFilesChanged() { - // unimplemented in AjBrowser (uses BuildConfigManager instead) - return null; - } - - public Map getSourcePathResources() { - // unimplemented in AjBrowser - return null; - } - - public Set getAspectPath() { - // unimplemented in AjBrowser - return null; - } - - public Set getInpath() { - // unimplemented in AjBrowser - return null; - } - - public String getOutJar() { - // unimplemented in AjBrowser - return null; - } - - public int getConfigurationChanges() { - return ICompilerConfiguration.EVERYTHING; - } - - public void configurationRead() { - } - - public List getClasspathElementsWithModifiedContents() { - return null; - } - - public List getProjectXmlConfigFiles() { - return Collections.emptyList(); - } - - public String getProjectEncoding() { - return null; - } - - public String getProcessor() { - return null; - } - - public String getProcessorPath() { - return null; - } - - @Override - public String getModulepath() { - return null; - } - - @Override - public String getModuleSourcepath() { - return null; - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java deleted file mode 100644 index d264e1900..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.core; - -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.swing.JOptionPane; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.ui.swing.ErrorDialog; -import org.aspectj.tools.ajbrowser.BrowserManager; - -/** - * Error handler used by AjBrowser. Handles errors and warnings by - * producing an error/warning dialog. - */ -public class BrowserErrorHandler { - - public static void handleWarning(String message) { - JOptionPane.showMessageDialog(BrowserManager.getDefault() - .getRootFrame(), message, "AJBrowser Warning", - JOptionPane.WARNING_MESSAGE); - } - - public static void handleError(String errorMessage) { - handleError(errorMessage, null); - } - - public static void handleError(String message, Throwable t) { - String stack = getStackTraceAsString(t); - ErrorDialog errorDialog = new ErrorDialog(Ajde.getDefault() - .getRootFrame(), "AJBrowser Error", t, message, stack); - errorDialog.setVisible(true); - } - - private static String getStackTraceAsString(Throwable t) { - StringWriter stringWriter = new StringWriter(); - if (t != null) { - t.printStackTrace(new PrintWriter(stringWriter)); - return stringWriter.getBuffer().toString(); - } - return ""; - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java deleted file mode 100644 index 81192131d..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.core; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.aspectj.ajde.core.IOutputLocationManager; -import org.aspectj.ajde.ui.UserPreferencesAdapter; - -/** - * IOutputLocationManager which returns the same output location for all files and resources. - */ -public class BrowserOutputLocationManager implements IOutputLocationManager { - - private UserPreferencesAdapter preferencesAdapter; - - public BrowserOutputLocationManager(UserPreferencesAdapter preferencesAdapter) { - this.preferencesAdapter = preferencesAdapter; - } - - public File getOutputLocationForClass(File compilationUnit) { - return new File(getCommonOutputDir()); - } - - public File getOutputLocationForResource(File resource) { - return new File(getCommonOutputDir()); - } - - private String getCommonOutputDir() { - String outputPath = preferencesAdapter.getProjectPreference(PreferenceStoreConstants.BUILD_OUTPUTPATH); - if (outputPath == null) { - return "."; - } - return outputPath; - } - - public List getAllOutputLocations() { - List outputDirs = new ArrayList<>(); - outputDirs.add(new File(getCommonOutputDir())); - return outputDirs; - } - - public File getDefaultOutputLocation() { - return new File(getCommonOutputDir()); - } - - public String getSourceFolderForFile(File sourceFile) { - return null; - } - - public void reportFileWrite(String outputfile, int filetype) { - } - - public void reportFileRemove(String outputfile, int filetype) { - } - - public int discoverChangesSince(File dir, long buildtime) { - return 0; - } - - public Map getInpathMap() { - return Collections.emptyMap(); - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java deleted file mode 100644 index f92fae4c1..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.core; - -/** - * Constants used by the preference store - */ -public class PreferenceStoreConstants { - - public static final String BUILD_CLASSPATH = "build.classpath"; - public static final String RUNTIME_MAINCLASS = "runtime.mainClass"; - public static final String BUILD_OUTPUTPATH = "build.outputpath"; - public static final String JAVA_CLASSPATH = "java.class.path"; - public static final String NONSTANDARD_OPTIONS = "ajc.nonStandardOptions"; - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BasicEditor.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BasicEditor.java deleted file mode 100644 index 438b3c20f..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BasicEditor.java +++ /dev/null @@ -1,187 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * Helen Hawkins Converted to new interface (bug 148190) - * ******************************************************************/ - - -package org.aspectj.tools.ajbrowser.ui; - -import java.awt.BorderLayout; -import java.awt.Font; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; - -import javax.swing.JEditorPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultHighlighter; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.EditorAdapter; -import org.aspectj.bridge.ISourceLocation; -import org.aspectj.tools.ajbrowser.BrowserManager; -import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler; - -/** - * Bare-bones editor implementation used when the framework is being used - * standalone. - * - * @author Mik Kersten - */ -public class BasicEditor implements EditorAdapter { - - private String NO_FILE = ""; - private String filePath = NO_FILE; - private JPanel editor_panel = new JPanel(); - - // @todo get rid of these - private int currHighlightStart = 0; - private int currHighlightEnd = 0; - - private BorderLayout borderLayout1 = new BorderLayout(); - private JScrollPane jScrollPane1 = new JScrollPane(); - private JEditorPane editorPane = new JEditorPane(); - - public BasicEditor() { - try { - editorPane.setEditable(true); - editorPane.setContentType("text/plain"); - editorPane.setFont(new Font("Monospaced", 0, 11)); - editor_panel.add(editorPane); - jbInit(); - } - catch(Exception e) { - BrowserErrorHandler.handleError("Could not initialize GUI.", e); - } - } - - public String getCurrFile() { - return filePath; - } - - public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) { - try { - showSourceLine(sourceLocation.getSourceFile().getAbsolutePath(), sourceLocation.getLine(), highlight); - } catch (NullPointerException npe) { - Ajde.getDefault().getIdeUIAdapter().displayStatusInformation(" no corresponding source line to seek to"); - } - } - - public void showSourceLine(int lineNumber, boolean highlight) { - showSourceLine(filePath, lineNumber, highlight); - } - - public void pasteToCaretPos(String text) { - if (currHighlightEnd < 1) return; - String contents = editorPane.getText(); - String pasted = contents.substring(0, currHighlightEnd) + - text + contents.substring(currHighlightEnd, contents.length()); - editorPane.setText(pasted); - } - - public void showSourceLine(String filePath, int lineNumber, boolean highlight) { - //AjdeUIManager.getDefault().getIdeUIAdapter().resetEditor(); - - this.filePath = filePath; -// if (oldPath != filePath && !Ajde.INSTANCE.BROWSER_MANAGER.isGlobalMode()) { -// Ajde.INSTANCE.BROWSER_MANAGER.updateView(); -// } - -// Ajde.IDE_MANAGER.setEditorStatusText(filePath); - - currHighlightStart = 0; - currHighlightEnd = 0; - editorPane.setText(readFile(filePath, lineNumber)); - try { - editorPane.getHighlighter().addHighlight(currHighlightStart, currHighlightEnd, DefaultHighlighter.DefaultPainter); - editorPane.setCaretPosition(currHighlightStart); - } catch (BadLocationException ble) { - BrowserErrorHandler.handleError("Could not highlight location.", ble); - } - BrowserManager.getDefault().getEditorManager().notifyCurrentFileChanged(filePath); - } - - /** - * Not implemented. - */ - public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) { } - - public void addEditorViewForSourceLine(String filePath, int lineNumber) { - - } - - public void saveContents() throws IOException { - if (!filePath.equals(NO_FILE) && !filePath.equals("") && !editorPane.getText().equals("")) { - BufferedWriter writer = new BufferedWriter(new FileWriter(filePath)); - writer.write(editorPane.getText()); - writer.close(); - } - } - - public JPanel getPanel() { - return editor_panel; - } - - public void showSourceForFile(String filePath) { } - - public void showSourceForLine(int lineNumber, boolean highlight) { } - - public void showSourceForSourceLine(String filePath, int lineNumber, boolean highlight) { } - - public String getCurrSourceFilePath() { return null; } - - public void setBreakpointRequest(String filePath, int lineNumber, boolean isDeferred) { } - - public void clearBreakpointRequest(String filePath, int lineNumber) { } - - private String readFile(String filePath, int lineNumber) { - try { -// URL url = ClassLoader.getSystemResource(filePath); - File file = new File(filePath); - if (!file.exists()) { - return "ERROR: file \"" + filePath + "\" does not exist."; - } - BufferedReader reader = new BufferedReader(new FileReader(file)); - StringBuilder contents = new StringBuilder(); - String line = reader.readLine(); - int numLines = 0; - while (line != null) { - numLines++; - if (numLines < lineNumber) { - currHighlightStart += line.length()+1; - } - if (numLines == lineNumber) { - currHighlightEnd = currHighlightStart + line.length(); - } - contents.append(line); - contents.append('\n'); - line = reader.readLine(); - } - reader.close(); - return contents.toString(); - } catch (IOException ioe) { - return "ERROR: could not read file \"" + filePath + "\", make sure that you have mounted /project/aop on X:\\"; - } - } - - private void jbInit() throws Exception { - editor_panel.setFont(new java.awt.Font("DialogInput", 1, 12)); - editor_panel.setLayout(borderLayout1); - editor_panel.add(jScrollPane1, BorderLayout.CENTER); - jScrollPane1.getViewport().add(editorPane, null); - } -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java deleted file mode 100644 index 2878e84a3..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.ui; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.List; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.IUIBuildMessageHandler; -import org.aspectj.ajde.ui.swing.ErrorDialog; -import org.aspectj.bridge.AbortException; -import org.aspectj.bridge.IMessage; -import org.aspectj.bridge.IMessage.Kind; - -/** - * MessageHandler used by AjBrowser that displays ERROR messages with exceptions and ABORT messages in an error dialog. Other - * messages are displayed by the MessageHandlerPanel. By default INFO and WEAVEINFO messages are ignored. - */ -public class BrowserMessageHandler implements IUIBuildMessageHandler { - - private List ignoring; - private List messages; - - public BrowserMessageHandler() { - ignoring = new ArrayList<>(); - messages = new ArrayList<>(); - ignore(IMessage.INFO); - ignore(IMessage.WEAVEINFO); - } - - public boolean handleMessage(IMessage message) throws AbortException { - Kind messageKind = message.getKind(); - if (isIgnoring(messageKind)) { - return true; - } - if (messageKind.equals(IMessage.ABORT) || (message.getThrown() != null)) { - String stack = getStackTraceAsString(message.getThrown()); - ErrorDialog errorDialog = new ErrorDialog(Ajde.getDefault().getRootFrame(), "AJDE Error", message.getThrown(), - message.getMessage(), stack); - errorDialog.setVisible(true); - return true; - } - messages.add(message); - return true; - } - - public void dontIgnore(Kind kind) { - if (null != kind) { - ignoring.remove(kind); - } - } - - public boolean isIgnoring(Kind kind) { - return ((null != kind) && (ignoring.contains(kind))); - } - - public void ignore(Kind kind) { - if ((null != kind) && (!ignoring.contains(kind))) { - ignoring.add(kind); - } - } - - public List getMessages() { - return messages; - } - - private String getStackTraceAsString(Throwable t) { - StringWriter stringWriter = new StringWriter(); - if (t != null) { - t.printStackTrace(new PrintWriter(stringWriter)); - return stringWriter.getBuffer().toString(); - } - return ""; - } - - public void reset() { - messages.clear(); - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java deleted file mode 100644 index a680da984..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.ui; - -import org.aspectj.ajde.IRuntimeProperties; -import org.aspectj.ajde.ui.UserPreferencesAdapter; -import org.aspectj.tools.ajbrowser.core.PreferenceStoreConstants; - -/** - * AjBrowser implementation of IRuntimeProperties which uses the PreferenceStoreConstant - * to decide which class the user has specified contains the main method - */ -public class BrowserRuntimeProperties implements IRuntimeProperties { - - private UserPreferencesAdapter preferencesAdapter; - - public BrowserRuntimeProperties(UserPreferencesAdapter preferencesAdapter) { - this.preferencesAdapter = preferencesAdapter; - } - - public String getClassToExecute() { - return preferencesAdapter.getProjectPreference(PreferenceStoreConstants.RUNTIME_MAINCLASS); - } - - public String getExecutionArgs() { - // not implemented by ajbrowser - return null; - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java deleted file mode 100644 index a6a993d91..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java +++ /dev/null @@ -1,29 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * ******************************************************************/ - - -package org.aspectj.tools.ajbrowser.ui; - -import org.aspectj.ajde.IdeUIAdapter; -import org.aspectj.tools.ajbrowser.BrowserManager; - -/** - * AjBrowser implementation if IdeUIAdapter which displays the provided - * information in the status bar at the bottom of the AjBrowser GUI. - */ -public class BrowserUIAdapter implements IdeUIAdapter { - - public void displayStatusInformation(String message) { - BrowserManager.getDefault().setStatusInformation(message); - } -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/EditorManager.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/EditorManager.java deleted file mode 100644 index f004e6e2b..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/EditorManager.java +++ /dev/null @@ -1,167 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * ******************************************************************/ - -package org.aspectj.tools.ajbrowser.ui; - -import java.awt.BorderLayout; -import java.awt.event.KeyEvent; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Vector; - -import javax.swing.Box; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; - -import org.aspectj.ajde.EditorAdapter; -import org.aspectj.ajde.EditorListener; -import org.aspectj.bridge.ISourceLocation; -import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler; - -/** - * Responsible for controlling the editor. - * - *

TODO: remove coupling to BasicEditor

- * @author Mik Kersten - */ -public class EditorManager { - - /** @return true if input modifiers have shift down */ - public static boolean isShiftDown(int modifiers) { - return (0 != (modifiers & KeyEvent.SHIFT_MASK)); - } - - private EditorAdapter editor = null; - private BasicEditor basicEditor = null; - private List editorListeners = new ArrayList<>(); - private Vector editors = new Vector<>(); - private JPanel editor_panel = null; - private Box editors_box = Box.createVerticalBox(); - - public EditorManager(EditorAdapter ajdeEditor) { - if (ajdeEditor instanceof BasicEditor) { - this.basicEditor = (BasicEditor) ajdeEditor; - editors.add(basicEditor); - editors_box.add(basicEditor.getPanel()); - editor_panel = new JPanel(new BorderLayout()); - editor_panel.add(editors_box, BorderLayout.CENTER); - } else { - editors.add(ajdeEditor); - this.editor = ajdeEditor; - } - } - - public void addListener(EditorListener editorListener) { - editorListeners.add(editorListener); - } - - public void removeListener(EditorListener editorListener) { - editorListeners.remove(editorListener); - } - - public void notifyCurrentFileChanged(String filePath) { - for (EditorListener editorListener : editorListeners) { - editorListener.currentFileChanged(filePath); - } - } - - public void addViewForSourceLine(final String filePath, final int lineNumber) { - if (basicEditor == null) - return; - editors_box.remove(basicEditor.getPanel()); - final BasicEditor newEditor = new BasicEditor(); - editors.add(newEditor); - - Runnable update = new Runnable() { - public void run() { - editors_box.add(newEditor.getPanel()); - newEditor.showSourceLine(filePath, lineNumber, true); - // AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI(); - } - }; - - if (SwingUtilities.isEventDispatchThread()) { - update.run(); - } else { - try { - SwingUtilities.invokeAndWait(update); - } catch (Exception e) { - BrowserErrorHandler.handleError("Could not add view for source line.", e); - } - } - } - - public String getCurrFile() { - if (basicEditor != null) { - return basicEditor.getCurrFile(); - } else { - return editor.getCurrFile(); - } - } - - public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) { - if (sourceLocation != null) { - showSourceLine(sourceLocation.getSourceFile().getAbsolutePath(), sourceLocation.getLine(), highlight); - } - } - - /** - * TODO: remove "instanceof AjdeManager" hack - */ - public void showSourceLine(String filePath, int lineNumber, boolean highlight) { - if (editors.size() > 1) { - editors_box.removeAll(); - editors_box.add(basicEditor.getPanel()); - // AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI(); - editors.removeAllElements(); - editors.add(basicEditor); - } - - if (basicEditor != null) { - basicEditor.showSourceLine(filePath, lineNumber, highlight); - } else { - editor.showSourceLine(filePath, lineNumber, highlight); - } - } - - public void pasteToCaretPos(String text) { - if (basicEditor != null) { - basicEditor.pasteToCaretPos(text); - } else { - editor.pasteToCaretPos(text); - } - } - - public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) { - editor.showSourcelineAnnotation(filePath, lineNumber, items); - } - - public void saveContents() { - try { - for (EditorAdapter editorAdapter : editors) { - editorAdapter.saveContents(); - } - } catch (IOException ioe) { - BrowserErrorHandler.handleError("Editor could not save the current file.", ioe); - } - } - - public JPanel getEditorPanel() { - if (editor_panel != null) { - return editor_panel; - } else { - return basicEditor.getPanel(); - } - } -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java deleted file mode 100644 index fd93bb51f..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java +++ /dev/null @@ -1,159 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * Helen Hawkins Converted to new interface (bug 148190) - * ******************************************************************/ - - -package org.aspectj.tools.ajbrowser.ui.swing; - -import java.io.*; -import javax.swing.*; -import java.awt.*; -import javax.swing.border.*; -import org.aspectj.ajde.ui.swing.*; -import org.aspectj.tools.ajbrowser.BrowserManager; -import org.aspectj.tools.ajbrowser.core.PreferenceStoreConstants; - -/** - * Panel the displays both ajc and runtime options - * - * @author Mik Kersten - */ -public class BrowserOptionsPanel extends OptionsPanel { - - private static final long serialVersionUID = 4491319302490183151L; - private JPanel runOptions_panel = new JPanel(); - private JPanel build_panel = new JPanel(); - private FlowLayout flowLayout1 = new FlowLayout(); - private JTextField classToRun_field = new JTextField(); - private JLabel jLabel4 = new JLabel(); - private BorderLayout borderLayout4 = new BorderLayout(); - private JPanel buildPaths_panel = new JPanel(); - private Box compileOptions_box2 = Box.createVerticalBox(); - private JTextField classpath_field = new JTextField(); - private JTextField outputPath_field = new JTextField(); - private JTextField nonStandardOptions_field = new JTextField(); - private JLabel jLabel16 = new JLabel(); - private JLabel jLabel15 = new JLabel(); - private JLabel nonStandardOptions_label = new JLabel(); - private Box compileOptions_box3 = Box.createVerticalBox(); - private BorderLayout borderLayout1 = new BorderLayout(); - private Border border1; - private TitledBorder titledBorder1; - private Border border2; - private Border border3; - private TitledBorder titledBorder2; - private Border border4; - - public BrowserOptionsPanel() { - try { - jbInit(); - this.setName("AJBrowser Options"); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void loadOptions() throws IOException { - outputPath_field.setText( - BrowserManager.getDefault().getPreferencesAdapter(). - getProjectPreference(PreferenceStoreConstants.BUILD_OUTPUTPATH) - ); - nonStandardOptions_field.setText( - BrowserManager.getDefault().getPreferencesAdapter(). - getProjectPreference(PreferenceStoreConstants.NONSTANDARD_OPTIONS) - ); - classpath_field.setText( - BrowserManager.getDefault().getPreferencesAdapter(). - getProjectPreference(PreferenceStoreConstants.BUILD_CLASSPATH) - ); - classToRun_field.setText( - BrowserManager.getDefault().getPreferencesAdapter(). - getProjectPreference(PreferenceStoreConstants.RUNTIME_MAINCLASS) - ); - } - - public void saveOptions() throws IOException { - BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference( - PreferenceStoreConstants.BUILD_OUTPUTPATH, outputPath_field.getText()); - BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference( - PreferenceStoreConstants.NONSTANDARD_OPTIONS, nonStandardOptions_field.getText()); - BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference( - PreferenceStoreConstants.BUILD_CLASSPATH, classpath_field.getText()); - BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference( - PreferenceStoreConstants.RUNTIME_MAINCLASS, classToRun_field.getText()); - } - - private void jbInit() throws Exception { - border1 = - BorderFactory.createEtchedBorder(Color.white, new Color(156, 156, 158)); - titledBorder1 = new TitledBorder(border1, "Ajc Options"); - border2 = - BorderFactory.createCompoundBorder( - titledBorder1, - BorderFactory.createEmptyBorder(5, 5, 5, 5)); - border3 = - BorderFactory.createEtchedBorder(Color.white, new Color(156, 156, 158)); - titledBorder2 = new TitledBorder(border3, "Run Options"); - border4 = - BorderFactory.createCompoundBorder( - titledBorder2, - BorderFactory.createEmptyBorder(5, 5, 5, 5)); - this.setLayout(borderLayout1); - build_panel.setLayout(borderLayout4); - classToRun_field.setFont(new java.awt.Font("SansSerif", 0, 11)); - classToRun_field.setMinimumSize(new Dimension(200, 21)); - classToRun_field.setPreferredSize(new Dimension(250, 21)); - jLabel4.setFont(new java.awt.Font("Dialog", 0, 11)); - jLabel4.setText("Fully qualified name for main class to run: "); - buildPaths_panel.setLayout(flowLayout1); - runOptions_panel.setBorder(border4); - buildPaths_panel.setBorder(border2); - classpath_field.setFont(new java.awt.Font("SansSerif", 0, 11)); - classpath_field.setMinimumSize(new Dimension(100, 21)); - classpath_field.setPreferredSize(new Dimension(150, 21)); - outputPath_field.setPreferredSize(new Dimension(225, 21)); - outputPath_field.setMinimumSize(new Dimension(100, 21)); - outputPath_field.setFont(new java.awt.Font("SansSerif", 0, 11)); - nonStandardOptions_field.setPreferredSize(new Dimension(225, 21)); - nonStandardOptions_field.setMinimumSize(new Dimension(100, 21)); - nonStandardOptions_field.setFont(new java.awt.Font("SansSerif", 0, 11)); - jLabel16.setText("Classpath (defaults to current directory): "); - jLabel16.setPreferredSize(new Dimension(200, 25)); - jLabel16.setMaximumSize(new Dimension(400, 25)); - jLabel16.setFont(new java.awt.Font("Dialog", 0, 11)); - jLabel15.setMaximumSize(new Dimension(400, 25)); - jLabel15.setFont(new java.awt.Font("Dialog", 0, 11)); - jLabel15.setPreferredSize(new Dimension(230, 25)); - jLabel15.setText("Output path (defaults to current directory): "); - nonStandardOptions_label.setMaximumSize(new Dimension(400, 25)); - nonStandardOptions_label.setFont(new java.awt.Font("Dialog", 0, 11)); - nonStandardOptions_label.setPreferredSize(new Dimension(230, 25)); - nonStandardOptions_label.setText("Non-standard compiler options: "); - titledBorder1.setTitleFont(new java.awt.Font("Dialog", 0, 11)); - titledBorder2.setTitleFont(new java.awt.Font("Dialog", 0, 11)); - runOptions_panel.add(jLabel4, null); - runOptions_panel.add(classToRun_field, null); - build_panel.add(buildPaths_panel, BorderLayout.CENTER); - build_panel.add(runOptions_panel, BorderLayout.SOUTH); - compileOptions_box2.add(outputPath_field, null); - compileOptions_box2.add(nonStandardOptions_field, null); - compileOptions_box2.add(classpath_field, null); - compileOptions_box3.add(jLabel15, null); - compileOptions_box3.add(nonStandardOptions_label, null); - compileOptions_box3.add(jLabel16, null); - buildPaths_panel.add(compileOptions_box3, null); - buildPaths_panel.add(compileOptions_box2, null); - this.add(build_panel, BorderLayout.NORTH); - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java deleted file mode 100644 index 7c02f6426..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************** - * Copyright (c) 2007 Contributors. All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: IBM Corporation - initial API and implementation - * Helen Hawkins - initial version (bug 148190) - *******************************************************************/ -package org.aspectj.tools.ajbrowser.ui.swing; - -import java.awt.BorderLayout; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.List; - -import javax.swing.DefaultListModel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.ui.swing.CompilerMessagesCellRenderer; -import org.aspectj.bridge.IMessage; -import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler; - -/** - * Panel used to display messages from the message handler - */ -public class MessageHandlerPanel extends JPanel { - - private static final long serialVersionUID = -2251912345065588977L; - private JScrollPane jScrollPane1 = new JScrollPane(); - private JList list; - private DefaultListModel listModel; - private BorderLayout borderLayout1 = new BorderLayout(); - - public void showMessageHandlerPanel(BrowserMessageHandler handler, boolean showPanel) { - if (!showPanel) { - setVisible(false); - return; - } - createList(handler.getMessages()); - - try { - jbInit(); - } catch (Exception e) { - e.printStackTrace(); - } - list.setModel(listModel); - - MouseListener mouseListener = new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() >= 1) { - int index = list.locationToIndex(e.getPoint()); - if (listModel.getSize() >= index && index != -1) { - IMessage message = (IMessage) listModel - .getElementAt(index); - Ajde.getDefault().getEditorAdapter().showSourceLine( - message.getSourceLocation(), true); - } - } - } - }; - list.addMouseListener(mouseListener); - list.setCellRenderer(new CompilerMessagesCellRenderer()); - setVisible(showPanel); - } - - private void createList(List messages) { - list = new JList(); - listModel = new DefaultListModel(); - for (IMessage message : messages) { - listModel.addElement(message); - } - } - - private void jbInit() throws Exception { - this.setLayout(borderLayout1); - this.add(jScrollPane1, BorderLayout.CENTER); - jScrollPane1.getViewport().add(list, null); - } - -} diff --git a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java b/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java deleted file mode 100644 index 5d9b7cc17..000000000 --- a/ajbrowser/src/main/java/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java +++ /dev/null @@ -1,599 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * ******************************************************************/ - -package org.aspectj.tools.ajbrowser.ui.swing; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.awt.event.WindowEvent; -import java.io.File; - -import javax.swing.AbstractAction; -import javax.swing.BorderFactory; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JSplitPane; -import javax.swing.JToolBar; -import javax.swing.KeyStroke; -import javax.swing.border.Border; -import javax.swing.filechooser.FileFilter; - -import org.aspectj.ajde.Ajde; -import org.aspectj.ajde.ui.swing.AJButtonMenuCombo; -import org.aspectj.ajde.ui.swing.BuildConfigPopupMenu; -import org.aspectj.ajde.ui.swing.MultiStructureViewPanel; -import org.aspectj.asm.IProgramElement; -import org.aspectj.tools.ajbrowser.BrowserManager; -import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler; -import org.aspectj.tools.ajbrowser.ui.EditorManager; - -/** - * UI for standalone operation. - * - * @author Mik Kersten - */ -public class TopFrame extends JFrame { - - private static final long serialVersionUID = 1007473581156451702L; - - private static final File CURRENT_DIR = new File("."); - - public JLabel statusText_label = new JLabel(); - - private JPanel editor_panel = null; - private JPanel sourceEditor_panel = null; - - private JMenuBar menuBar = new JMenuBar(); - private JMenu jMenu1 = new JMenu(); - private JMenu jMenu2 = new JMenu(); - private JMenuItem projectBuild_menuItem = new JMenuItem(); - private FlowLayout left_flowLayout = new FlowLayout(); - private JMenuItem jMenuItem1 = new JMenuItem(); - private JMenuItem exit_menuItem = new JMenuItem(); - private JSplitPane top_splitPane = new JSplitPane(); - private BorderLayout borderLayout3 = new BorderLayout(); - private JMenuItem projectRun_menuItem = new JMenuItem(); - private JMenuItem projectRunOther_menuItem = new JMenuItem(); - private JPanel status_panel = new JPanel(); - private BorderLayout borderLayout4 = new BorderLayout(); - private Border emptyBorder = BorderFactory.createEmptyBorder(); - private JPanel toolbar_panel = new JPanel(); - private JSplitPane right_splitPane = new JSplitPane(); - private MessageHandlerPanel messages_panel = null; - private JMenu tools_menu = new JMenu(); - private JMenuItem joinpointProbe_menuItem = new JMenuItem(); - private JMenuItem projectDebug_menuItem = new JMenuItem(); - private JMenuItem svProperties_menuItem = new JMenuItem(); - private File lastChosenDir = CURRENT_DIR; - - JPanel toolBar_panel = new JPanel(); - JToolBar build_toolBar = new JToolBar(); - JButton closeConfig_button = new JButton(); - JButton openConfig_button = new JButton(); - JButton run_button = new JButton(); - JToolBar project_toolBar = new JToolBar(); - JButton save_button = new JButton(); - JButton options_button = new JButton(); - JButton editConfig_button = new JButton(); - JToolBar file_toolBar = new JToolBar(); - JPanel filler_panel = new JPanel(); - BorderLayout borderLayout5 = new BorderLayout(); - BorderLayout borderLayout6 = new BorderLayout(); - Border border8; - JLabel jLabel1 = new JLabel(); - JLabel jLabel2 = new JLabel(); - JPanel multiView_panel; - - private AJButtonMenuCombo buildCombo; - - public void init(MultiStructureViewPanel multiViewPanel, - MessageHandlerPanel compilerMessagesPanel, JPanel editorPanel) { - try { - this.multiView_panel = multiViewPanel; - this.messages_panel = compilerMessagesPanel; - this.editor_panel = editorPanel; - this.sourceEditor_panel = editorPanel; - - jbInit(); - svProperties_menuItem.setIcon(Ajde.getDefault() - .getIconRegistry().getBrowserOptionsIcon()); - projectBuild_menuItem.setIcon(Ajde.getDefault() - .getIconRegistry().getBuildIcon()); - projectRun_menuItem.setIcon(Ajde.getDefault() - .getIconRegistry().getExecuteIcon()); - projectRunOther_menuItem.setIcon(Ajde.getDefault() - .getIconRegistry().getExecuteIcon()); - projectDebug_menuItem.setIcon(Ajde.getDefault() - .getIconRegistry().getDebugIcon()); - - this.setJMenuBar(menuBar); - this.setIconImage(((ImageIcon) Ajde.getDefault() - .getIconRegistry().getStructureSwingIcon( - IProgramElement.Kind.ADVICE)).getImage()); - this.setLocation(75, 10); - this.setSize(900, 650); - this.setTitle(BrowserManager.TITLE); - // bindKeys(); - fixButtonBorders(); - messages_panel.setVisible(false); - - JPopupMenu orderMenu = new BuildConfigPopupMenu( - new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent arg0) { - BrowserManager.getDefault().saveAll(); - } - }); - - buildCombo = new AJButtonMenuCombo("Build", "Build", Ajde - .getDefault().getIconRegistry().getBuildIcon(), orderMenu, - false); - - build_toolBar.add(buildCombo, 1); - refreshBuildMenu(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void refreshBuildMenu() { - JPopupMenu orderMenu = new BuildConfigPopupMenu(new AbstractAction() { - private static final long serialVersionUID = -3204840278758386318L; - - public void actionPerformed(ActionEvent arg0) { - BrowserManager.getDefault().saveAll(); - } - }); - - buildCombo.setMenu(orderMenu); - } - - public void setEditorPanel(JPanel panel) { - editor_panel = panel; - right_splitPane.remove(editor_panel); - right_splitPane.add(panel, JSplitPane.TOP); - panel.setVisible(true); - } - - /** - * @todo get rid of this method and make jbinit() work properly - */ - private void fixButtonBorders() { - run_button.setBorder(null); - options_button.setBorder(null); - openConfig_button.setBorder(null); - closeConfig_button.setBorder(null); - save_button.setBorder(null); - editConfig_button.setBorder(null); - } - - private void jbInit() throws Exception { - border8 = BorderFactory.createCompoundBorder(BorderFactory - .createEtchedBorder(Color.white, new Color(156, 156, 158)), - BorderFactory.createEmptyBorder(2, 2, 2, 2)); - emptyBorder = BorderFactory.createEmptyBorder(2, 2, 2, 2); - jMenu1.setFont(new java.awt.Font("Dialog", 0, 11)); - jMenu1.setText("File"); - jMenu1.setMnemonic(KeyEvent.VK_F); - jMenu2.setFont(new java.awt.Font("Dialog", 0, 11)); - jMenu2.setText("Project"); - jMenu2.setMnemonic(KeyEvent.VK_P); - projectBuild_menuItem.setFont(new java.awt.Font("Dialog", 0, 11)); - projectBuild_menuItem.setText("Build"); - projectBuild_menuItem.setMnemonic(KeyEvent.VK_B); - projectBuild_menuItem.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_B, ActionEvent.ALT_MASK)); - - projectBuild_menuItem - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - projectBuild_menuItem_actionPerformed(e); - } - }); - left_flowLayout.setAlignment(FlowLayout.LEFT); - jMenuItem1.setFont(new java.awt.Font("Dialog", 0, 11)); - jMenuItem1.setText("Save"); - jMenuItem1.setMnemonic(KeyEvent.VK_S); - jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, - ActionEvent.ALT_MASK)); - jMenuItem1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - jMenuItem1_actionPerformed(e); - } - }); - exit_menuItem.setFont(new java.awt.Font("Dialog", 0, 11)); - exit_menuItem.setText("Exit"); - exit_menuItem.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - exit_menuItem_actionPerformed(e); - } - }); - top_splitPane.setPreferredSize(new Dimension(706, 800)); - top_splitPane.setDividerSize(4); - this.getContentPane().setLayout(borderLayout3); - projectRun_menuItem.setEnabled(true); - projectRun_menuItem.setFont(new java.awt.Font("Dialog", 0, 11)); - projectRun_menuItem.setText("Run in same VM"); - projectRun_menuItem - .setToolTipText("Run in same VM (hold shift down to run in separate process)"); - projectRun_menuItem.setMnemonic(KeyEvent.VK_R); - projectRun_menuItem.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_R, ActionEvent.ALT_MASK)); - projectRun_menuItem - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - projectRun_menuItem_actionPerformed(e); - } - }); - projectRunOther_menuItem.setEnabled(true); - projectRunOther_menuItem.setFont(new java.awt.Font("Dialog", 0, 11)); - projectRunOther_menuItem.setText("Run in separate process"); - projectRunOther_menuItem.setMnemonic(KeyEvent.VK_P); - projectRunOther_menuItem.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_P, ActionEvent.ALT_MASK)); - projectRunOther_menuItem - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - projectRunOther_menuItem_actionPerformed(e); - } - }); - statusText_label.setFont(new java.awt.Font("Dialog", 0, 11)); - statusText_label.setBorder(BorderFactory.createLoweredBevelBorder()); - statusText_label.setMaximumSize(new Dimension(2000, 20)); - statusText_label.setPreferredSize(new Dimension(300, 20)); - status_panel.setLayout(borderLayout4); - this.addWindowListener(new java.awt.event.WindowAdapter() { - public void windowClosed(WindowEvent e) { - this_windowClosed(e); - } - - public void windowClosing(WindowEvent e) { - this_windowClosing(e); - } - }); - toolbar_panel.setLayout(borderLayout5); - right_splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); - right_splitPane.setBorder(null); - right_splitPane.setDividerSize(4); - tools_menu.setFont(new java.awt.Font("Dialog", 0, 11)); - tools_menu.setText("Tools"); - tools_menu.setMnemonic(KeyEvent.VK_T); - projectDebug_menuItem.setEnabled(false); - projectDebug_menuItem.setFont(new java.awt.Font("Dialog", 0, 11)); - projectDebug_menuItem.setText("Debug"); - svProperties_menuItem - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - svProperties_menuItem_actionPerformed(e); - } - }); - svProperties_menuItem.setText("Options..."); - svProperties_menuItem.setActionCommand("AJDE Console..."); - svProperties_menuItem.setFont(new java.awt.Font("Dialog", 0, 11)); - svProperties_menuItem.setMnemonic(KeyEvent.VK_O); - svProperties_menuItem.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_O, ActionEvent.ALT_MASK)); - build_toolBar.setBorder(emptyBorder); - build_toolBar.setFloatable(false); - closeConfig_button.setMaximumSize(new Dimension(100, 20)); - closeConfig_button.setEnabled(true); - closeConfig_button.setFont(new java.awt.Font("Dialog", 0, 11)); - closeConfig_button.setBorder(null); - closeConfig_button.setMinimumSize(new Dimension(24, 20)); - closeConfig_button.setPreferredSize(new Dimension(20, 20)); - closeConfig_button.setToolTipText("Close build configuration"); - closeConfig_button.setIcon(Ajde.getDefault().getIconRegistry() - .getCloseConfigIcon()); - closeConfig_button - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - closeConfig_button_actionPerformed(e); - } - }); - openConfig_button.setMaximumSize(new Dimension(100, 20)); - openConfig_button.setEnabled(true); - openConfig_button.setFont(new java.awt.Font("Dialog", 0, 11)); - openConfig_button.setBorder(null); - openConfig_button.setMinimumSize(new Dimension(24, 20)); - openConfig_button.setPreferredSize(new Dimension(20, 20)); - openConfig_button.setToolTipText("Select build configuration..."); - openConfig_button.setIcon(Ajde.getDefault().getIconRegistry() - .getOpenConfigIcon()); - openConfig_button - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - openConfig_button_actionPerformed(e); - } - }); - run_button.setMaximumSize(new Dimension(60, 20)); - run_button.setEnabled(true); - run_button.setFont(new java.awt.Font("Dialog", 0, 11)); - run_button.setBorder(null); - run_button.setMinimumSize(new Dimension(24, 20)); - run_button.setPreferredSize(new Dimension(20, 20)); - run_button - .setToolTipText("Run in same VM (hold shift down to run in separate process)"); - run_button.setIcon(Ajde.getDefault().getIconRegistry() - .getExecuteIcon()); - run_button.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - run_button_actionPerformed(e); - } - }); - project_toolBar.setBorder(emptyBorder); - save_button.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - save_button_actionPerformed(e); - } - }); - save_button.setIcon(Ajde.getDefault().getIconRegistry() - .getSaveIcon()); - save_button.setText("Save"); - save_button.setToolTipText("Save"); - save_button.setPreferredSize(new Dimension(55, 20)); - save_button.setMinimumSize(new Dimension(24, 20)); - save_button.setFont(new java.awt.Font("Dialog", 0, 11)); - save_button.setBorder(null); - save_button.setMaximumSize(new Dimension(60, 20)); - options_button.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - options_button_actionPerformed(e); - } - }); - options_button.setIcon(Ajde.getDefault().getIconRegistry() - .getBrowserOptionsIcon()); - options_button.setText("Options"); - options_button.setToolTipText("Options..."); - options_button.setPreferredSize(new Dimension(60, 20)); - options_button.setMinimumSize(new Dimension(24, 20)); - options_button.setFont(new java.awt.Font("Dialog", 0, 11)); - options_button.setBorder(null); - options_button.setMaximumSize(new Dimension(80, 20)); - editConfig_button - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - editConfig_button_actionPerformed(e); - } - }); - editConfig_button.setIcon(Ajde.getDefault().getIconRegistry() - .getStructureSwingIcon(IProgramElement.Kind.FILE_LST)); - editConfig_button.setText("Edit Config"); - editConfig_button.setToolTipText("Edit Config..."); - editConfig_button.setPreferredSize(new Dimension(80, 20)); - editConfig_button.setMinimumSize(new Dimension(24, 20)); - editConfig_button.setFont(new java.awt.Font("Dialog", 0, 11)); - editConfig_button.setBorder(null); - editConfig_button.setMaximumSize(new Dimension(80, 20)); - file_toolBar.setBorder(emptyBorder); - toolBar_panel.setLayout(borderLayout6); - jLabel1.setFont(new java.awt.Font("Dialog", 0, 11)); - jLabel1.setText(" Build: "); - jLabel2.setText(" Run: "); - jLabel2.setFont(new java.awt.Font("Dialog", 0, 11)); - // fileStructure_panel.setFont(new java.awt.Font("Dialog", 0, 11)); - // browser_panel.setFont(new java.awt.Font("Dialog", 0, 11)); - this.getContentPane().add(top_splitPane, BorderLayout.CENTER); - top_splitPane.add(right_splitPane, JSplitPane.RIGHT); - top_splitPane.add(multiView_panel, JSplitPane.LEFT); - right_splitPane.add(messages_panel, JSplitPane.BOTTOM); - right_splitPane.add(editor_panel, JSplitPane.TOP); - // structureView_pane.add(fileStructure_panel, JSplitPane.RIGHT); - // structureView_pane.add(browser_panel, JSplitPane.LEFT); - this.getContentPane().add(status_panel, BorderLayout.SOUTH); - status_panel.add(statusText_label, BorderLayout.CENTER); - this.getContentPane().add(toolbar_panel, BorderLayout.NORTH); - toolbar_panel.add(filler_panel, BorderLayout.CENTER); - toolbar_panel.add(toolBar_panel, BorderLayout.WEST); - // file_toolBar.add(editConfig_button, null); - file_toolBar.add(save_button, null); - file_toolBar.add(options_button, null); - toolBar_panel.add(build_toolBar, BorderLayout.WEST); - toolBar_panel.add(project_toolBar, BorderLayout.CENTER); - project_toolBar.add(jLabel2, null); - project_toolBar.add(run_button, null); - build_toolBar.add(jLabel1, null); - build_toolBar.add(openConfig_button, null); - build_toolBar.add(closeConfig_button, null); - toolBar_panel.add(file_toolBar, BorderLayout.EAST); - menuBar.add(jMenu1); - menuBar.add(jMenu2); - menuBar.add(tools_menu); - jMenu1.add(jMenuItem1); - jMenu1.addSeparator(); - jMenu1.add(exit_menuItem); - jMenu2.add(projectBuild_menuItem); - jMenu2.add(projectRun_menuItem); - jMenu2.add(projectRunOther_menuItem); - // jMenu2.add(projectDebug_menuItem); - tools_menu.add(joinpointProbe_menuItem); - tools_menu.add(svProperties_menuItem); - top_splitPane.setDividerLocation(380); - right_splitPane.setDividerLocation(500); - project_toolBar.addSeparator(); - project_toolBar.addSeparator(); - } - - private void exit_menuItem_actionPerformed(ActionEvent e) { - quit(); - } - - private void this_windowClosing(WindowEvent e) { - quit(); - } - - private void quit() { - this.dispose(); - System.exit(0); - } - - void treeMode_comboBox_actionPerformed(ActionEvent e) { - } - - void save_button_actionPerformed(ActionEvent e) { - BrowserManager.getDefault().getEditorManager().saveContents(); - } - - void this_windowClosed(WindowEvent e) { - quit(); - } - - public void showMessagesPanel(BrowserMessageHandler handler) { - right_splitPane.setDividerLocation(right_splitPane.getHeight() - 100); - messages_panel.showMessageHandlerPanel(handler, true); - } - - public void hideMessagesPanel(BrowserMessageHandler handler) { - right_splitPane.setDividerLocation(right_splitPane.getHeight()); - messages_panel.showMessageHandlerPanel(handler, false); - } - - void jMenuItem1_actionPerformed(ActionEvent e) { - BrowserManager.getDefault().getEditorManager().saveContents(); - } - - void projectBuild_menuItem_actionPerformed(ActionEvent e) { - BrowserManager.getDefault().saveAll(); - if (EditorManager.isShiftDown(e.getModifiers())) { - buildFresh(); - } else { - build(); - } - } - - void run_button_actionPerformed(ActionEvent e) { - if (EditorManager.isShiftDown(e.getModifiers())) { - runInNewVM(); - } else { - runInSameVM(); - } - } - - void projectRunOther_menuItem_actionPerformed(ActionEvent e) { - runInNewVM(); - } - - void projectRun_menuItem_actionPerformed(ActionEvent e) { - if (EditorManager.isShiftDown(e.getModifiers())) { - runInNewVM(); - } else { - runInSameVM(); - } - } - - void build_button_actionPerformed(ActionEvent e) { - BrowserManager.getDefault().saveAll(); - if (EditorManager.isShiftDown(e.getModifiers())) { - buildFresh(); - } else { - build(); - } - } - - void options_button_actionPerformed(ActionEvent e) { - Ajde.getDefault().showOptionsFrame(); - } - - void editConfig_button_actionPerformed(ActionEvent e) { - BrowserManager.getDefault().openFile( - Ajde.getDefault().getBuildConfigManager() - .getActiveConfigFile()); - refreshBuildMenu(); - } - - public void resetSourceEditorPanel() { - right_splitPane.removeAll(); - right_splitPane.add(sourceEditor_panel, JSplitPane.TOP); - } - - private void svProperties_menuItem_actionPerformed(ActionEvent e) { - Ajde.getDefault().showOptionsFrame(); - } - - private void openConfig_button_actionPerformed(ActionEvent e) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(lastChosenDir); - fileChooser.setFileFilter(new FileFilter() { - public boolean accept(File f) { - return (f.getPath().endsWith(".lst") || f.isDirectory()); - } - - public String getDescription() { - return "AspectJ Build Configuration (*.lst)"; - } - }); - int returnVal = fileChooser.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File result = fileChooser.getSelectedFile(); - String path = result.getAbsolutePath();// .replace('\\', '/'); - if (!Ajde.getDefault().getBuildConfigManager() - .getAllBuildConfigFiles().contains(path)) { - Ajde.getDefault().getBuildConfigManager() - .getAllBuildConfigFiles().add(0, path); - } - Ajde.getDefault().getBuildConfigManager().setActiveConfigFile( - path); - lastChosenDir = result.getParentFile(); - if (null == lastChosenDir) { - lastChosenDir = CURRENT_DIR; - } - refreshBuildMenu(); - } - } - - private void closeConfig_button_actionPerformed(ActionEvent e) { - Ajde.getDefault().getBuildConfigManager() - .getAllBuildConfigFiles().remove( - Ajde.getDefault().getBuildConfigManager() - .getActiveConfigFile()); - if (!Ajde.getDefault().getBuildConfigManager() - .getAllBuildConfigFiles().isEmpty()) { - Ajde.getDefault().getBuildConfigManager().setActiveConfigFile( - (String) Ajde.getDefault().getBuildConfigManager() - .getAllBuildConfigFiles().get(0)); - } - refreshBuildMenu(); - } - - private void buildFresh() { - Ajde.getDefault().runBuildInDifferentThread(Ajde.getDefault() - .getBuildConfigManager().getActiveConfigFile(), true); - } - - private void build() { - Ajde.getDefault().runBuildInDifferentThread(Ajde.getDefault() - .getBuildConfigManager().getActiveConfigFile(), false); - } - - private void runInSameVM() { - Ajde.getDefault().runInSameVM(); - } - - private void runInNewVM() { - Ajde.getDefault().runInNewVM(); - } - -} diff --git a/ajbrowser/src/test/java/org/aspectj/tools/ajbrowser/JemmyDriver.java b/ajbrowser/src/test/java/org/aspectj/tools/ajbrowser/JemmyDriver.java deleted file mode 100644 index 48bc0aabe..000000000 --- a/ajbrowser/src/test/java/org/aspectj/tools/ajbrowser/JemmyDriver.java +++ /dev/null @@ -1,80 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, - * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v 2.0 - * which accompanies this distribution and is available at - * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt - * - * Contributors: - * Xerox/PARC initial implementation - * ******************************************************************/ - - -package org.aspectj.tools.ajbrowser; -// -//import org.netbeans.jemmy.Test; -//import org.netbeans.jemmy.Scenario; -//import org.netbeans.jemmy.ClassReference; -//import org.netbeans.jemmy.operators.JFrameOperator; -//import org.netbeans.jemmy.operators.JButtonOperator; -// -///** -// * Programmatically drives AJBrowser gui, -// * currently to do a build. -// */ -//public class JemmyDriver implements Scenario { -// -// public static final String CUT -// = "org.aspectj.tools.ajbrowser.Main"; -// public static final String DRIVER -// = "org.aspectj.tools.ajbrowser.JemmyDriver"; -// -// // XXX need to fix literal path locations -// public static final String USERDIR -// = "j:/home/wes/dev/tools/aj/examples"; -// public static final String FILENAME_RELATIVE -// = USERDIR + "spacewar/debug.lst"; -// public static final String FILENAME -// = USERDIR + "/" + FILENAME_RELATIVE; -// -// public static void main(String[] argv) { -// // 0 is (this) class name -// // 1 is the location of the work directory -// // others are parameters -// String[] params = {DRIVER, USERDIR, FILENAME}; -// Test.main(params); -// } -// -// public int runIt(Object param) { -// try { -// String[] args = new String[]{}; -// // grab parameter - pass in .lst file -// if (null != param) { -// Class c = param.getClass(); -// if (c.isArray() && -// (String.class == c.getComponentType())) { -// args = (String[]) param; -// if (0 < args.length) { -// if (FILENAME.equals(args[0])) { -// System.out.println("got file..."); -// } -// } -// } -// } -// // start application with our .lst file -// new ClassReference(CUT).startApplication(args); -// // wait frame -// JFrameOperator mainFrame = new JFrameOperator("AspectJ Browser"); -// // do a build - hangs if no list file -// new JButtonOperator(mainFrame, "Build").push(); -// -// } catch(Exception e) { -// e.printStackTrace(); -// return(1); -// } -// return(0); -// } -// -//} diff --git a/ajbrowser/testdata/.cvsignore b/ajbrowser/testdata/.cvsignore deleted file mode 100644 index ba077a403..000000000 --- a/ajbrowser/testdata/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -bin diff --git a/ajde/src/main/java/org/aspectj/ajde/IconRegistry.java b/ajde/src/main/java/org/aspectj/ajde/IconRegistry.java index b36378b22..a866a0c96 100644 --- a/ajde/src/main/java/org/aspectj/ajde/IconRegistry.java +++ b/ajde/src/main/java/org/aspectj/ajde/IconRegistry.java @@ -39,9 +39,6 @@ public class IconRegistry extends AbstractIconRegistry { private final Icon BUILD = makeIcon("actions/build.gif"); private final Icon DEBUG = makeIcon("actions/debug.gif"); private final Icon EXECUTE = makeIcon("actions/execute.gif"); - private final Icon AJBROWSER = makeIcon("structure/advice.gif"); - private final Icon AJBROWSER_ENABLED = makeIcon("actions/browserEnabled.gif"); - private final Icon AJBROWSER_DISABLED = makeIcon("actions/browserDisabled.gif"); private final Icon STRUCTURE_VIEW = makeIcon("actions/structureView.gif"); private final Icon HIDE_ASSOCIATIONS = makeIcon("actions/hideAssociations.gif"); @@ -85,9 +82,6 @@ public class IconRegistry extends AbstractIconRegistry { public Icon getErrorIcon() { return ERROR; } public Icon getWarningIcon() { return WARNING; } public Icon getInfoIcon() { return INFO; } - public Icon getAJBrowserIcon() { return AJBROWSER; } - public Icon getAJBrowserEnabledIcon() { return AJBROWSER_ENABLED; } - public Icon getAJBrowserDisabledIcon() { return AJBROWSER_DISABLED; } public Icon getPopupIcon() { return POPUP; } public Icon getFilterIcon() { return FILTER; } public Icon getOrderIcon() { return ORDER; } diff --git a/aspectjtools/aspectjtools-assembly.xml b/aspectjtools/aspectjtools-assembly.xml index 004e1048e..fefc2c8d8 100644 --- a/aspectjtools/aspectjtools-assembly.xml +++ b/aspectjtools/aspectjtools-assembly.xml @@ -84,13 +84,6 @@ - - ../ajbrowser/target/classes - . - - META-INF/maven/** - - ../ajde/target/classes . @@ -129,4 +122,3 @@ - diff --git a/aspectjtools/aspectjtools-sources-assembly.xml b/aspectjtools/aspectjtools-sources-assembly.xml index 8317c9f20..cc708ae7f 100644 --- a/aspectjtools/aspectjtools-sources-assembly.xml +++ b/aspectjtools/aspectjtools-sources-assembly.xml @@ -47,10 +47,6 @@ - - ../ajbrowser/src/main/java - . - ../ajde/src/main/java . @@ -81,4 +77,3 @@ - diff --git a/aspectjtools/pom.xml b/aspectjtools/pom.xml index 441df685d..3c6f708d3 100644 --- a/aspectjtools/pom.xml +++ b/aspectjtools/pom.xml @@ -404,11 +404,6 @@ loadtime ${project.version} - - org.aspectj - ajbrowser - ${project.version} - org.aspectj ajde diff --git a/build/build-properties.xml b/build/build-properties.xml index c735b855b..febfddfec 100644 --- a/build/build-properties.xml +++ b/build/build-properties.xml @@ -109,7 +109,7 @@ + value="ajde,ajde.core,ajdoc,asm,bridge,loadtime,org.aspectj.ajdt.core,runtime,taskdefs,util,weaver"/> - - - - diff --git a/build/products/aspectj/install/finish.html b/build/products/aspectj/install/finish.html index 204deb550..229f3a21a 100644 --- a/build/products/aspectj/install/finish.html +++ b/build/products/aspectj/install/finish.html @@ -6,17 +6,17 @@ -

The automatic installation process is complete. +

The automatic installation process is complete. We recommend you complete the installation as follows:

    -
  1. Add ${installer.output.aspectjrt} +
  2. Add ${installer.output.aspectjrt} to your CLASSPATH. - This small .jar file contains classes required by any + This small .jar file contains classes required by any program compiled with the ajc compiler.
  3. -
  4. Modify your PATH to include +
  5. Modify your PATH to include ${installer.output.dir.bin}. - This will make it easier to run ajc and ajbrowser. + This will make it easier to run ajc.
diff --git a/build/src/main/java/$installer$/org/aspectj/Main.java b/build/src/main/java/$installer$/org/aspectj/Main.java index e4c649094..fa98b8ed0 100644 --- a/build/src/main/java/$installer$/org/aspectj/Main.java +++ b/build/src/main/java/$installer$/org/aspectj/Main.java @@ -1331,8 +1331,6 @@ class InstallPane extends WizardPane { LaunchScriptMaker lsm = new LaunchScriptMaker(context); lsm.writeScript("ajc"); lsm.writeScript("ajdoc"); - //lsm.writeScript("ajdb"); - lsm.writeScript("ajbrowser"); // Moved to the bin dir in 1.2.1 // we should now come back and make the generation of this diff --git a/build/src/main/resources/$installer$/org/aspectj/resources/finish.html b/build/src/main/resources/$installer$/org/aspectj/resources/finish.html index 204deb550..229f3a21a 100644 --- a/build/src/main/resources/$installer$/org/aspectj/resources/finish.html +++ b/build/src/main/resources/$installer$/org/aspectj/resources/finish.html @@ -6,17 +6,17 @@ -

The automatic installation process is complete. +

The automatic installation process is complete. We recommend you complete the installation as follows:

    -
  1. Add ${installer.output.aspectjrt} +
  2. Add ${installer.output.aspectjrt} to your CLASSPATH. - This small .jar file contains classes required by any + This small .jar file contains classes required by any program compiled with the ajc compiler.
  3. -
  4. Modify your PATH to include +
  5. Modify your PATH to include ${installer.output.dir.bin}. - This will make it easier to run ajc and ajbrowser. + This will make it easier to run ajc.
diff --git a/build/src/test/java/org/aspectj/build/BuildModuleTests.java b/build/src/test/java/org/aspectj/build/BuildModuleTests.java index 181d84fcc..b95ed8fa9 100644 --- a/build/src/test/java/org/aspectj/build/BuildModuleTests.java +++ b/build/src/test/java/org/aspectj/build/BuildModuleTests.java @@ -86,9 +86,6 @@ public class BuildModuleTests extends TestCase { fail("" + UnknownFileCheck.STATIC_ERRORS); } } - public void testLicense_ajbrowser() { - checkLicense("ajbrowser"); - } public void testLicense_ajde() { checkLicense("ajde"); } @@ -308,4 +305,3 @@ public class BuildModuleTests extends TestCase { } } - diff --git a/build/src/test/java/org/aspectj/internal/build/BuildModuleTest.java b/build/src/test/java/org/aspectj/internal/build/BuildModuleTest.java index b8a6c6d15..21994404a 100644 --- a/build/src/test/java/org/aspectj/internal/build/BuildModuleTest.java +++ b/build/src/test/java/org/aspectj/internal/build/BuildModuleTest.java @@ -58,7 +58,7 @@ public class BuildModuleTest extends TestCase { private static final String[] SKIPS //= {}; = {"aspectjtools", "ajdoc", "aspectj5rt", "run-all-junit-tests", - "ajbrowser", "testing", "testing-drivers", "org.aspectj.ajdt.core", "weaver"}; + "testing", "testing-drivers", "org.aspectj.ajdt.core", "weaver"}; private static final String SKIP_MESSAGE = "BuildModuleTest: Define \"run.build.tests\" as a system " @@ -184,11 +184,6 @@ public class BuildModuleTest extends TestCase { fail(dupError); } } - public void testAjbrowser() { - checkBuild("ajbrowser", - "org.aspectj.tools.ajbrowser.Main", - new String[] {"-noExit", "-version"}); // compiler version - } public void testTestingUtils() { checkBuild("testing-util"); } diff --git a/build/src/test/java/org/aspectj/internal/build/ModulesTest.java b/build/src/test/java/org/aspectj/internal/build/ModulesTest.java index 5b1692570..49de9fe1c 100644 --- a/build/src/test/java/org/aspectj/internal/build/ModulesTest.java +++ b/build/src/test/java/org/aspectj/internal/build/ModulesTest.java @@ -44,7 +44,7 @@ public class ModulesTest extends TestCase { static { String[] names = { - "ajbrowser", "ajde", "ajdoc", "asm", + "ajde", "ajdoc", "asm", "bridge", "loadtime", "org.aspectj.ajdt.core", "runtime", "taskdefs", "testing-client", "testing-util", "tests", "util", "weaver"}; diff --git a/docs/devGuideDB/ajbrowser-building.gif b/docs/devGuideDB/ajbrowser-building.gif deleted file mode 100644 index 29767c605281e550c5c971da1ac54fa89f2fb928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26404 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 D)}I$7 diff --git a/docs/devGuideDB/ajbrowser-options.gif b/docs/devGuideDB/ajbrowser-options.gif deleted file mode 100644 index 41ba676548bddbbbf059718b9f690cdf38fe6018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9437 zcmV<3BqG~KNk%w1Ve|n80rvm^*4W_S;_1%K*@c9Tyt>7+vdYEA%GTH5+G1niY-)>* zm9(|J($U(|(%|HAZmX=c$HLLb%GrB-gw$MLb#;5CqOH}^-TLab)?Q%t_V(f7;jOO5 z)z#kgi-TllY|K?!QBzd>{QTG0-J+tR(a+jNMoP_DUh(qura462-Qm^Mc#2Oi#hT%I4T)!5;>yvyU|>cYg*%gxxt$JD{Z(Zt8qYjuy_-{#BB+2iHw>g({CnaqWW zu$-R0^6~elsKV*!@g*fT&(Pg&ZI9sJ>b$+tsytPkq`5{O8ib6Z##LPC>GATop2f)2 z%*_A3z|Y*?=JE0L!ctq6l&jEMU+(ViSy*3}l%Hs3Zn?b6z`@bd(c{z8;lst*^O1(t z*x<6Y(7e9X?eO#N?eVs`(a+M{%*)-{*WvB!^To&1#mCk1^7YHi-q_gX_xJe9%+b)& z-OJ9{y}-}*_xP))w93xd{=cNk&e_7m(b?JGS6N^0fqL}x_Tgz~^oo7#>gtGxopyMB zn3$*WfOYVMe9Fz)v9QGdpN-zzgn#s$J5o< z;Kjz&k&%+<=j~r%WuTv_nw+JVn43;eQrg_(@v@uU-Q~HvzKM#DaB*?t;8r?0TN z>g@0LosNfyi{s?$>Fe+4=d#XV=x)&db-v!_sDEnE(I)nVFep zW@i8Y|IEzHA^8LV00000EC2ui0Q3O{0RRa900RjeF#?Feg9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ4mD6r(BlLl=iI>NH0%a<@?%A85Frp=o;bL!m5v!~CWK!XY$ zO0=laqey=yvSsk(B21WoBtjMFvcsX>({Vj%brcUw(Z-vbI0Umtig>V8Gt~dR)C4|t%Bu5YsI4#E4Jy zW8#S@qDbP3EVk(4i!jD0 z=BekNeD>+*pMVA`=%9oaYG|NbB&z75j5g}%qmV`_>7ZqiaYU-(*vJnX#thVYZtC6t(p{c5`)=EdLWjulcEtF6q$gjZu+AA$6a8YM65f~&* zA*e(VMImg$>83vVw9!u?&p!J_6wXNDjI-c6D}@wMj4MS6M1*VZxZyfWLS8OrGY%}=)e68;b=y^Y z;7HhO*KPORc;~J6-h8Y7-Sppp2QK*Fgcol3;fN=$_~M73;rQc_M=tr~lvi%~<(Ox# z`R0$ap@JTuhb}tkDzM?W=b+!A`s#OtUb-4*pfE!*v0UW`C4OAhK`h10fP&LMdtnd` zgA`vpoBPCpbQ?tzLbSD?4D!h*pj2`j7|fssH~2u$t>A+o4B-b$=RgnoBM&G{;T=F&y6B-m7{V9^R&sZh84Lr4D40k8 zK!F2;Q~?dUIK?ynRxz}qwFzlRv{oz7;D#VRqaIRVgcNe%hALW-dtR$z6m{T+t6A}j zJOJMp-JpPRDL{+n>S7wx*hL}$LkhPjLlti!1z8Rm0man3TBZ22RJ}0zH~qWW`TlLw4#btFbFX=Q3X>}p$gHG z)|>kA%x5xF9a3mSHgQnRXJQco-jsq4s<5tZK63$Y>y zo&;!t6exiI0~SbO0Xf*G0BRrw8#v+{+%%^`7s}9vI`p9o1%pH{4}xl%lw@TLB^gG*()2~(f|0lZ8A z4gKMV1Q>M|2ta`|tFQ@T7=#0r06--wae!#WL7H)@1R2Pn4FCXuZ2EM>F%CdhvVPO7 zUOT|mzE;+=Ti)!7z#y+M0~X%!1}s=L4p(KK zKlTwPA-_Y&174RZh)m@uV$ExBSU@%{@P?~V`O9AptT^fkwk~7Y%n%^5m)Gny2AGTg z2rb}p04gAb8Uz5$c+Rt)_sr)$?->h#4z!>LP3S@!`p}3@w4xWy=tevG&}N9Vq$f@3 zN?ZEUn9j7OH_hozds@t2~41ft4!e5wpPTf zQGf*@zu^@IVFn!F&;@viA)4G>a-7&PY%##W2U4g21n4{f8o)pbB2aH5EO0dufPexJ z2m&0gHtcc_+XpOwg9yL}fgfbk93a@iutDIpdDnZ~^(Ob#{F#HV$)FqVkoR59P4I#n z{NM;rxWWnEg@!x);Si6w#3xSiid+2R7|*!IH%@Uec>Loa54p%kPV$nQ{NyPAPr1rh z{&6;FVgoRbxy)g%2{w4#HhMn*asQ_Bb;Pl7d4VVhkrZ z0kV(Q-F}?l5LZ9JwFwXpdPFe@DIgmNd;kF&mIC_n@v zfIjQu&-w$xM*--uo&tkt;0jc@!WB|6b!qkk`qH0%Cmx0nVod zFJJ_}@B%4vg(so~RZ$f$5CUQFg_dNAlD!veXs;qfs75Zj1AI^S5XV6s3F+c2eptD zV_*3j^a3uTY?kODc7`bY)dm;?x!kP5kw4B3zl`H&D9krFwP6j_lLd65{Iks7&?9NCc``H>(Q zk|H^hBw3OM2?SJt3ret(EZLGS`I0ahlQKDzG+C22d6PK*nUgxXlRVjzKKYYC8I(df zltfvSMtPJ*i3=xb1V{h`|L~Mh8I@8wl~h@kR(X|JnUz|(m0a1CUip<^8J1!>mSkC$ zW_gxqnU-p~mS_nCNMHm8!IVzPmULN{c6pb0nU{LGmwefme)*SI>6UN_1ab+OhIyEX znV5>Xn2gz&j!Bh*8JA7@n3P$WmU)?&nVFhNmyt=BlS!3W7@DFvnxt8prg@sEX_``* znylHHuKAj!xtg#!o36Q;wt1UX*_nkomHmL5huND@*$>7zoMi!=PidUKnVia5nY#Iz zQQ4dP5S`LFozz*K)_I-SnVs6Xo!r@-)oGl7LKopZ|HF2%4bN*_-((pl8XT2CASE z$`9)4pccB91bUnix(^A;q0{N1(TPMzbDbOtq9IzHNQ9jpYNGUMBK{zi`#_a3Dxxv! zmq=ulHCm%&X(Ai?q36k>(g~#eP@*Xsq9Xd87n-DenW50>qe42LENY@ss-n~xr9n!f z3EH4fIipj_rBJD(da0ve8kJ+Zqdf|uPfDdII;3lgrYDM>6{@6ix|U3OrXM<@Y>KBt zs;4Phq;LACd3vQKYNTv>rB1r1dpf9zYNUMss;AVcrT^fiWE!cH>ZLbIsayJ`TZ%Ma z%BhqJren&boO+`<>Zu~ysb#96Ra&Tdil%t#s*ZZ1K&q&+nw@bvr?_gCb-Jo*$||VL3aHWvsgkOx#2TqNDy^AXtzwF)pBkz#O0C!Wt>F5p zn#!AYN~nQatLVzBZJMlp`mDM7u4%ceh6=2`+NyoJsy;fe=W49Lny<}zuEpA`vAUoy zIZ#O9s$JTx*@~^!y0EFLs`L7*=^C(W>a4;ltVjy4B1@L?%BZob zvHR+=Z;GrN%df+#uIS3KFKeAzN}~(^d$5w4t>PN3n98l)TB#MAvkg0`plP5q`lm9R zvL>ssAIqvVJF-w4mL+SYZu+YITD2?duK+u!ih8n!YPHMSvh_-^1`DpyDzpkav}r4} zsj9Q4+OtDDv1JRN`r4{uOQ=?QsQZetPaCy<%av1$uSH6vLE5OtYOaOrrz6U>c#EQZ zil~TstSBqF*V&*xYpSP;vkt4an<}PnE29oOqovxjpG&$I+oVowtgu?Rc3ZcHo2all zu($fRv>TNr+ns4Tq4k-&{t2nLd9e=~p}MP}vs=5hd%N7pyTgl~%3Ghldz-*(mZ-bD z#B03PJC(>wz1q9I(fPdB`w!Fq%e}q(z2uv{;(NXl>b=(+zUVuj#Y?^;YrgF}zxJuV z*2}*1Yo6~5zwj!*`TM{6Td@3#u>gFY`#Zq6>Yl{8z_p0LPszX#9KjMi!EVtH3hclb zoWUBboEH3+k_iL?yul(o!X&Ji9XyzF8NwyJ!Ytgv<9Wd@9K$j^!(e&BAFRSOoWnY- z!#3=hAiTps9KHNyJTw!(u7L zRqVu548~AQl~jzyW_-qMsl`8x#MCmz|DeQTJjPGV#BU76bPSbqY{yL8#(Rv%ZH&f% z9LQOz#sWM9hJ46FkjHobT*rPK#f)6XbWFuwjK`0B$A7%YM~ujtyvdy0$)5blpd8Ag zJj$e8%BFnEsGQ2GyvnTH%C7v%upG;p9KwVQl|!%+?N9LAKa$dF9QjXcM??8c1z z$NxaV$ehf|yv)qp%x`ha&k4i-0L^h6$x95zzKqFnOw5)H%)~6n;Ecx9e4Nre&Th=d zmAuWCY|WCq&Bff!a_r6FJkM5a&b9oM=4{8moXb@l#lrl{?L5g-9Ld_u&-8rI^-Rm< z%*F1E&<_33cxlfIjl>XL(H32o679i0T*wT4(H{NLXqnL{yv4TM(I9=&DD9OZeZwW4 z(k}hdDy`5OUBvkRY|=1&(=ff#8{N`4-P1lj%`!dGYYfysUDP=p)GS@oM!nQ1t*|BMrj{Vq)DV)yy*`Q6F$E?{%z0+&W*(My?s=eC4sJ@$x+J@=btUcSbUBMmw z+5`Q?@=Vc2{LNF@&sM41zx~M9?3cp5&s=%j!JWmm-Q3Q77Oq{|PhHp5T-;fy++^(A z4K3W*-OE`2+1+e;+~7UjUpd}lDcjGT-s-&-(H+e*UDa@%-Pjz=kX*)kJjuqa%jj&( z-;B-%{oin`$N|pZ1OCMU?%mc5;QHOq?EKEcyvLGU#s!Vs`-v4uq!s&c6(UL&8BP}+ zp5Y%p79GA7BaY!FPU5~;;$ETR4BXzqInm2K-|?KwGfv?&j@;|q-@xqO#mvp=49~=E z-$Cx(a@@{8PUJgI&_3?VKQ82XT$i3b;w2v98ZP3sIOSC?7A&6SVX@^~4i{g3;u7rQ z6V`5ik|3(p6QF;>5$&&n(pb7 z&gr6F>K2~rQhwSl+_~Q4I=;8So@BHlk9?(AS%>sYU=bYoZF2>8Q<`XXLyuRNA zf8-L6>~E=G_G>Y-#4(XP@>9Q{A)XwoDZ|xhN@v1)ZA#d;HzVea( z{_UYo^Pi64GB5J4e)Il-@3$V@1g_+Ltj|MV0IpVeCPen&JjM)di>k@o!~+4 z??&&$4c^FFf8%ma@#gK77T*>2p7PWV?ijD`V-NC-9`Y!z_VcduZy)z15AN}v?O$H= zY!CBpZ{p?d@mJyVW**jO`Ss5ZmW1!Z0uAM(j`Ol!^D0jA++O!&U+=B%_w+vZ=3ei5 z@92&H@|4f&aF6bmV|%!`+miVulS@sT(0squlu-f z>M+0QJJ0#6uKSw5`=pQdod5YTkLtmH{Jd}Spx)|Op8Gf7;j5q2`VQN%9l>G$4i?=H z=EnH_W+DD_as8&9{o4PR=uMpD-}b-Q{&E5TT5gQyKiztr{>;7J`mg`>4-iOz`1@CI z2*H906)t4h(BVUf5hYHfSkdA|j2Sg!jwD&q&(&bB-F;jYc zcu-+KAV`b=0b)cT!hbe74kcRD=uxCel|u9=)9F*FQKe3$8kMF)p#^d3jwW5&^l8+oQ$rM-ldxByVMEWRUAuArQ_8t@@8(^Z z^WmGWGk@J|+xT(hOL6yR-rV_flUEzI=31C|(BH|mZ|ClCIdt&h#YdJN__A>8v9ot) z-~Rab@$u!)XIXwB_1BuQyXW8EIDGm76fi*h6vA&f_54$C!Oq~@=RuM7`RG9iSCSC2 z3njepr42*s(4-GR(vZ0fBTR`x6aAqu#OT&LFg@THlyOF~zT2?F5+}4UG8|)Kk;RdK z)Umf5S-R1~Ayr(dz!f`BQ%OUMq!Um+87*|t zKk=*+$w}Xg^hhR)O9(RT2(AmGkR6b+b}JO&`c#A5?5X+ zy|mXH|Ev?(K!4TsSVbqr(^6dtCAQEbmo-+?TQ5b{*iQHR^hy0>TPW2ksSH=kDNoIk zTq?`W^4xD(ZB^ZKPZgKkc;)31UU=O#m(+FNombs_!|iwAc+E`rUvpbsm*2#e6Y^L_ zSIo6hL#eHF&=iwR_S$IeoHI^|pPhC@UhhP)$ByYtk|bOs29(fjUxZRrTHB@fW;59( znBaL?&6!<#7si?2eHZT1=zDX%S>B^}R`}?2bsm~$rHc;#S}})DYPsc!r`;9K6gAbj z>yDMJmTY5HR+MWuttD1vYlCz>A~x@T5zKOZWn2v z8+Y1Z#CI-S;c}yHd}_&OP0B`U^%UFU2rG_u<7e;ux@?T|6xnpueN`LuBt=ft?3KOt z{Oj03vO74uyIs#{r2z+C=-?T?nsJ6NFMi-Kn=f2=#;-K7ZvE!;jOS-EFIP*YVckm?yBQ zfhl1KeBSdcN4&sA@Lj^g9^m|Cy#x-AX_Q;u1gWS0LB@1XJP*?veMmT-6FMb;P8wi> z)YLPejSF(5LRY^yNI`!|?}BGS*thJ(H*v-Ac=)QC4-Ys)8A=U?*Bf40L>QhF%56ST zgyLjYs1|M!@OMYq-l%BA9l|XJKm#IU8J}}SQ01+FO6j5(zlfYLiqVX7q+@f?m_--9 zQIC7X$QbMRM?hM|MR&`O7WsHcL`I|^YEexi9r;K|M)Hw^T}hTy8uFF1q-8B_i4{VIl4iH$WiNe+$yi?Um%}7x zG5ZrtQ5sX3%VcI~kh#ldMpK&86w5R9Mon!0W>cFOvE~}L`Au+cvzuECXF1Jj%yFJm zo$Fj?I@$S7c;3>T@uX)xPdQI}=2M@1#OFT!`A-G)6QBbnsCK$J1cWA3p$lbbLmm21 zh(=VR6QyWHEqYOmW>ljake z(x{)B=2WM)x#@Lw`ct6Z29H4{YEjS9Q*s(rsY|s8QknWxsAj~eQKf2CA2QV~RZdnx zDixckcm+H>u8f#SJTGUppI3g<0NQ3B-)UH1w&rIWc%9%2{b9N1#WTmC|slv*SO1- z5ptRPTx>cQy3=i@bg6sYVp zX)8-9X|=1$r4{DJ3ajK=gvdnyZt8&O$73jq#K$pxteULMMo+STyCD(d8n_zXD_?G&Ggo=*W}gZ9&TjSLzUoX@eI+q?OIu_`wXO`q|UVUR#kJD>W~U z*zfkL^QcYM$YKz;GyWX^+H3_jTj#2C96MdQF}v=eVp`a$B{ip+&F_6ju-LoJxbi*- z!5u1l(7WAqz>PidSdT7KU$}*-p;0>SmE#jEGem{KUVIuh2 z5zrhMfsfB8v%_{YMOd`cbvdB|v<%8~DU=|Q7-)2IF-s8@aKFTD9+yI%H6Vg2lF zA0>9*UiV0;{qAM|-+SM;9{9me{qTujdgC8o^2t}ej1S6K=tp1r)2Dv*t$%&&R}}UI z0e$zq|9#zz-lxqc|3=nYe)Kmr;^}9v$C3B*4NtU&s^Kn#RG4ctKX>%e+?z`LM2 z5v&UmEWx?>ClI73#*+^Zy9rKu!B2_76f>t4jHeev4*ST#_dpCD{Er$eryGQ)AB>1N zI6@>$LM1#xqS(P8qzxzZk0KPp0rICQe26%xh%6k6DD00ek|oQN|t zKOcO;+4w^L_b9_{8bfx1!-YsgBW%Jol)^mpLN@#+Ib0_?R0unSh(YY5Jp{u;e8WDB z!z$dTKum}&q>zNz2Zf--Lc9n!tO!Xg3QBA;`&-0<=tPPTMJ@!zZ2CiWdc=arLQ(9* zR$N6q{6vg+MWP_ZiO58YphR1Qh+WhORh%YNJf~lb16$O^P=v%-gu#pG#Z6q1NqmrJ zbVW=|#AW=4SA<4uv_@&9MMLzbU^J&;EXHia#(%g(PgKTSWQc2=#B4mqbv(xz+z4X~ z#ckZicD%=F^u|Wir*K>dU7W{qOvZRjM|G6McZ^18>_w)aMonbLdj!aN1jugOr*AB$ zeyqg*hlIsaltqHXNOxpMar8*hV8~H)#*BPNiOffe+{b(x#*BPPa~w&I?8u0O$dd#~ zl^n=w#7J!X$B#TlHPpvKvO-ftMs4KAY>df{AW4bXL~R^Lhjhwj%t@{2Lvi%Uag;`& z^u?m2riu(Fm!t@#yhWzm4qTK+e|!jqTuPxF4x%iIu{27KI7{xJ%Zvy~b==6697;#* z%77G0fvieBoJmD&OY3+`qKHe4oXfJ*4!d+rzm%r01gBwKLd!(Lz*LLK#G1xTj$f2a zmb9nOPSZP16}jLtWN8^PVCH1?c7f8>`w3ePVfv*@f=U` zEKl=1PxMSr^;}Q(T+iM?0{Dzi`J7MstWW#APyEbJ{oGIf>`(vvPXG;20Ub~REl>kJ zPy|g-1zk`EWzg3!0tk&z37t?1txyZSPz=pb4c$-P!J7K5gkzyEm0FaQ4~#4 j6 - - AspectJ Browser - - - Introduction - - AJBrowser presents a GUI for compiling programs with ajc - and navigating crosscutting structure. - - - The AspectJ Browser can edit program source files, - compile using the AspectJ compiler ajc - run a program, - and graphically navigate the program's - crosscutting structure. - For more information on ajc, - see . - - - - - - Launch the browser from the command line either - by typing "ajbrowser" to invoke the script in - {aspectj}/bin - (if AspectJ is installed correctly) - or by using the - aspectjtools.jar directly, - and specifying no arguments or some number of - build configuration files - (suffix .lst): - -java -jar aspectj1.1/lib/aspectjtools.jar aspectj1.1/doc/examples/spacewar/debug.lst - - - - - - - Building Programs - - Build Configurations - - A build configuration is a set of files to compile for a - program (and optionally some additional compile arguments). - Because ajc requires all sources to be specified - (at least using the -sourceroots option), - most users create .lst files that list - the files to compile (one argument per line, globbing - permitted - for more details, see ). - - - To work with a particular program, select the - corresponding ".lst" build configuration file - from the GUI using the File menu, "open" item, - or by using the - "Open Build Configuration" button - ( - - - - ). - - You can populate the build list from the command line - by passing any number of ".lst" paths. - (However, if you pass in any non-".lst" arguments, - it will run the command-line compiler directly.) - - - To switch between build configurations, - select, add, or remove them - using the corresponding toolbar buttons. - - Global build options are stored in an - .ajbrowser file in your HOME directory. - Edit these from the GUI by clicking the "Options" button - or selecting the Tools menu item "Options...". - This is how to set classpath, aspectpath, etc. - - The following sections walk through a build. - - - - Compiling a Program Build Configuration - - - To compile click the "Build" button - ( - - - - ), or - or use the tools menu. - - - - You may select - from different build configurations in the GUI - (see label 1 in the graphic below). - (If you get classpath or other errors, set up the - global build options as described above.) - - - - - - - - - - - - - Navigating Program Structure - - - Select nodes in the program structure by clicking them (see label 2). - If one node is related to one or more other nodes by an association the - name of the association will appear below that node and will be - displayed in italics. Links to other structure nodes appear in blue - below the association. If there is no corresponding source for the - link it will appear light-blue. - - - - - - - - - - - Example: Exploring the "Spacewar" sample code - - - - Launch ajbrowser - - - Choose "File -> Open" or click the "Open Build - Configuration" button - ( - - - - ) and select the configuration file for debugging - the spacewar example, in - examples/spacewar/debug.lst. - - - Click the "Build" button ( - - - - ) to - compile. The left pane should fill with a spacewar declaration - tree. If there is a compiler error, the clickable error message - shows up as in label 4. - - - Note: If you did not set up your classpath, the - compile will fail with a message that you need to install - aspectjrt.jar on your compile classpath. To do that, select "Tools - -> Options" or click the "Options" button - ( - - - - ). Click the Build Options tab - to view the Build Paths pane. Edit the classpath entry to use your - install location. For example, if you ran from the base Aspectj - directory, the classpath need only include - lib/aspectjrt.jar (though the browser may populate - the classpath with the bootclasspath and classpath initially.) - Be sure to use the - lib/aspectjrt.jar that came with the browser. - - - - - - - - - - - - - Different structure views: The structure tree at the - left can display different orderings and granularity for structure: - - - The package hierarchy view shows the traditional hierarchy - of package, class, and members. - - The inheritance view shows the hierarchy from topmost - parent classes through subclasses to members. - - The crosscutting view shows the aspect members - and the code they affect. - - Additional buttons in the pane can be used to change the - granularity and filter out items. - - - - - - - Whenever you select an item in the tree view, the - source pane scrolls to that item. If you select a leaf item - representing another program element, then the tree - selection will go to the corresponding node. (See below for - how to use two panes to maintain your place.) - - - - - - When working with aspects, it helps to be able to navigate - between different program elements: - - - - - When looking at a method, find the advice that - affects it. - - When looking at a pointcut, find the advice that - uses it. - - When looking at advice, find what it advises - - e.g., method calls or executions, initializers, etc. - - - When looking at a type, find any aspects that - declare members or supertypes of the type, or - vice-versa. - - - - - You can view the advice on a particular method using the - default, hierarchical view. Navigate to the tree item for - spacewar.Registry.register(SpaceObject) - in the debug.lst config file. Now, in - the lower, file view, you can see and navigate to the advice - using the subtree whose parent is the method - affected by relation. - - - You can also use crosscutting view to see the - advice using a pointcut or the methods affected by advice. - For example, to see what advice uses a particular pointcut, - navigate to the tree item for the pointcut - spacewar.Debug.allConstructorsCut() in - the debug.lst config file. You can see - and navigate to the advice that uses the pointcut using the - pointcut used by relation. - - - As an example of seeing the methods affected by advice, - while still in the same view, select the first - before advice in - spacewar.Debug. It has relation - sub-trees for both uses pointcut and - affects constructions. The - affects relations will list different - kinds of join points - constructor or method calls, etc. - - Note that the AspectJ browser can only display - static structure (whether hierarchical or crosscutting). - That means that dynamicly-determined pointcuts (like - cflow(pointcut)) - will not be shown as picking out static points in - source code. Displayable pointcuts roughly correspond - to those that can be used in a - declare error statement. - - - - - - - - Running Programs - - The browser supports a limited form of running compiled programs. - To run programs that have been built, click the run button - or select one of the run menu items in the project menu. - You can run in the same VM or spawn a new process; - the latter is generally better for GUI programs. - - Both require that any classpath you set be specified - using platform-specific paths and path separators (the - compiler might be more tolerant). - Output and error streams will be - merged into the streams of the browser (using separate - threads, so it may take a few seconds for the pipe - threads to gain control.) Errors should - be detected and displayed in a dialog. - - - The GUI does not support killing a running program, - so if your program might hang, - be sure to save your files since you may need to - kill the browser itself to kill its child processes. - - - - - Isolating problems running the AspectJ browser - - - If you have problems with the browser not solved by the documentation, - please try to see if you have the same problems when running ajc - directly on the command line. - - - - If the problem occurs on the command line also, then the problem - is not in the browser. - (It may be in the compiler; please send bug reports.) - - - If the problem does not occur on the command line, then it may - lie in the parameters you are supplying in the build options. - - - If the build options look correct and the problem only occurs - when building from the browser, then please submit a bug report. - - - - - Known issues with the AspectJ browser - - For the most up-to-date information on known problems, - see the - bug database - for unresolved - - compiler bugs - or - - IDE bugs - . - - - - - Memory and forking: Users email most about the browser task running - out of memory. - This is not a problem with the browser; some compiles take a lot of - memory, often more than similar compiles using javac. - The browser does not support forking, so the only solution is to - edit the java command line or script that launches the browser - to add memory. - - - Editing build configuration files: this is not currently supported. - - - The structure model is incomplete after incremental compiles. - To get a complete structure model requires a full build. - - - If you change the output directory, you must do a - full build. - - - - - - Limitations - - - - The AJBrowser expects the package and directory structure to match. If they do not - it will be unable to browse to the corresponding file. - - - The "Run" feature launches applications in the same VM. As a result, if a Swing application - is disposed the AJBrowser will be disposed as well. - - - - - - AspectJ Browser questions and bugs - - You can send email to - - aspectj-users@dev.eclipse.org. - (Do join the list to participate!) - We also welcome any bug reports, patches, and feature requests; - you can submit them to the bug database at - - http://bugs.eclipse.org/bugs - using the AspectJ product and IDE component. - - - - - - - - - - - diff --git a/docs/devGuideDB/ajdejbuilder.xml b/docs/devGuideDB/ajdejbuilder.xml index a201dd48d..f8071acc1 100644 --- a/docs/devGuideDB/ajdejbuilder.xml +++ b/docs/devGuideDB/ajdejbuilder.xml @@ -84,18 +84,20 @@ r To run the project select "Run Project" from the AspectJ toolbar, or click <ctrl>F12 while the editor pane is active. Note that the - "AspectJ Runtime" library must be added to your project in order to - run. If the library is not added you will see a "java.lang.NoClassDefFoundError: org/aspectj/lang/Signature" error. The library is created automatically for you from the runtime + "AspectJ Runtime" library must be added to your project in order to + run. If the library is not added you will see a + "java.lang.NoClassDefFoundError: org/aspectj/lang/Signature" error. + The library is created automatically for you from the runtime in "jbuilderdir/lib/ext". You can also create a new library - to use the runtime from a different location. If you have not added the + to use the runtime from a different location. If you have not added the library to the "Required Libraries" of your project it will be added automatically when you restart JBuilder. - JBuilder7 users please note: when you set up a run/debug configuration - you must select the "Build Target" (at the bottom of the - "Runtime Properties" dialog) to be "<None>". This will ensure - that the Java compiler is not invoked on your AspectJ sources + JBuilder7 users please note: when you set up a run/debug configuration + you must select the "Build Target" (at the bottom of the + "Runtime Properties" dialog) to be "<None>". This will ensure + that the Java compiler is not invoked on your AspectJ sources before running or debugging the project. @@ -105,7 +107,7 @@ r - Navigation of program structure is provided by the AspectJ Browser, so apart from a JBuilder + Navigation of program structure is provided by the AspectJ Browser, so apart from a JBuilder look and feel, the extra navigation AspectJ allows work as described there. In particular, you can use views with labels 1, 2 and 4 of the second screenshot to navigate structure using the blue links, and you @@ -117,7 +119,7 @@ r Manipulating Build Configurations Build configurations can be manipulated adding, removing, and - editing build configuration files. The AspectJ Browser is used to select the + editing build configuration files. The AspectJ Browser is used to select the current build configuration. Configurations are represented by ".lst" files which are described in the ajc documentation. diff --git a/docs/devGuideDB/devguide.xml b/docs/devGuideDB/devguide.xml index e79ab53a2..90e6e4aec 100644 --- a/docs/devGuideDB/devguide.xml +++ b/docs/devGuideDB/devguide.xml @@ -7,7 +7,6 @@ - @@ -25,9 +24,9 @@ - Copyright (c) 1998-2001 Xerox Corporation, + Copyright (c) 1998-2001 Xerox Corporation, 2002 Palo Alto Research Center, Incorporated, - 2003-2005 Contributors. + 2003-2005 Contributors. All rights reserved. @@ -35,13 +34,13 @@ This guide describes how to build and deploy AspectJ programs - using the AspectJ tools and facilities. See also + using the AspectJ tools and facilities. See also The - AspectJ Programming Guide, + AspectJ Programming Guide, the documentation available with the AspectJ support available for - various integrated development environments (e.g., - Eclipse AJDT), - and the most-recent documentation available from + various integrated development environments (e.g., + Eclipse AJDT), + and the most-recent documentation available from the AspectJ project page, at http://eclipse.org/aspectj. @@ -52,29 +51,27 @@ AspectJ command-line tools - + <literal>ajc</literal>, the AspectJ compiler/weaver - &ajc; + &ajc; <literal>ajdoc</literal>, the AspectJ documentation tool ajdoc produces JavaDoc-style documentation including crosscutting information. - &ajdoc; + &ajdoc; <literal>aj</literal>, the AspectJ load-time weaving script aj launches programs, configuring basic load-time weaving. - &aj; + &aj; - - &ajbrowser; + &antsupport; <w; &compatibility; - diff --git a/docs/devGuideDB/tools-intro.xml b/docs/devGuideDB/tools-intro.xml index ab29d0c21..bc6051489 100644 --- a/docs/devGuideDB/tools-intro.xml +++ b/docs/devGuideDB/tools-intro.xml @@ -1,14 +1,14 @@ - Introduction to the AspectJ tools - The Eclipse AspectJ implementation The AspectJ Programming Guide describes the AspectJ language. This guide describes the AspectJ tools produced by the AspectJ - team on + team on http://eclipse.org/aspectj. The AspectJ tools include - ajc, the compiler/weaver; @@ -25,46 +25,46 @@ classes. - Since AspectJ 1.1, the tools have implemented the AspectJ language + Since AspectJ 1.1, the tools have implemented the AspectJ language using bytecode weaving, which combines aspects and classes to produce .class files that run in a Java VM. There are other ways to implement the language (e.g., compiler preprocessor, VM support); the AspectJ team has always tried to distinguish the language and the implementation so other groups could build alternative implementations of AspectJ. To that end, - + The AspectJ Programming Guide, Implementation Notes describes how the Java bytecode form affects language semantics. VM- or source-based implementations may be free of these limits or impose limits of their own, but most should be fairly close to what's possible in Java bytecode. - + Please be careful not to confuse any description of weaving or of this implementation of the AspectJ language with the AspectJ language semantics. If you do, you might find yourself writing code that doesn't work as - expected when you compile or run it on other systems. + expected when you compile or run it on other systems. More importantly, if you think about aspects in terms of weaving or of inserting or merging code, then you can lose many of the design benefits of thinking - about an aspect as a single crosscutting module. + about an aspect as a single crosscutting module. When the text below introduces an implementation detail, it will warn if users make mistakes by applying it in lieu of the language semantics. - Bytecode weaving, incremental compilation, and memory usage Bytecode weaving takes classes and aspects in .class form - and weaves them together to produce binary-compatible .class files that + and weaves them together to produce binary-compatible .class files that run in any Java VM and implement the AspectJ semantics. This process supports not only the compiler but also IDE's. The compiler, given an aspect in source form, produces a binary aspect and runs the weaver. IDE's can get information about - crosscutting in the program by subscribing to information + crosscutting in the program by subscribing to information produced by weaver as a side-effect of weaving. Incremental compilation involves recompiling only what is necessary @@ -73,7 +73,7 @@ Incremental weaving supports this by weaving on a per-class basis. (Some implementations of AOP (including AspectJ 1.0) make use of whole-program analysis that can't be done in incremental mode.) - Weaving per-class means that if the source for a pure Java class + Weaving per-class means that if the source for a pure Java class is updated, only that class needs to be produced. However, if some crosscutting specification may have been updated, then all code potentially affected by it may need to be woven. The AspectJ @@ -89,16 +89,15 @@ (While it may seem like more memory, the proper comparison would with with a Java program that had the same crosscutting, with changes made to each code segment. That would likely require - more memory and more time to recompile than the corresponding + more memory and more time to recompile than the corresponding AspectJ program.) - Classpath, inpath, and aspectpath AspectJ introduces two new paths for the binary input to the weaver which you'll find referenced in , - , , and . @@ -109,28 +108,28 @@ In AspectJ tools, the aspectpath is where to find binary - aspects. Like the classpath, it can include archives (.jar and .zip files) - and directories containing .class files in a package layout (since + aspects. Like the classpath, it can include archives (.jar and .zip files) + and directories containing .class files in a package layout (since binary aspects are in .class files). These aspects affect other classes in exactly the same way as source-level aspects, but are themselves - not affected. When deploying programs, the original aspects must be included + not affected. When deploying programs, the original aspects must be included on the runtime classpath. In AspectJ tools, the inpath is where to find binary - input - aspects and classes that weave and may be woven. - Like the classpath, it can include archives and class directories. + input - aspects and classes that weave and may be woven. + Like the classpath, it can include archives and class directories. Like the aspectpath, it can include aspects that affect other classes and aspects. However, unlike the aspectpath, an aspect on the inpath may itself be affected by aspects, as if the source were all compiled together. - When deploying aspects that were put on the inpath, only the woven output + When deploying aspects that were put on the inpath, only the woven output should be on the runtime classpath. Although types in the inpath and the aspectpath need to be resolved by the AspectJ tools, you usually do not need to place them on the classpath - because this is done automatically by the compiler/weaver. But when using + because this is done automatically by the compiler/weaver. But when using the WeavingURLClassLoader, your code must explicitly add the aspects to the classpath so they can be resolved (as you'll see in the sample code and the aj.bat script). @@ -140,18 +139,18 @@ weaving with binary aspects, users forget to deploy the aspect itself along with any classes it requires. A more subtle mistake is putting a binary aspect (BA) on the inpath instead of the aspectpath. In this case - the aspect BA might be affected by an aspect, even itself; this can - cause the program to fail, e.g., when an aspect uses exclusion to + the aspect BA might be affected by an aspect, even itself; this can + cause the program to fail, e.g., when an aspect uses exclusion to avoid infinite recursion but fails to exclude advice in aspect BA. The latter is one of many ways that mistakes in the build process can affect aspects that are written poorly. Aspects should never rely on the boundaries of the build specification to narrow the - scope of their crosscutting, since the build can be changed + scope of their crosscutting, since the build can be changed without notice to the aspect developer. Careful users might even avoid relying on the implementation scope, to ensure their AspectJ code will run on other implementations. - \ No newline at end of file + diff --git a/docs/developer/IDE.md b/docs/developer/IDE.md index fd2c25957..2dc560008 100644 --- a/docs/developer/IDE.md +++ b/docs/developer/IDE.md @@ -11,8 +11,8 @@ the AspectJ Compiler _ajc_ from the command line. Please refer to the [AspectJ Development Environment Guide](https://www.eclipse.org/aspectj/doc/next/devguide/printable.html) for more details about on-board AspectJ tools, such as _ajc_ (compiler), _ajdoc_ (aspect-enriched Javadoc), _aj_ -(load-time weaving helper), AspectJ Browser (simple visualisation tool for cross-cutting aspect structure) as well as -basic information about load-time weaving configuration and the built-in Ant task for AspectJ. +(load-time weaving helper) as well as basic information about load-time weaving configuration and the built-in Ant task +for AspectJ. ## IDE support @@ -95,8 +95,8 @@ If you wish to install AspectJ in a separate directory and use it from the comma feel free to download the **AspectJ installer**. It is and executable JAR installer. It requires Java and possibly admin rights, if e.g. under Windows you want to install AspectJ to _C:/Program Files/AspectJ_. You execute it from a command prompt via `java -jar installer-.jar` and select your installation options. Then you add `/bin` -to your path and are good to go. You can now call tools like the Aspectj compiler `ajc`, the AspectJ documentation -generator `ajdoc` (similar to Javadoc) or the AspectJ Browser `ajbrowser` from the command line. +to your path and are good to go. You can now call tools like the Aspectj compiler `ajc` or the AspectJ documentation +generator `ajdoc` (similar to Javadoc) from the command line. You can find older installer versions until 1.9.6 on the [AspectJ website](https://www.eclipse.org/aspectj/downloads.php), more recent ones are attached to AspectJ [GitHub releases](https://github.com/eclipse/org.aspectj/releases) as diff --git a/docs/developer/modules.html b/docs/developer/modules.html index 6989c81a3..0aa3e8cfd 100644 --- a/docs/developer/modules.html +++ b/docs/developer/modules.html @@ -8,9 +8,9 @@ AspectJ modules @@ -142,19 +142,19 @@

AspectJ Modules

-

There are a number of different structures [Parnas]: "the module structure, -the uses structure, the runtime structure, .."  This document overviews module structure and summarizes what is hidden by each. -For detailed documentation refer to the individual module sources and docs +

There are a number of different structures [Parnas]: "the module structure, +the uses structure, the runtime structure, .."  This document overviews module structure and summarizes what is hidden by each. +For detailed documentation refer to the individual module sources and docs available via CVS.

Core Modules

CVS Location: dev.eclipse.org:/cvsroot/technology/org.aspectj/modules

-To set up for building, one need only check out the module directories within the +To set up for building, one need only check out the module directories within the modules/ directory. In Eclipse, check out each module into the the workspace as a project. (Note: module dependencies may change at any time, so this documentation might be out of date. -The Eclipse .classpath files specify the module dependencies, +The Eclipse .classpath files specify the module dependencies, even when using Ant to build outside of Eclipse.)

@@ -172,32 +172,32 @@ even when using Ant to build outside of Eclipse.)

ajbrowser -

ajde, asm, bridge, util, taskdefs +

ajde, asm, bridge, util, taskdefs (pseudo, for build system)

- This module contains the ajbrowser application. It depends on the ajde module -for access to the aspectj compiler, and also for the swing user interface + This retired module used to contain the ajbrowser application. It depends on the ajde module +for access to the aspectj compiler, and also for the swing user interface components that ajde provides.

ajde -

asm, bridge, +

asm, bridge, org.aspectj.ajdt.core, org.eclipse.jdt.core, util

- Hides the details of accessing the aspectj compiler - and interpreting compilation results (error messages, structure - model, etc.) from other applications (typically IDEs) that need + Hides the details of accessing the aspectj compiler + and interpreting compilation results (error messages, structure + model, etc.) from other applications (typically IDEs) that need to invoke it programmatically. - Changing any public interface in ajde can break all the IDE + Changing any public interface in ajde can break all the IDE integration projects and should be done with care.

- It also contains a library of common swing user interface - components that can be used by any swing based IDE. Ajbrowser - and the non-eclipse IDE integration projects use this library + It also contains a library of common swing user interface + components that can be used by any swing based IDE. Ajbrowser + and the non-eclipse IDE integration projects use this library (except for the emacs support). @@ -207,8 +207,8 @@ components that ajde provides.

bridge

- Contains the Abstract Structure Model, which represents the result of -an aspectj compilation. Clients of ajde are returned an instance of the + Contains the Abstract Structure Model, which represents the result of +an aspectj compilation. Clients of ajde are returned an instance of the structure model which allows them to navigate and interpret the static structure of an aspectj program. @@ -218,22 +218,22 @@ structure model which allows them to navigate and interpret the static structure

util

- Contains an interface and implementation of classes realted to - compiler messages including: source locations, handling, and - formatting.  Intended to minimize dependencies between + Contains an interface and implementation of classes realted to + compiler messages including: source locations, handling, and + formatting.  Intended to minimize dependencies between testing, the compiler, and ajde.

org.aspectj.ajdt.core -

asm, bridge, org.eclipse.jdt.core, +

asm, bridge, org.eclipse.jdt.core, runtime, testing-util, util, weaver

- Front-end of the AspectJ compiler and extension of Eclipse's JDT compiler.  - Extends the JDT compiler's parsing and name resolution to - understand AspectJ declarations.  Also extends incremental + Front-end of the AspectJ compiler and extension of Eclipse's JDT compiler.  + Extends the JDT compiler's parsing and name resolution to + understand AspectJ declarations.  Also extends incremental behavior with understanding of AspectJ dependancies. @@ -257,14 +257,14 @@ structure model which allows them to navigate and interpret the static structure

 

- Small runtime library required for building and running AspectJ + Small runtime library required for building and running AspectJ programs.

taskdefs -

bridge, org.aspectj.ajdt.core, +

bridge, org.aspectj.ajdt.core, util

@@ -277,20 +277,20 @@ structure model which allows them to navigate and interpret the static structure

 

- Common utility classes including data type, file, and stream + Common utility classes including data type, file, and stream manipulation.

weaver -

asm, bridge, runtime, testing-util, +

asm, bridge, runtime, testing-util, util

- Back-end of the AspectJ compiler, built on top of the BCEL - bytecode toolkit.  All advice planning and weaving is done - here.  Takes an aspect bytecode format and other Java + Back-end of the AspectJ compiler, built on top of the BCEL + bytecode toolkit.  All advice planning and weaving is done + here.  Takes an aspect bytecode format and other Java classfiles as input.  -

  • ajbrowser: a graphical editor for - compiling programs with ajc - and navigating the crosscutting structure of those programs
  • - -
  • the directory <aspectj install dir>/lib has the AspectJ binaries,
      -
    • aspectjtools.jar: libraries for +
    • aspectjtools.jar: libraries for ajc, ajbrowser, and the Ant tasks
    • aspectjrt.jar: runtime library for AspectJ programs
    • @@ -185,9 +179,9 @@

      2 Install Procedure

      -

      The AspectJ tools ajc and ajbrowser are -Java programs that can be run indirectly from the scripts or -directly from aspectjtools.jar. +

      The AspectJ tool ajc is a +Java program that can be run indirectly from the scripts or +directly from aspectjtools.jar. The aspectjrt.jar needs to be on the classpath when compiling or running programs compiled by ajc. This procedure shows ways to do that. @@ -196,11 +190,11 @@ by ajc. This procedure shows ways to do that.

      After finishing automatic installation, we recommend that the following steps to complete your installation:

      -

      2.1 Add <aspectj install dir>/lib/aspectjrt.jar +

      2.1 Add <aspectj install dir>/lib/aspectjrt.jar to your class path

      -

      This small .jar file contains classes required to compile programs +

      This small .jar file contains classes required to compile programs with the ajc compiler, and to run programs compiled with the ajc compiler. You must have these classes somewhere on your class path when running programs compiled with ajc. For detailed instructions @@ -236,21 +230,7 @@ to create short launch scripts to start ajc easily (section 3).

      If you did not use the automatic installation process or the default launch scripts do not work on your system, you may wish to -create short launch scripts to start ajc easily.

      - -

      You can also run the aspectjtools.jar directly -using java's -jar option: - -

      -C:\jdk1.3\bin\java.exe -jar D:\aspectj\lib\aspectjtools.jar %* -
      - -

      With no arguments or only argument list (.lst) files, this will launch -ajbrowser, the GUI structure browser; otherwise, it will -run ajc, the AspectJ compiler. This means that -if your browser is set up to run jar files, clicking a link -to lib/aspectjtools.jar will -launch ajbrowser. +create short launch scripts to start ajc easily.

      You can also create scripts like those created by the installer. These scripts use full paths that are system dependent so you will diff --git a/docs/dist/doc/index.html b/docs/dist/doc/index.html index 36bba4821..371961da2 100644 --- a/docs/dist/doc/index.html +++ b/docs/dist/doc/index.html @@ -105,8 +105,6 @@ This is a guide to ajc, the command-line compiler; - ajbrowser, the stand-alone - GUI for compiling and viewing crosscutting structure; and the Ant tasks for building AspectJ programs. @@ -320,10 +318,9 @@ see the Examples section in the Programming Guide. View and navigate the crosscutting structure using - AJDT; if you can't use Eclipse, try - the ajbrowser structure viewer, as described in - the AspectJ Browser section of - the Development Environment Guide. + AJDT (AspectJ Development Tools) + in Eclipse IDE. IntelliJ IDEA also offers AspectJ and Spring AOP + support.

      To start using AspectJ with your own code, modify the example aspects to apply to your classes. diff --git a/docs/faq/faq.xml b/docs/faq/faq.xml index e616aae11..2db3b008d 100644 --- a/docs/faq/faq.xml +++ b/docs/faq/faq.xml @@ -54,7 +54,6 @@ a compiler (ajc), a debugger (ajdb), a documentation generator (ajdoc), - a program structure browser (ajbrowser), and integration with Eclipse, Sun-ONE/Netbeans, GNU Emacs/XEmacs, JBuilder, and Ant. @@ -2021,16 +2020,7 @@ ajc -bootclasspath c:\jdk1.2\jre\lib\rt.jar \ modularizing crosscutting concerns while still having immediate access to what aspects affect a class. - For example, the - - Development Environment Guide - - ajbrowser section. - shows that you can list or navigate - between method and advice affecting that method and between a type - and declarations in an aspect on that type. (The IDE support may - have more features than ajbrowser, depending - on the IDE. + See for more information on which Java development environments are supported.) @@ -4543,15 +4533,11 @@ java -javaagent:aspectjweaver.jar -classpath "aspects.jar:${CLASSPATH}" .. weaver, asm, org.eclipse.jdt.core, org.aspectj.ajdt.core, and runtime. - For ajbrowser: the compiler modules, plus - ajbrowser, ajdoc, taskdefs, and ajde. - For the AspectJ distribution, the ajbrowser modules, plus aspectj5rt and org.aspectj.lib. For the test harness (or to run the release build - scripts and tests): the ajbrowser modules, plus - testing, testing-client, and testing-drivers. + scripts and tests): testing, testing-client, and testing-drivers. To run the test suite: the test harness modules, plus tests. @@ -5047,16 +5033,6 @@ cd build ). - Bug reports on ajbrowser should have version - information for both Java and AspectJ, and - (most importantly) clear steps for reproducing the bug. - You may submit ajbrowser bugs against the IDE component of AspectJ - via the web form - - http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ - . - - One of the benefits of open-source is that you can find and fix the bug for yourself; when you submit the fix back to us, we can validate the fix for you diff --git a/pom.xml b/pom.xml index 97db6ca54..07777058c 100644 --- a/pom.xml +++ b/pom.xml @@ -127,7 +127,6 @@ org.aspectj.matcher asm testing-client - ajbrowser runtime bcel-builder weaver diff --git a/run-all-junit-tests/src/test/java/RunTheseBeforeYouCommitTests.java b/run-all-junit-tests/src/test/java/RunTheseBeforeYouCommitTests.java index a696b71ba..6d77b170f 100644 --- a/run-all-junit-tests/src/test/java/RunTheseBeforeYouCommitTests.java +++ b/run-all-junit-tests/src/test/java/RunTheseBeforeYouCommitTests.java @@ -50,7 +50,6 @@ public class RunTheseBeforeYouCommitTests { suite.addTest(WeaverModuleTests.suite()); suite.addTest(TaskdefsModuleTests.suite()); suite.addTest(MatcherModuleTests.suite()); -// suite.addTest(AjbrowserModuleTests.suite()); // There are none so far... // suite.addTest(LibModuleTests.suite()); // anyone using this? suite.addTest(AjdtCoreModuleTests.suite()); diff --git a/tests/product/ant-example.xml b/tests/product/ant-example.xml index 1dda5c944..4f0160cd6 100644 --- a/tests/product/ant-example.xml +++ b/tests/product/ant-example.xml @@ -33,7 +33,7 @@ - + @@ -90,14 +90,14 @@ - @@ -107,7 +107,7 @@ - @@ -121,9 +121,9 @@ - @@ -132,7 +132,7 @@ - @@ -142,11 +142,11 @@ verbose="yes" sourcepath="${product.examples.dir}" destdir="${exdir}/docs" - argfile="${list}" + argfile="${list}" classpath="${product.rt.jar}${PS}${jdk.tools.jar}" failonerror="false" > - @@ -200,12 +200,6 @@ - - - - - - @@ -289,7 +283,7 @@ - - &aspectj_initProduct; + &aspectj_initProduct; - + - - @@ -138,11 +138,11 @@ - + - - - - - - - - - - + + - - + - - @@ -252,9 +252,6 @@ - - - @@ -290,4 +287,3 @@ - -- 2.39.5