mirror of https://github.com/apache/openjpa.git
Remove Java2HTML dependency. Use FishEye directly for Source code browsing
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@946850 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e8b0679ed1
commit
e835d87c06
|
@ -74,15 +74,6 @@
|
||||||
</fileset>
|
</fileset>
|
||||||
</path>
|
</path>
|
||||||
|
|
||||||
<path id="java2html.classpath"
|
|
||||||
description="Classpath for generating HTML version of source code using Java2HTML library">
|
|
||||||
<pathelement location="${rsrc.dir}" />
|
|
||||||
<fileset dir="${java2html.lib}">
|
|
||||||
<include name="*.jar" />
|
|
||||||
</fileset>
|
|
||||||
</path>
|
|
||||||
|
|
||||||
|
|
||||||
<fileset id="canonical.metamodel" dir="${src.dir}"
|
<fileset id="canonical.metamodel" dir="${src.dir}"
|
||||||
description="Set of *.java files generated for static, cannonical domain model">
|
description="Set of *.java files generated for static, cannonical domain model">
|
||||||
<include name="**/*_.java"/>
|
<include name="**/*_.java"/>
|
||||||
|
@ -113,11 +104,6 @@
|
||||||
The directory for OpenJPA libraries can not be located at ${openjpa.lib}.
|
The directory for OpenJPA libraries can not be located at ${openjpa.lib}.
|
||||||
Make sure openjpa.lib property value is correct in build.properties file.
|
Make sure openjpa.lib property value is correct in build.properties file.
|
||||||
</fail>
|
</fail>
|
||||||
<available file="${java2html.lib}" property="java2html.exists"/>
|
|
||||||
<fail unless="java2html.exists">*** Error:
|
|
||||||
The directory for Java2HTML libraries can not be located at ${java2html.lib}.
|
|
||||||
Make sure java2html.lib property value is correct in build.properties file.
|
|
||||||
</fail>
|
|
||||||
<condition property="build.mode.is.valid">
|
<condition property="build.mode.is.valid">
|
||||||
<or>
|
<or>
|
||||||
<equals arg1="${build.mode}" arg2="jse" casesensitive="false" trim="true"/>
|
<equals arg1="${build.mode}" arg2="jse" casesensitive="false" trim="true"/>
|
||||||
|
@ -171,8 +157,7 @@
|
||||||
clean,
|
clean,
|
||||||
generate-canonical-model,
|
generate-canonical-model,
|
||||||
compile,
|
compile,
|
||||||
enhance,
|
enhance">
|
||||||
generate-html-source">
|
|
||||||
<subant antfile="build.${build.mode}.xml"
|
<subant antfile="build.${build.mode}.xml"
|
||||||
target="package"
|
target="package"
|
||||||
inheritrefs="true"
|
inheritrefs="true"
|
||||||
|
@ -180,29 +165,4 @@
|
||||||
buildpath="${basedir}"/>
|
buildpath="${basedir}"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="generate-html-source" if="java2html.exists"
|
|
||||||
description="Generates HTML Source Code using Java2HTML utility">
|
|
||||||
<delete dir="${generated.html.dir}" failonerror="false"/>
|
|
||||||
<mkdir dir="${generated.html.dir}"/>
|
|
||||||
<java classname="de.java2html.Java2Html" fork="true">
|
|
||||||
<classpath refid="java2html.classpath"/>
|
|
||||||
<arg value="-srcdir"/>
|
|
||||||
<arg value="${src.dir}"/>
|
|
||||||
<arg value="-targetdir"/>
|
|
||||||
<arg value="${generated.html.dir}"/>
|
|
||||||
<arg value="-style"/>
|
|
||||||
<arg value="Eclipse"/>
|
|
||||||
</java>
|
|
||||||
<java classname="de.java2html.Java2Html" fork="true">
|
|
||||||
<classpath refid="java2html.classpath"/>
|
|
||||||
<arg value="-srcdir"/>
|
|
||||||
<arg value="${generated.src.dir}"/>
|
|
||||||
<arg value="-targetdir"/>
|
|
||||||
<arg value="${generated.html.dir}"/>
|
|
||||||
<arg value="-style"/>
|
|
||||||
<arg value="Eclipse"/>
|
|
||||||
</java>
|
|
||||||
<replace dir="${generated.html.dir}" token="10pt" value="14pt">
|
|
||||||
</replace>
|
|
||||||
</target>
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -131,9 +131,6 @@ font-size:16px;
|
||||||
<br>
|
<br>
|
||||||
In JEE mode, OpenJPA library and JDBC drivers are configured in JEE server and hence variables in
|
In JEE mode, OpenJPA library and JDBC drivers are configured in JEE server and hence variables in
|
||||||
this file are irrelevant.
|
this file are irrelevant.
|
||||||
<LI>Edit <A HREF="load.properties"><code>load.properties</code></A> to specify load parameters such as number of
|
|
||||||
Books etc. OpenBooks uses this data to populate a database with some sample data.
|
|
||||||
This example file has some typical values. If you are satisfied with it, you can leave them as it is.
|
|
||||||
</OL>
|
</OL>
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,11 +156,9 @@ font-size:16px;
|
||||||
<h2><A name="Run">Run OpenBooks</A></h2>
|
<h2><A name="Run">Run OpenBooks</A></h2>
|
||||||
If you have built OpenBooks for JSE, then go to the <code>target/openbooks</code> directory.
|
If you have built OpenBooks for JSE, then go to the <code>target/openbooks</code> directory.
|
||||||
<br>
|
<br>
|
||||||
Invoke the Ant script to populate the database.<br>
|
Invoke the Ant script to run OpenBooks<br>
|
||||||
<code>$ ant -f run.xml load</code>
|
<code>$ ant -f run.xml</code>
|
||||||
<br>
|
|
||||||
Then invoke the Ant script to run OpenBooks<br>
|
|
||||||
<code>$ ant -f run.xml run</code>
|
|
||||||
<hr>
|
<hr>
|
||||||
If you have build OpenBooks for JEE, a Web Application Archive <code>openbooks.war</code> will be
|
If you have build OpenBooks for JEE, a Web Application Archive <code>openbooks.war</code> will be
|
||||||
created in <code>target/openbooks</code> directory. You need to deploy <code>openbooks.war</code>
|
created in <code>target/openbooks</code> directory. You need to deploy <code>openbooks.war</code>
|
||||||
|
@ -172,5 +167,17 @@ font-size:16px;
|
||||||
<code>http://<app server host>:<port>/openbooks/</code>
|
<code>http://<app server host>:<port>/openbooks/</code>
|
||||||
<br>
|
<br>
|
||||||
to access OpenBooks as an web application.
|
to access OpenBooks as an web application.
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h2><A name="Seed">Populate OpenBooks Database</A></h2>
|
||||||
|
OpenBooks checks for existing data at first connection to the database.
|
||||||
|
If the database is empty, the schema is defined and populated with initial data.
|
||||||
|
However, you can explicitly populate the database in JSE build.
|
||||||
|
Edit <A HREF="load.properties"><code>load.properties</code></A>
|
||||||
|
to specify load parameters such as number of Books etc. OpenBooks uses this data to populate a database
|
||||||
|
with some sample data. This example file has some typical values. If you are satisfied with it,
|
||||||
|
you can leave them as it is. Then invoke the Ant script<br>
|
||||||
|
<code>$ ant -f run.xml load</code>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<!-- Ant script for running OpenBooks -->
|
<!-- Ant script for running OpenBooks -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- ====================================================================== -->
|
<!-- ====================================================================== -->
|
||||||
<project name="OpenBooks" default="info">
|
<project name="OpenBooks" default="run">
|
||||||
<property file="run.properties"/>
|
<property file="run.properties"/>
|
||||||
<property name="jpa.provider" value="openjpa" />
|
<property name="jpa.provider" value="openjpa" />
|
||||||
<property name="load.properties" value="load.properties" />
|
<property name="load.properties" value="load.properties" />
|
||||||
|
@ -63,13 +63,5 @@
|
||||||
<classpath refid="run.classpath" />
|
<classpath refid="run.classpath" />
|
||||||
</java>
|
</java>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="info" depends="check-env">
|
|
||||||
<echo>
|
|
||||||
Runs OpenBooks demo application.
|
|
||||||
See index.html for instructions.
|
|
||||||
</echo>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|
|
@ -15,32 +15,25 @@ package jpa.tools.swing;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.Font;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLDecoder;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import javax.swing.Box;
|
import javax.swing.Box;
|
||||||
import javax.swing.DefaultComboBoxModel;
|
import javax.swing.DefaultComboBoxModel;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JEditorPane;
|
import javax.swing.JEditorPane;
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.text.html.HTMLDocument;
|
|
||||||
import javax.swing.text.html.HTMLEditorKit;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A viewer for source code.
|
* A viewer for source code.
|
||||||
* The input to this viewer is a set of *.html file names which may or may not have anchors.
|
* The input to this viewer is a root URL and set of anchors.
|
||||||
|
* The viewer shows the anchors in a combo-box and displays the
|
||||||
|
* corresponding HTML in the main editor.
|
||||||
*
|
*
|
||||||
* @author Pinaki Poddar
|
* @author Pinaki Poddar
|
||||||
*
|
*
|
||||||
|
@ -49,32 +42,28 @@ import javax.swing.text.html.HTMLEditorKit;
|
||||||
public class SourceCodeViewer extends JPanel implements ActionListener {
|
public class SourceCodeViewer extends JPanel implements ActionListener {
|
||||||
private final JEditorPane _editor;
|
private final JEditorPane _editor;
|
||||||
private final JComboBox _bookmarks;
|
private final JComboBox _bookmarks;
|
||||||
private Map<String, File> _files = new TreeMap<String, File>();
|
private Map<String, String> _anchors;
|
||||||
|
private String _root;
|
||||||
|
|
||||||
public SourceCodeViewer(String dir) {
|
/**
|
||||||
|
* Create a Source Code Viewer for a set of anchors.
|
||||||
|
* @param root the root url
|
||||||
|
* @param anchors the key is a visible text and value is the URL
|
||||||
|
* relative to the root.
|
||||||
|
*/
|
||||||
|
public SourceCodeViewer(String root, Map<String,String> anchors) {
|
||||||
super(true);
|
super(true);
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
_anchors = anchors;
|
||||||
|
_root = root;
|
||||||
_editor = new JEditorPane();
|
_editor = new JEditorPane();
|
||||||
_editor.setEditorKit(new HTMLEditorKit());
|
_editor.setContentType("text/html");
|
||||||
|
_editor.setFont(new Font("Courier New", Font.PLAIN, 16));
|
||||||
_editor.setEditable(false);
|
_editor.setEditable(false);
|
||||||
|
|
||||||
File root = getFile(dir);
|
|
||||||
if (root != null) {
|
|
||||||
List<File> files = new FileScanner("html", true).scan(root);
|
|
||||||
for (File f : files) {
|
|
||||||
String fileName = f.getAbsolutePath();
|
|
||||||
String key = fileName.substring(
|
|
||||||
root.getAbsolutePath().length()+1,
|
|
||||||
fileName.length()- "html".length()-1)
|
|
||||||
.replace(File.separatorChar,'.');
|
|
||||||
_files.put(key, f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||||
for (String key : _files.keySet()) {
|
for (String key : anchors.keySet()) {
|
||||||
model.addElement(key);
|
model.addElement(key);
|
||||||
}
|
}
|
||||||
_bookmarks = new JComboBox(model);
|
_bookmarks = new JComboBox(model);
|
||||||
|
@ -86,73 +75,26 @@ public class SourceCodeViewer extends JPanel implements ActionListener {
|
||||||
add(new JScrollPane(_editor), BorderLayout.CENTER);
|
add(new JScrollPane(_editor), BorderLayout.CENTER);
|
||||||
JPanel topPanel = new JPanel();
|
JPanel topPanel = new JPanel();
|
||||||
((FlowLayout)topPanel.getLayout()).setAlignment(FlowLayout.LEADING);
|
((FlowLayout)topPanel.getLayout()).setAlignment(FlowLayout.LEADING);
|
||||||
topPanel.add(new JLabel("Select File "));
|
topPanel.add(new JLabel("Go to "));
|
||||||
topPanel.add(_bookmarks);
|
topPanel.add(_bookmarks);
|
||||||
topPanel.add(Box.createHorizontalGlue());
|
topPanel.add(Box.createHorizontalGlue());
|
||||||
add(topPanel, BorderLayout.NORTH);
|
add(topPanel, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
if (_anchors != null && !_anchors.isEmpty())
|
||||||
|
showPage(_anchors.keySet().iterator().next());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
String name = (String)_bookmarks.getSelectedItem();
|
String anchor = (String)_bookmarks.getSelectedItem();
|
||||||
|
showPage(anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showPage(String anchor) {
|
||||||
try {
|
try {
|
||||||
HTMLDocument doc = new HTMLDocument();
|
_editor.setPage(_root + _anchors.get(anchor));
|
||||||
_editor.read(new FileInputStream(_files.get(name)), doc);
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check the given string for a matching file. The string is first
|
|
||||||
* tested to see if it is an existing file path. If it does not
|
|
||||||
* represent an existing file, it is checked as a resource name of a
|
|
||||||
* file.
|
|
||||||
* @param name the file path or resource name
|
|
||||||
*/
|
|
||||||
private File getFile(String name) {
|
|
||||||
if (name == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
File file = new File(name);
|
|
||||||
if (file.exists())
|
|
||||||
return file;
|
|
||||||
|
|
||||||
URL url = Thread.currentThread().getContextClassLoader().getResource(name);
|
|
||||||
if (url == null) {
|
|
||||||
url = getClass().getClassLoader().getResource(name);
|
|
||||||
}
|
|
||||||
if (url != null) {
|
|
||||||
String urlFile = url.getFile();
|
|
||||||
if (urlFile != null) {
|
|
||||||
File rsrc = new File(URLDecoder.decode(urlFile));
|
|
||||||
if (rsrc.exists())
|
|
||||||
return rsrc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
InputStream getResource(String resource) {
|
|
||||||
InputStream stream = getClass().getResourceAsStream(resource);
|
|
||||||
if (stream == null) {
|
|
||||||
stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
|
|
||||||
}
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
|
||||||
SourceCodeViewer viewer = new SourceCodeViewer(args.length == 0 ? "source" : args[0]);
|
|
||||||
JFrame frame = new JFrame("Source Code Viewer");
|
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
frame.getContentPane().add(viewer);
|
|
||||||
frame.pack();
|
|
||||||
frame.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,14 @@ import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
|
@ -35,6 +38,7 @@ import javax.swing.Icon;
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JEditorPane;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
|
@ -47,6 +51,7 @@ import javax.swing.SwingUtilities;
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
import javax.swing.event.TreeSelectionEvent;
|
import javax.swing.event.TreeSelectionEvent;
|
||||||
import javax.swing.event.TreeSelectionListener;
|
import javax.swing.event.TreeSelectionListener;
|
||||||
|
import javax.swing.text.html.HTMLEditorKit;
|
||||||
import javax.swing.tree.DefaultMutableTreeNode;
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||||
|
|
||||||
|
@ -61,7 +66,12 @@ import jpa.tools.swing.ScrollingTextPane;
|
||||||
import jpa.tools.swing.SourceCodeViewer;
|
import jpa.tools.swing.SourceCodeViewer;
|
||||||
import jpa.tools.swing.StatusBar;
|
import jpa.tools.swing.StatusBar;
|
||||||
import jpa.tools.swing.SwingHelper;
|
import jpa.tools.swing.SwingHelper;
|
||||||
|
import openbook.domain.Author;
|
||||||
|
import openbook.domain.Book;
|
||||||
import openbook.domain.Customer;
|
import openbook.domain.Customer;
|
||||||
|
import openbook.domain.Inventory;
|
||||||
|
import openbook.domain.LineItem;
|
||||||
|
import openbook.domain.PurchaseOrder;
|
||||||
import openbook.server.OpenBookService;
|
import openbook.server.OpenBookService;
|
||||||
import openbook.server.ServiceFactory;
|
import openbook.server.ServiceFactory;
|
||||||
import openbook.util.PropertyHelper;
|
import openbook.util.PropertyHelper;
|
||||||
|
@ -414,7 +424,9 @@ public class Demo extends JFrame implements Thread.UncaughtExceptionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewSourceAction extends OpenBookAction {
|
public class ViewSourceAction extends OpenBookAction {
|
||||||
SourceCodeViewer _sourceViewer;
|
private SourceCodeViewer _sourceViewer;
|
||||||
|
private static final String SRC_ROOT = "http://fisheye6.atlassian.com/browse/~raw,r=HEAD/openjpa/" +
|
||||||
|
"trunk/openjpa-examples/openbooks/src/main/java/";
|
||||||
|
|
||||||
public ViewSourceAction(String name, String iconLocation, String tooltip) {
|
public ViewSourceAction(String name, String iconLocation, String tooltip) {
|
||||||
super(name, iconLocation, tooltip);
|
super(name, iconLocation, tooltip);
|
||||||
|
@ -422,11 +434,34 @@ public class Demo extends JFrame implements Thread.UncaughtExceptionHandler {
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
if (_sourceViewer == null) {
|
if (_sourceViewer == null) {
|
||||||
_sourceViewer = new SourceCodeViewer("source");
|
String root = PropertyHelper.getString(_config, "openbook.source.url", SRC_ROOT);
|
||||||
|
_sourceViewer = new SourceCodeViewer(root, getAnchors());
|
||||||
}
|
}
|
||||||
showTab(_tabbedPane, "Source Code", _sourceViewer);
|
showTab(_tabbedPane, "Source Code", _sourceViewer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, String> getAnchors() {
|
||||||
|
Map<String,String> anchors = new TreeMap<String, String>();
|
||||||
|
anchors.put("domain.Book", toJavaFilePath(Book.class));
|
||||||
|
anchors.put("domain.Author", toJavaFilePath(Author.class));
|
||||||
|
anchors.put("domain.Customer", toJavaFilePath(Customer.class));
|
||||||
|
anchors.put("domain.Inventory", toJavaFilePath(Inventory.class));
|
||||||
|
anchors.put("domain.PurchaseOrder", toJavaFilePath(PurchaseOrder.class));
|
||||||
|
anchors.put("domain.LineItem", toJavaFilePath(LineItem.class));
|
||||||
|
|
||||||
|
anchors.put("OpenBooks Service", toJavaFilePath(OpenBookService.class));
|
||||||
|
anchors.put("Generic Persistence Service", "openbook/server/PersistenceService.java");
|
||||||
|
anchors.put("OpenBooks Service Implementation", "openbook/server/OpenBookServiceImpl.java");
|
||||||
|
|
||||||
|
anchors.put("clinet.Buy Book", toJavaFilePath(BuyBookPage.class));
|
||||||
|
|
||||||
|
return anchors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toJavaFilePath(Class<?> cls) {
|
||||||
|
return cls.getName().replace('.', '/') + ".java";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue