[robsite.org]

« Using local Javadoc in JDeveloper 10.1.3 | Main | JSF Converter for MT Comments. »

November 01, 2005

JDeveloper's Java Model outside of JDeveloper

One of the changes that we have made to JDeveloper in the 10.1.3 release is to support using the Java Model (formerly called JOT) from outside of JDeveloper. In my example, we programmatically set the source and class path for our model to use. I'm working on an extended sample that uses the Project model to obtain this information.

Here's a simple example which just lists the methods from a class.

package org.jdeveloper.sample.javaparser;

import java.io.File;
import java.io.PrintStream;

import java.util.Collection;
import java.util.Iterator;

import oracle.ide.net.URLFactory;
import oracle.ide.net.URLPath;

import oracle.javatools.parser.java.v2.JavaProvider;
import oracle.javatools.parser.java.v2.model.JavaClass;
import oracle.javatools.parser.java.v2.model.JavaMethod;
import oracle.javatools.parser.java.v2.model.JavaType;
import oracle.javatools.parser.java.v2.model.JavaVariable;

import oracle.jdeveloper.java.provider.PathFileProvider;


public class StandaloneJDeveloperParser {
    JavaProvider provider;

    public StandaloneJDeveloperParser() {
        try {
            final URLPath classPath = new URLPath();
            final String javaHome = System.getProperty("java.home");
            classPath.add(URLFactory.newJarURL(new File(javaHome + "\\lib\\rt.jar"), null));
            classPath.add(URLFactory.newJarURL(new File("C:\\jdev\\jdevstudio1013_3528\\ide\\lib\\ide.jar"), null));
            provider = new PathFileProvider(null, classPath);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit( 1 );
            provider = null;
        }
    }

    private void displayMethodList(String className, PrintStream out) {
        if ( provider == null ) throw new IllegalStateException( "provider may not be null");  
        if ( className == null ) throw new IllegalArgumentException( "className may not be null" );
        final JavaClass ideClass = provider.getClass(className);

        out.println("Source of " + className);
        final Collection declaredMethods = ideClass.getDeclaredMethods();
        for (Iterator iter = declaredMethods.iterator(); iter.hasNext(); ) {
            final JavaMethod m = iter.next();
            out.println(getSignature(m));
        }
    }

    private String getSignature(JavaMethod method) {
        if ( method == null ) throw new IllegalArgumentException( "method may not be null" );
        final StringBuilder builder = new StringBuilder(255);
        builder.append(method.getReturnType().getName() + " " + method.getName() + "(");
        final Collection methods = method.getParameters();
        int parameterNumber = 1;
        for (JavaVariable variable : methods) {
            if (parameterNumber > 1) builder.append(", ");
            builder.append(variable.getResolvedType().getName() + " ");
            builder.append(getParameterName(parameterNumber, variable));
            parameterNumber++;
        }
        builder.append(")");
        Collection exceptions = method.getExceptions();
        if (exceptions.size() > 0) {
            builder.append("throws ");
            int exceptionNumber = 1;
            for (JavaType exception : exceptions) {
                if (exceptionNumber > 1) builder.append(", ");
                builder.append(exception.getQualifiedName());
                ++exceptionNumber;
            }
        }
        return builder.toString();
    }

    private String getParameterName(int parameterNumber, JavaVariable variable) {
        return (variable.getName().length() > 0) ? variable.getName() : "param" + parameterNumber;
    }

    public static void main(String[] args) {
        StandaloneJDeveloperParser app = new StandaloneJDeveloperParser();
        app.displayMethodList("oracle.ide.Ide", System.out);
        System.exit(0);
    }


}

Posted by rcleveng at November 1, 2005 01:59 PM

Comments

Post a comment




Remember Me?