Updating after Retouch infrastructure merge. BLD200611011900
authorjskrivanek@netbeans.org
Wed, 01 Nov 2006 11:38:15 +0000
changeset 76416e7bf0cb8c64
parent 7640 b0a12eaef5c8
child 7642 dc598476f84b
Updating after Retouch infrastructure merge.
jemmysupport/nbproject/project.properties
jemmysupport/nbproject/project.xml
jemmysupport/src/org/netbeans/modules/jemmysupport/Utils.java
jemmysupport/src/org/netbeans/modules/jemmysupport/generator/DataFolderFilterNode.java
jemmysupport/src/org/netbeans/modules/jemmysupport/runinternally/RunInternallyAction.java
     1.1 --- a/jemmysupport/nbproject/project.properties	Wed Nov 01 10:29:46 2006 +0000
     1.2 +++ b/jemmysupport/nbproject/project.properties	Wed Nov 01 11:38:15 2006 +0000
     1.3 @@ -15,7 +15,8 @@
     1.4  # Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
     1.5  # Microsystems, Inc. All Rights Reserved.
     1.6  
     1.7 -spec.version.base=1.33.0
     1.8 +javac.source=1.5
     1.9 +spec.version.base=1.34.0
    1.10  cp.extra=../jemmy/dist/jemmy.jar
    1.11  antsrc.cp=\
    1.12      ${ant.home}/lib/ant.jar:\
     2.1 --- a/jemmysupport/nbproject/project.xml	Wed Nov 01 10:29:46 2006 +0000
     2.2 +++ b/jemmysupport/nbproject/project.xml	Wed Nov 01 11:38:15 2006 +0000
     2.3 @@ -24,15 +24,6 @@
     2.4              <code-name-base>org.netbeans.modules.jemmysupport</code-name-base>
     2.5              <module-dependencies>
     2.6                  <dependency>
     2.7 -                    <code-name-base>javax.jmi.reflect</code-name-base>
     2.8 -                    <build-prerequisite/>
     2.9 -                    <compile-dependency/>
    2.10 -                    <run-dependency>
    2.11 -                        <release-version>1</release-version>
    2.12 -                        <specification-version>1.6</specification-version>
    2.13 -                    </run-dependency>
    2.14 -                </dependency>
    2.15 -                <dependency>
    2.16                      <code-name-base>org.apache.tools.ant.module</code-name-base>
    2.17                      <build-prerequisite/>
    2.18                      <compile-dependency/>
    2.19 @@ -49,20 +40,11 @@
    2.20                      </run-dependency>
    2.21                  </dependency>
    2.22                  <dependency>
    2.23 -                    <code-name-base>org.netbeans.api.mdr</code-name-base>
    2.24 +                    <code-name-base>org.netbeans.libs.javacapi</code-name-base>
    2.25                      <build-prerequisite/>
    2.26                      <compile-dependency/>
    2.27                      <run-dependency>
    2.28 -                        <release-version>1</release-version>
    2.29 -                        <specification-version>1.3</specification-version>
    2.30 -                    </run-dependency>
    2.31 -                </dependency>
    2.32 -                <dependency>
    2.33 -                    <code-name-base>org.netbeans.jmi.javamodel</code-name-base>
    2.34 -                    <build-prerequisite/>
    2.35 -                    <compile-dependency/>
    2.36 -                    <run-dependency>
    2.37 -                        <release-version>2</release-version>
    2.38 +                        <specification-version>0.5</specification-version>
    2.39                      </run-dependency>
    2.40                  </dependency>
    2.41                  <dependency>
    2.42 @@ -82,11 +64,11 @@
    2.43                      </run-dependency>
    2.44                  </dependency>
    2.45                  <dependency>
    2.46 -                    <code-name-base>org.netbeans.modules.javacore</code-name-base>
    2.47 +                    <code-name-base>org.netbeans.modules.java.source</code-name-base>
    2.48                      <build-prerequisite/>
    2.49                      <compile-dependency/>
    2.50                      <run-dependency>
    2.51 -                        <release-version>1</release-version>
    2.52 +                        <specification-version>0.1</specification-version>
    2.53                      </run-dependency>
    2.54                  </dependency>
    2.55                  <dependency>
     3.1 --- a/jemmysupport/src/org/netbeans/modules/jemmysupport/Utils.java	Wed Nov 01 10:29:46 2006 +0000
     3.2 +++ b/jemmysupport/src/org/netbeans/modules/jemmysupport/Utils.java	Wed Nov 01 11:38:15 2006 +0000
     3.3 @@ -19,13 +19,32 @@
     3.4  
     3.5  package org.netbeans.modules.jemmysupport;
     3.6  
     3.7 +import com.sun.source.tree.ClassTree;
     3.8 +import com.sun.source.util.TreePathScanner;
     3.9 +import java.io.IOException;
    3.10  import java.net.URL;
    3.11  import java.net.URLClassLoader;
    3.12  import java.security.AllPermission;
    3.13  import java.security.CodeSource;
    3.14  import java.security.PermissionCollection;
    3.15  import java.security.Permissions;
    3.16 +import java.util.List;
    3.17 +import java.util.Set;
    3.18 +import java.util.logging.Level;
    3.19 +import java.util.logging.Logger;
    3.20 +import javax.lang.model.element.Element;
    3.21 +import javax.lang.model.element.ExecutableElement;
    3.22 +import javax.lang.model.element.Modifier;
    3.23 +import javax.lang.model.element.TypeElement;
    3.24 +import javax.lang.model.type.TypeKind;
    3.25 +import javax.lang.model.util.ElementFilter;
    3.26 +import org.netbeans.api.java.source.CancellableTask;
    3.27 +import org.netbeans.api.java.source.CompilationController;
    3.28 +import org.netbeans.api.java.source.CompilationInfo;
    3.29 +import org.netbeans.api.java.source.JavaSource;
    3.30 +import org.netbeans.api.java.source.JavaSource.Phase;
    3.31  import org.openide.ErrorManager;
    3.32 +import org.openide.filesystems.FileObject;
    3.33  
    3.34  /**
    3.35   * Utilities methods.
    3.36 @@ -85,4 +104,93 @@
    3.37              return super.getPackages();
    3.38          }
    3.39      }
    3.40 +
    3.41 +    /** Returns fully qualified class name if given file object is a java source
    3.42 +     * and it contains main method.
    3.43 +     * @param fo file object
    3.44 +     * @return fully qualified class name if file object has main method, null otherwise
    3.45 +     */
    3.46 +    public static String hasMainMethod(FileObject fo) {
    3.47 +        // Later revise in org.netbeans.modules.java.j2seproject.J2SEProjectUtil.hasMainMethod()
    3.48 +        JavaSource js = JavaSource.forFileObject(fo);
    3.49 +        if(js == null) {
    3.50 +            // not a java source
    3.51 +            return null;
    3.52 +        }
    3.53 +        MemberVisitor.hasMainMethod = false;
    3.54 +        try {
    3.55 +            js.runUserActionTask(new CancellableTask<CompilationController>() {
    3.56 +                public void cancel() {}
    3.57 +                public void run(CompilationController parameter) throws IOException {
    3.58 +                    parameter.toPhase(Phase.ELEMENTS_RESOLVED);
    3.59 +                    new MemberVisitor(parameter).scan(parameter.getCompilationUnit(), null);
    3.60 +                }
    3.61 +            }, true);
    3.62 +        } catch (IOException e) {
    3.63 +            Logger.getLogger("").log(Level.SEVERE, e.getMessage(), e);
    3.64 +        }
    3.65 +        if(MemberVisitor.hasMainMethod) {
    3.66 +            return MemberVisitor.qualifiedName;
    3.67 +        } else {
    3.68 +            return null;
    3.69 +        }
    3.70 +    }
    3.71 +    
    3.72 +    private static class MemberVisitor extends TreePathScanner<Void, Void> {
    3.73 +        
    3.74 +        public static boolean hasMainMethod = false;
    3.75 +        public static String qualifiedName = null;
    3.76 +        private CompilationInfo info;
    3.77 +        
    3.78 +        public MemberVisitor(CompilationInfo info) {
    3.79 +            this.info = info;
    3.80 +        }
    3.81 +        
    3.82 +        @Override
    3.83 +        public Void visitClass(ClassTree t, Void v) {
    3.84 +            hasMainMethod = false;
    3.85 +            Element el = info.getTrees().getElement(getCurrentPath());
    3.86 +            if (el != null) {
    3.87 +                TypeElement te = (TypeElement) el;
    3.88 +                qualifiedName = te.getQualifiedName().toString();
    3.89 +                List<ExecutableElement> methods = ElementFilter.methodsIn(te.getEnclosedElements());
    3.90 +                for (int i = 0; i < methods.size(); i++) {
    3.91 +                    ExecutableElement method = methods.get(i);
    3.92 +                    hasMainMethod = isMainMethod(method);
    3.93 +                    if(hasMainMethod) {
    3.94 +                        // find it -> return
    3.95 +                        return null;
    3.96 +                    }
    3.97 +                }
    3.98 +            }
    3.99 +            return null;
   3.100 +        }
   3.101 +        
   3.102 +        private static boolean isMainMethod(ExecutableElement method) {
   3.103 +            // name should be "main"
   3.104 +            if(!"main".equals(method.getSimpleName().toString())) { //NOI18N
   3.105 +                return false;
   3.106 +            }
   3.107 +            // return type should be void
   3.108 +            if(!method.getReturnType().getKind().equals(TypeKind.VOID)) {
   3.109 +                return false;
   3.110 +            }
   3.111 +            // check String[] parameter
   3.112 +            /* it seems not to work now.
   3.113 +            List<? extends TypeParameterElement> paramTypes = method.getTypeParameters();
   3.114 +            for (int j = 0; j < paramTypes.size(); j++) {
   3.115 +                Object object = paramTypes.get(j);
   3.116 +            }
   3.117 +             */
   3.118 +            // modifiers should be public static
   3.119 +            Set<Modifier> modifiers = method.getModifiers();
   3.120 +            if(!modifiers.contains(Modifier.PUBLIC)) {
   3.121 +                return false;
   3.122 +            }
   3.123 +            if(!modifiers.contains(Modifier.STATIC)) {
   3.124 +                return false;
   3.125 +            }
   3.126 +            return modifiers.size() == 2;
   3.127 +        }
   3.128 +    }
   3.129  }
     4.1 --- a/jemmysupport/src/org/netbeans/modules/jemmysupport/generator/DataFolderFilterNode.java	Wed Nov 01 10:29:46 2006 +0000
     4.2 +++ b/jemmysupport/src/org/netbeans/modules/jemmysupport/generator/DataFolderFilterNode.java	Wed Nov 01 11:38:15 2006 +0000
     4.3 @@ -20,7 +20,6 @@
     4.4  package org.netbeans.modules.jemmysupport.generator;
     4.5  
     4.6  import org.openide.loaders.DataObject;
     4.7 -import org.openide.loaders.DataFolder;
     4.8  import org.openide.nodes.FilterNode;
     4.9  import org.openide.nodes.Node;
    4.10  
    4.11 @@ -42,8 +41,7 @@
    4.12              super(node);
    4.13          }
    4.14          
    4.15 -        protected Node[] createNodes(Object key) {
    4.16 -            Node node = (Node)key;
    4.17 +        protected Node[] createNodes(Node node) {
    4.18              // without filtering
    4.19              // return new Node[] { copyNode(n) };
    4.20    
     5.1 --- a/jemmysupport/src/org/netbeans/modules/jemmysupport/runinternally/RunInternallyAction.java	Wed Nov 01 10:29:46 2006 +0000
     5.2 +++ b/jemmysupport/src/org/netbeans/modules/jemmysupport/runinternally/RunInternallyAction.java	Wed Nov 01 11:38:15 2006 +0000
     5.3 @@ -40,10 +40,8 @@
     5.4  import org.netbeans.api.project.Project;
     5.5  import org.netbeans.api.project.ProjectUtils;
     5.6  import org.netbeans.api.queries.FileBuiltQuery;
     5.7 -import org.netbeans.jmi.javamodel.JavaClass;
     5.8 -import org.netbeans.jmi.javamodel.Resource;
     5.9  import org.netbeans.modules.apisupport.project.NbModuleProject;
    5.10 -import org.netbeans.modules.javacore.api.JavaModel;
    5.11 +import org.netbeans.modules.jemmysupport.Utils;
    5.12  import org.netbeans.spi.project.ActionProvider;
    5.13  import org.openide.ErrorManager;
    5.14  import org.openide.awt.StatusDisplayer;
    5.15 @@ -225,22 +223,7 @@
    5.16          if(dObj == null) {
    5.17              return null;
    5.18          }
    5.19 -        FileObject fObj = dObj.getPrimaryFile();
    5.20 -        // following code taken from org.netbeans.modules.java.j2seproject.J2SEProjectUtil.hasMainMethod()
    5.21 -        JavaModel.getJavaRepository().beginTrans(false);
    5.22 -        try {
    5.23 -            JavaModel.setClassPath(fObj);
    5.24 -            Resource res = JavaModel.getResource(fObj);
    5.25 -            if(res == null) {
    5.26 -                return null;
    5.27 -            }
    5.28 -            if(!res.getMain().isEmpty()) {
    5.29 -                return ((JavaClass)res.getMain().get(0)).getName();
    5.30 -            }
    5.31 -        } finally {
    5.32 -            JavaModel.getJavaRepository().endTrans();
    5.33 -        }
    5.34 -        return null;
    5.35 +        return Utils.hasMainMethod(dObj.getPrimaryFile());
    5.36      }
    5.37      
    5.38      private Object compileLock = new Object();