river-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Trasuk <tras...@stratuscom.com>
Subject Re: svn commit: r1715098 - in /river/jtsk/branches/2.2: ./ qa/ qa/doc/ src/com/sun/jini/tool/classdepend/ src/manifest/
Date Thu, 19 Nov 2015 09:56:50 GMT
Not latent bugs or concurrency related.  The ActivatableExporter requrires exported interfaces
to be public.  I’m not sure what the justification is, but it’s a runtime test written
into ActivationExporter.  Some of the interfaces that are actually exported in the services
are declared package-private (i.e. “default” access).  That’s why I said that the activation
tests have probably not actually been running successfully for a while.  But if we’re getting
rid of Activation, it doesn’t make much sense to track down all the interfaces and make
them public.

Cheers,

Greg Trasuk



> On Nov 19, 2015, at 1:45 AM, Peter <jini@zeus.net.au> wrote:
> 
> Sounds like you've encountered latent bugs.  I found that too; unrelated code broke.
 if you get time I'd be interested in your results of running the qa refactor test suite against
the 2.2 branch?
> 
> Many concurrency / race condition bugs there was in the test suite.
> 
> Regards,
> 
> Peter.
> 
> 
> Sent from my Samsung device.
>   Include original message
> ---- Original message ----
> From: gtrasuk@apache.org
> Sent: 19/11/2015 04:11:21 pm
> To: commits@river.apache.org
> Subject: svn commit: r1715098 - in /river/jtsk/branches/2.2: ./ qa/ qa/doc/ src/com/sun/jini/tool/classdepend/
src/manifest/
> 
> Author: gtrasuk 
> Date: Thu Nov 19 06:11:20 2015 
> New Revision: 1715098 
> 
> URL: http://svn.apache.org/viewvc?rev=1715098&view=rev 
> Log: 
> River 2.2.x now builds on JDK 1.8.  Thanks to Shawn Ellis, who contributed a patch for
classdep in RIVER-444, which updates classdep to use ASM 5.03. 
> 
> Greg Trasuk modified further to reference ASM5.0.4 which is downloaded using Apache Ivy.

> 
> Apache Ivy was added to download ASM, JUnit and Velocity automatically from Maven Central.

> 
> Animal-sniffer was not actually being used in the 2.2.x branch, so has been removed.

> 
> Note that after this patch, the QA tests will fail on the Activation tests (although
they may have been failing for a while, since this patch didn't actually touch any activation
code).  It is expected that the activation subsystem and associated tests will be removed
shortly. 
> 
> Added: 
>     river/jtsk/branches/2.2/ivy.xml 
> Removed: 
>     river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/AbstractVisitor.java 
> Modified: 
>     river/jtsk/branches/2.2/build.xml 
>     river/jtsk/branches/2.2/common.xml 
>     river/jtsk/branches/2.2/qa/build.xml 
>     river/jtsk/branches/2.2/qa/doc/   (props changed) 
>     river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/AbstractDependencyVisitor.java

>     river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/ReferencedClasses.java

>     river/jtsk/branches/2.2/src/manifest/tools.mf 
> 
> Modified: river/jtsk/branches/2.2/build.xml 
> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/build.xml?rev=1715098&r1=1715097&r2=1715098&view=diff

> ============================================================================== 
> --- river/jtsk/branches/2.2/build.xml (original) 
> +++ river/jtsk/branches/2.2/build.xml Thu Nov 19 06:11:20 2015 
> @@ -27,7 +27,8 @@ 
>  <!-- ##                                                                 --> 
>  <!-- ################################################################## --> 
>  <project name="river" basedir="." default="all.build" 
> -        xmlns:artifact="antlib:org.apache.maven.artifact.ant"> 
> +        xmlns:artifact="antlib:org.apache.maven.artifact.ant" 
> +        xmlns:ivy="antlib:org.apache.ivy.ant"> 
>   
>      <description>Apache River is a project furthering the development 
>          and advancement of Jini technology.</description> 
> @@ -90,20 +91,6 @@ 
>          <exclude name="${doc}/release-notes/new.html"/> 
>      </fileset> 
>   
> -    <fileset id="examples.bin.files" dir="${basedir}/examples"> 
> -        <include name="**/${lib}/**"/> 
> -        <include name="**/config/**"/> 
> -        <exclude name="**/config/META-INF/"/> 
> -        <include name="**/prebuiltkeys/**"/> 
> -        <include name="**/scripts/*.bat"/> 
> -        <include name="**/${doc}/**"/> 
> -        <include name="**/*.html"/> 
> -    </fileset> 
> -     
> -    <fileset id="examples.bin.exec.files" dir="${basedir}/examples"> 
> -        <include name="**/scripts/*.sh"/> 
> -    </fileset> 
> - 
>      <!-- TODO create separate bin distribution for the qa tests? --> 
>      <!--<fileset id="qa.bin.files" dir="${basedir}/qa"> 
>          <include name="${lib}/**"/> 
> @@ -120,15 +107,11 @@ 
>          <delete file="${bin.zip.bundle}"/> 
>          <zip destfile="${bin.zip.bundle}" roundup="yes"> 
>              <zipfileset prefix="${product.name}" refid="river.bin.files" /> 
> -            <zipfileset prefix="${product.name}/examples" refid="examples.bin.files"
/> 
> -            <zipfileset prefix="${product.name}/examples" refid="examples.bin.exec.files"
filemode="755"/> 
>              <!--<zipfileset prefix="${product.name}/qa" refid="qa.bin.files" />-->

>          </zip> 
>          <delete file="${bin.tar.bundle}"/> 
>          <tar destfile="${bin.tar.bundle}" compression="gzip" longfile="gnu"> 
>              <tarfileset prefix="${product.name}" refid="river.bin.files" /> 
> -            <tarfileset prefix="${product.name}/examples" refid="examples.bin.files"
/> 
> -            <tarfileset prefix="${product..name}/examples" refid="examples.bin.exec.files"
filemode="755"/> 
>              <!--<tarfileset prefix="${product.name}/qa" refid="qa.bin.files" />-->

>          </tar> 
>      </target> 
> @@ -156,18 +139,6 @@ 
>   
>      </fileset> 
>   
> -    <fileset id="examples.srcfiles" dir="${basedir}/examples"> 
> -        <include name="**"/> 
> -        <exclude name="**/${lib}/"/> 
> -        <exclude name="**/${build}/"/> 
> -        <exclude name="**/prebuiltkeys/"/> 
> -        <exclude name="**/${doc}/"/> 
> -    </fileset> 
> - 
> -    <fileset id="examples.src.exec.files" dir="${basedir}/examples"> 
> -        <include name="**/scripts/*.sh"/> 
> -    </fileset> 
> - 
>      <fileset id="qa.src.files" dir="${basedir}/qa"> 
>          <include name="${src}/**"/> 
>          <include name="harness/**"/> 
> @@ -202,18 +173,11 @@ 
>          <delete file="${src.zip.bundle}"/> 
>          <zip destfile="${src.zip.bundle}" roundup="yes"> 
>              <zipfileset prefix="${product.name}" refid="river.src.files"/> 
> -            <zipfileset prefix="${product.name}/examples" refid="examples.src.files"/>

> -            <zipfileset prefix="${product.name}/examples" 
> -                    refid="examples.src.exec.files" filemode="755"/> 
>              <zipfileset prefix="${product.name}/qa" refid="qa.src.files" /> 
>          </zip> 
>          <delete file="${src.tar.bundle}"/> 
>          <tar destfile="${src.tar.bundle}" compression="gzip" longfile="gnu"> 
>              <tarfileset prefix="${product.name}" refid="river.src.files" /> 
> -            <tarfileset prefix="${product.name}/examples" 
> -                    refid="examples.src.files" /> 
> -            <tarfileset prefix="${product.name}/examples" 
> -                    refid="examples.src.exec.files" filemode="755"/> 
>              <tarfileset prefix="${product.name}/qa" refid="qasrc.files" /> 
>          </tar> 
>      </target> 
> @@ -515,10 +479,49 @@ 
>          </javac-cmd> 
>      </target> 
>   
> -    <target name="copy-extlibs" > 
> -        <copy todir="lib"> 
> -            <fileset refid="asm.jars"/> 
> -        </copy> 
> +    <property name="ivy.install.version" value="2.4.0"/> 
> +    <property name="ivy.jar.dir" value="${build}/lib"/> 
> +    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/> 
> +    <condition property="skip.ivy.download"> 
> +        <available file="${ivy.jar.file}"/> 
> +    </condition> 
> +     
> +    <target name="download-ivy" unless="skip.ivy.download"> 
> +        <mkdir dir="${ivy.jar.dir}"/> 
> +        <!-- download Ivy from web site so that it can be used even without any special
installation --> 
> +        <echo message="installing ivy..."/> 
> +        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"

> +             dest="${ivy.jar.file}" usetimestamp="true"/> 
> +    </target> 
> +     
> +    <!-- =================================  
> +     target: install-ivy          
> +       this target is not necessary if you put ivy.jar in your ant lib directory 
> +       if you already have ivy in your ant lib, you can simply remove this 
> +       target and the dependency the 'go' target has on it 
> +    ================================= --> 
> +    <target name="install-ivy" depends="download-ivy" description="--> install
ivy"> 
> +        <!-- try to load ivy here from local ivy dir, in case the user has not already
dropped 
> +        it into ant's lib dir (note that the latter copy will always take precedence).

> +        We will not fail as long as local lib dir exists (it may be empty) and 
> +        ivy is in at least one of ant's lib dir or the local lib dir --> 
> +        <path id="ivy.lib.path"> 
> +            <fileset dir="${ivy.jar.dir}" includes="*.jar"/> 
> +        </path> 
> +        <taskdef resource="org/apache/ivy/ant/antlib.xml" 
> +                 uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> 
> +    </target>     
> +     
> + 
> +    <target name="copy-extlibs" depends="install-ivy">         
> +        <!-- Let's use Ivy instead... --> 
> +        <ivy:resolve conf="*, tools"/> 
> +        <ivy:retrieve pattern="${lib}/[artifact]-[revision].[ext]"  
> +            conf="tools"/> 
> +        <ivy:retrieve pattern="test/${lib}/[artifact]-[revision].[ext]"  
> +            conf="tests"/> 
> +         
> + 
>      </target> 
>   
>      <target name="install-policy" 
> @@ -551,6 +554,7 @@ 
>      <target name="clean-jars" 
>          description="Deletes the lib, lib-dl, and lib-ext directories."> 
>          <delete dir="${lib.dir}" quiet="true" /> 
> +        <delete dir="${test.lib.dir}" quiet="true" /> 
>          <delete dir="${lib-dl.dir}"    quiet="true"/> 
>          <delete dir="${lib-ext.dir}" quiet="true"/> 
>      </target> 
> @@ -2159,7 +2163,7 @@ 
>                com/sun/jini/tool/envcheck/plugins/resources/*.properties" /> 
>          </jar> 
>          <preferredlistgen> 
> -            <arg line="-cp"    /> 
> +            <arg line="-cp"/> 
>              <arg path="${build.classes.dir}"/> 
>              <arg line="-jar"/> 
>              <arg path="${lib.dir}/tools.jar"/> 
> @@ -2192,40 +2196,30 @@ 
>              description="Build all, including subcomponents"> 
>              <!-- Call qa subcomponent build --> 
>          <ant dir="qa" target="build" inheritall="false" /> 
> -        <!-- Call examples/hello subcomponent build --> 
> -        <ant dir="examples/hello" target="build" inheritall="false" /> 
>      </target> 
>   
>      <target name="all.clean" depends="clean,clean-tests" 
>              description="Clean all, including subcomponents"> 
>          <!-- Call qa subcomponent build --> 
>          <ant dir="qa" target="clean" inheritall="false" /> 
> -        <!-- Call examples/hello subcomponent build --> 
> -        <ant dir="examples/hello" target="clean" inheritall="false" /> 
>      </target> 
>   
>      <target name="all.compile" depends="jars" 
>              description="Compile all, including subcomponents"> 
>          <!-- Call qa subcomponent build --> 
>          <ant dir="qa" target="compile" inheritall="false" /> 
> -        <!-- Call examples/hello subcomponent build --> 
> -        <ant dir="examples/hello" target="compile" inheritall="false" /> 
>      </target> 
>   
>      <target name="all.doc" depends="jars,river-doc" 
>              description="Generate javadoc for all, including subcomponents"> 
>          <!-- Call qa subcomponent build --> 
>          <ant dir="qa" target="doc" inheritall="false" /> 
> -        <!-- Call examples/hello subcomponent build --> 
> -        <ant dir="examples/hello" target="doc" inheritall="false" /> 
>      </target> 
>   
>      <target name="all.jars" depends="jars" 
>              description="Generate JAR files for all, including subcomponents"> 
>          <!-- Call qa subcomponent build --> 
>          <ant dir="qa" target="jars" inheritall="false" /> 
> -        <!-- Call examples/hello subcomponent build --> 
> -        <ant dir="examples/hello" target="jars" inheritall="false" /> 
>      </target> 
>   
>      <!-- TODO: cleanup and find out where exactly to publish to --> 
> 
> Modified: river/jtsk/branches/2.2/common.xml 
> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/common.xml?rev=1715098&r1=1715097&r2=1715098&view=diff

> ============================================================================== 
> --- river/jtsk/branches/2.2/common.xml (original) 
> +++ river/jtsk/branches/2.2/common.xml Thu Nov 19 06:11:20 2015 
> @@ -125,12 +125,13 @@ 
>          <pathelement path="${river.classes.dir}"/> 
>      </path> 
>   
> -    <fileset id="asm.jars" dir="${root}/asm"> 
> -        <include name="asm-3.2.jar" /> 
> -        <include name="asm-commons-3.2.jar" /> 
> +    <fileset id="asm.jars" dir="${root}/lib"> 
> +        <include name="asm-5.0.4.jar" /> 
> +        <include name="asm-commons-5.0.4.jar" /> 
> +        <include name="asm-tree-5.0.4.jar"/> 
>      </fileset> 
>   
> -    <fileset id="velocity.jars" dir="${root}/velocity"> 
> +    <fileset id="velocity.jars" dir="${root}/lib"> 
>          <include name="velocity-1.7.jar" /> 
>      </fileset> 
>   
> 
> Added: river/jtsk/branches/22/ivy.xml 
> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/ivy.xml?rev=1715098&view=auto

> ============================================================================== 
> --- river/jtsk/branches/2.2/ivy.xml (added) 
> +++ river/jtsk/branches/2.2/ivy.xml Thu Nov 19 06:11:20 2015 
> @@ -0,0 +1,40 @@ 
> +<?xml version="1.0" encoding="UTF-8"?> 
> +<!-- 
> + ! Licensed to the Apache Software Foundation (ASF) under one 
> + ! or more contributor license agreements.  See the NOTICE file 
> + ! distributed with this work for additional information 
> + ! regarding copyright ownership. The ASF licenses this file 
> + ! to you under the Apache License, Version 2.0 (the 
> + ! "License"); you may not use this file except in compliance 
> + ! with the License. You may obtain a copy of the License at 
> + ! 
> + !      http://www.apache.org/licenses/LICENSE-2.0 
> + ! 
> + ! Unless required by applicable law or agreed to in writing, software 
> + ! distributed under the License is distributed on an "AS IS" BASIS, 
> + ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
> + ! See the License for the specific language governing permissions and 
> + ! limitations under the License. 
> + !--> 
> +  
> +<ivy-module 
> +    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
> +    xsi:noNamespaceSchemaLocation='http://ant.apache.org/ivy/schemas/ivy.xsd' version="2.0">

> +    <info organisation="org.apache.river" 
> +          module="river"/> 
> +          <configurations> 
> +              <conf name="tools"/> 
> +              <conf name="tests"/> 
> +              <conf name="qa"/> 
> +          </configurations> 
> +    <dependencies> 
> +        <dependency org="org.ow2.asm" name="asm" rev="5.0.4" conf="tools->default"/>

> +        <dependency org="org.ow2.asm" name="asm-commons" rev="5.0.4" conf="tools->default"/>

> +        <dependency org="org.ow2.asm" name="asm-tree" rev="5.0.4" conf="tools->default"/>

> +        <dependency org="org.apache.velocity" name="velocity" rev="1.7" conf="tools->default"/>
        
> +        <dependency org="junit" name="junit" rev="4.11" conf="tests->default"/>

> +        <dependency org="orgmockito" name="mockito-all" rev="1.9.5" conf="tests->default"/>

> + 
> +    </dependencies>    
> + 
> +</ivy-module> 
> 
> Modified: river/jtsk/branches/2.2/qa/build.xml 
> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/qa/build.xml?rev=1715098&r1=1715097&r2=1715098&view=diff

> ============================================================================== 
> --- river/jtsk/branches/2.2/qa/build.xml (original) 
> +++ river/jtsk/branches/2.2/qa/build.xml Thu Nov 19 06:11:20 2015 
> @@ -180,7 +180,7 @@ 
>   
>      <target name="compile" depends="copy-resources" description="Build classes">

>          <property name="qa.source" value="5" /> 
> -        <property name="qa.target" value="jsr14" /> 
> +        <property name="qa.target" value="5" /> 
>          <javac-cmd source="${qa.source}" target="${qa.target}" source.dir="${src.dir}"
dest.dir="${build.classes.dir}"> 
>              <classpath refid="river.jars"/> 
>              <compilerarg value="-J-Xmx128m" /> 
> 
> Propchange: river/jtsk/branches/2.2/qa/doc/ 
> ------------------------------------------------------------------------------ 
> --- svn:ignore (original) 
> +++ svn:ignore Thu Nov 19 06:11:20 2015 
> @@ -1,2 +1,3 @@ 
>  api 
>  .~lock.qaarch.sdw# 
> +.~lock.qaarch.odt# 
> 
> Modified: river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/AbstractDependencyVisitor.java

> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/AbstractDependencyVisitor.java?rev=1715098&r1=1715097&r2=1715098&view=diff

> ============================================================================== 
> --- river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/AbstractDependencyVisitor.java
(original) 
> +++ river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/AbstractDependencyVisitor.java
Thu Nov 19 06:11:20 2015 
> @@ -2,7 +2,7 @@ package com.sun.jini.tool.classdepend; 
>   
>  /*** 
>   * ASM examples: examples showing how ASM can be used 
> - * Copyright (c) 2000-2005 INRIA, France Telecom 
> + * Copyright (c) 2000-2011 INRIA, France Telecom 
>   * All rights reserved. 
>   * 
>   * Redistribution and use in source and binary forms, with or without 
> @@ -30,232 +30,388 @@ package com.sun.jini.tool.classdepend; 
>   * THE POSSIBILITY OF SUCH DAMAGE. 
>   */ 
>   
> -import java.util.regex.Matcher; 
> -import java.util.regex.Pattern; 
> +import java.util.HashMap; 
> +import java.util.HashSet; 
> +import java.util.Map; 
> +import java.util.Set; 
> + 
>  import org.objectweb.asm.AnnotationVisitor; 
>  import org.objectweb.asm.ClassVisitor; 
>  import org.objectweb.asm.FieldVisitor; 
> +import org.objectweb.asm.Handle; 
>  import org.objectweb.asm.Label; 
>  import org.objectweb.asm.MethodVisitor; 
> +import org.objectweb.asm.Opcodes; 
>  import org.objectweb.asm.Type; 
> +import org.objectweb.asm.TypePath; 
>  import org.objectweb.asm.signature.SignatureReader; 
>  import org.objectweb.asm.signature.SignatureVisitor; 
>   
>  /** 
> - *  
> - *  
> + * DependencyVisitor 
> + * 
> + * @author Eugene Kuleshov 
>   */ 
> -abstract class AbstractDependencyVisitor extends AbstractVisitor { 
> +public abstract class AbstractDependencyVisitor extends ClassVisitor { 
> +    Set<String> packages = new HashSet<String>(); 
>   
> -    AbstractDependencyVisitor() { } 
> +    Map<String, Map<String, Integer>> groups = new HashMap<String, Map<String,
Integer>>(); 
>   
> -    abstract protected void addName(String name); 
> +    Map<String, Integer> current; 
>   
> -    /* -- ClassVisitor -- */ 
> +    public Map<String, Map<String, Integer>> getGlobals() { 
> +        return groups; 
> +    } 
>   
> -    public void visit(int version, int access, String name, String signature, 
> -              String superName, String[] interfaces) 
> -    { 
> -    if (signature == null) { 
> -        addNameInternal(superName); 
> -        addNames(interfaces); 
> -    } else { 
> -        addSignature(signature); 
> -    } 
> +    public Set<String> getPackages() { 
> +        return packages; 
>      } 
> -     
> -    public AnnotationVisitor visitAnnotation(String desc, boolean visible) { 
> -    addDesc(desc); 
> -    return this; 
> + 
> +    public AbstractDependencyVisitor() { 
> +        super(Opcodes.ASM5); 
>      } 
>   
> -    public FieldVisitor visitField(int access, String name, String desc, 
> -                   String signature, Object value) 
> -    { 
> -    if (signature == null) { 
> -        addDesc(desc); 
> -    } else { 
> -        addTypeSignature(signature); 
> -    } 
> -    if (value instanceof Type) { 
> -            addType((Type) value); 
> +    abstract protected void addName(String name); 
> + 
> +    // ClassVisitor 
> + 
> +    @Override 
> +    public void visit(final int version, final int access, final String name, 
> +            final String signature, final String superName, 
> +            final String[] interfaces) { 
> +        String p = getGroupKey(name); 
> +        current = groups.get(p); 
> +        if (current == null) { 
> +            current = new HashMap<String, Integer>(); 
> +            groups.put(p, current); 
>          } 
> -    return this; 
> -    } 
> -     
> -    public MethodVisitor visitMethod(int access, String name, String desc, 
> -                     String signature, String[] exceptions) 
> -    { 
> + 
>          if (signature == null) { 
> -            addMethodDesc(desc); 
> +            if (superName != null) { 
> +                addInternalName(superName); 
> +            } 
> +            addInternalNames(interfaces); 
>          } else { 
>              addSignature(signature); 
>          } 
> -        addNames(exceptions); 
> -        return this; 
>      } 
>   
> -    public void visitInnerClass(String name, String outerName, 
> -                String innerName, int access) 
> +    @Override 
> +    public void visitInnerClass(String name, String outerName, String innerName, 
> +                int access) 
>      { 
> -    /* XXX: Do we need to consider inner classes? 
> -         * Yes the old ClassDep tool includes them */ 
> -        addNameInternal(outerName); 
> -    addNameInternal(name); 
> +    addInternalName(outerName); 
> +    addInternalName(name); 
>      } 
>   
> -    /* -- MethodVisitor -- */ 
> +    @Override 
> +    public AnnotationVisitor visitAnnotation(final String desc, 
> +            final boolean visible) { 
> +        addDesc(desc); 
> +        return new AnnotationDependencyVisitor(); 
> +    } 
>   
> -    public AnnotationVisitor visitParameterAnnotation(int parameter, 
> -                              String desc, 
> -                              boolean visible) 
> -    { 
> +    @Override 
> +    public AnnotationVisitor visitTypeAnnotation(final int typeRef, 
> +            final TypePath typePath, final String desc, final boolean visible) { 
>          addDesc(desc); 
> -        return this; 
> +        return new AnnotationDependencyVisitor(); 
>      } 
>   
> -    public void visitTypeInsn(int opcode, String desc) { 
> -        if (desc.charAt(0) == '[') { 
> +    @Override 
> +    public FieldVisitor visitField(final int access, final String name, 
> +            final String desc, final String signature, final Object value) { 
> +        if (signature == null) { 
>              addDesc(desc); 
>          } else { 
> -            addNameInternal(desc); 
> -    } 
> +            addTypeSignature(signature); 
> +        } 
> +        if (value instanceof Type) { 
> +            addType((Type) value); 
> +        } 
> +        return new FieldDependencyVisitor(); 
>      } 
>   
> -    public void visitFieldInsn(int opcode, String owner, String name, 
> -                   String desc) 
> -    { 
> -        addNameInternal(owner); 
> -        addDesc(desc); 
> -    } 
> -     
> -    String pattern = "^\\[{0,2}L{0,1}(\\w+[/.]{1}[\\w$\\d/.]+);{0,1}$"; 
> -    Pattern arrayOfObjects = Pattern.compile(pattern); 
> -    public void visitMethodInsn(int opcode, String owner, String name, 
> -                String desc) 
> -    { 
> -        /* This filters out Generic's and primitive owners. 
> -         * 
> -         * Also when the owner is an array, containing Objects and 
> -         * the method name is clone(), (I think it's got something to do 
> -         * with cloning array's, this must be a new java 5 language feature 
> -         * I tested 1.4 code without this ever occurring)       
> -         * we can't get the Object's type 
> -         * using Type.getType(owner) due to the nature of  
> -         * the ASM Core API requiring bytecode be read sequentially. 
> -         * This only occurs with clone() which returns java.lang.Object 
> -         */ 
> -        Matcher match = arrayOfObjects.matcher(owner); 
> -        while (match.find()){ 
> -            String object = match.group(1); 
> -            addNameInternal(object); 
> -        }  
> -        addMethodDesc(desc); 
> +    @Override 
> +    public MethodVisitor visitMethod(final int access, final String name, 
> +            final String desc, final String signature, final String[] exceptions) {

> +        if (signature == null) { 
> +            addMethodDesc(desc); 
> +        } else { 
> +            addSignature(signature); 
> +        } 
> +        addInternalNames(exceptions); 
> +        return new MethodDependencyVisitor(); 
>      } 
>   
> -    public void visitLdcInsn(Object cst) { 
> -        if (cst instanceof Type) { 
> -            addType((Type) cst); 
> -    } 
> -    } 
> +    class AnnotationDependencyVisitor extends AnnotationVisitor { 
>   
> -    public void visitMultiANewArrayInsn(String desc, int dims) { 
> -        addDesc(desc); 
> -    } 
> +        public AnnotationDependencyVisitor() { 
> +            super(Opcodes.ASM5); 
> +        } 
>   
> -    public void visitLocalVariable(String name, String desc, String signature, 
> -                   Label start, Label end, int index) 
> -    { 
> -    if (signature != null) { 
> -        addTypeSignature(signature); 
> -    } 
> -    } 
> +        @Override 
> +        public void visit(final String name, final Object value) { 
> +            if (value instanceof Type) { 
> +                addType((Type) value); 
> +            } 
> +        } 
>   
> -    public void visitTryCatchBlock(Label start, Label end, Label handler, 
> -                   String type) 
> -    { 
> -        addNameInternal(type); 
> -    } 
> +        @Override 
> +        public void visitEnum(final String name, final String desc, 
> +                final String value) { 
> +            addDesc(desc); 
> +        } 
>   
> -    /* -- AnnotationVisitor -- */ 
> +        @Override 
> +        public AnnotationVisitor visitAnnotation(final String name, 
> +                final String desc) { 
> +            addDesc(desc); 
> +            return this; 
> +        } 
>   
> -    public void visit(String name, Object value) { 
> -        if (value instanceof Type) { 
> -            addType((Type) value); 
> -    } 
> +        @Override 
> +        public AnnotationVisitor visitArray(final String name) { 
> +            return this; 
> +        } 
>      } 
>   
> -    public void visitEnum(String name, String desc, String value) { 
> -        addDesc(desc); 
> -    } 
> +    class FieldDependencyVisitor extends FieldVisitor { 
>   
> -    public AnnotationVisitor visitAnnotation(String name, String desc) { 
> -        addDesc(desc); 
> -        return this; 
> +        public FieldDependencyVisitor() { 
> +            super(Opcodes.ASM5); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitAnnotation(String desc, boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitTypeAnnotation(final int typeRef, 
> +                final TypePath typePath, final String desc, 
> +                final boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
>      } 
>   
> -    /* -- SignatureVisitor -- */ 
> +    class MethodDependencyVisitor extends MethodVisitor { 
>   
> -    public void visitTypeVariable(String name) { 
> -        /* XXX: Need to do something? */ 
> -        //System.out.println(name); 
> +        public MethodDependencyVisitor() { 
> +            super(Opcodes.ASM5); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitAnnotationDefault() { 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitAnnotation(final String desc, 
> +                final boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitTypeAnnotation(final int typeRef, 
> +                final TypePath typePath, final String desc, 
> +                final boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitParameterAnnotation(final int parameter, 
> +                final String desc, final boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public void visitTypeInsn(final int opcode, final String type) { 
> +            addType(Type.getObjectType(type)); 
> +        } 
> + 
> +        @Override 
> +        public void visitFieldInsn(final int opcode, final String owner, 
> +                final String name, final String desc) { 
> +            addInternalName(owner); 
> +            addDesc(desc); 
> +        } 
> + 
> +        @Override 
> +        public void visitMethodInsn(final int opcode, final String owner, 
> +                final String name, final String desc, final boolean itf) { 
> +            addInternalName(owner); 
> +            addMethodDesc(desc); 
> +        } 
> + 
> +        @Override 
> +        public void visitInvokeDynamicInsn(String name, String desc, 
> +                Handle bsm, Object... bsmArgs) { 
> +            addMethodDesc(desc); 
> +            addConstant(bsm); 
> +            for (int i = 0; i < bsmArgs.length; i++) { 
> +                addConstant(bsmArgs[i]); 
> +            } 
> +        } 
> + 
> +        @Override 
> +        public void visitLdcInsn(final Object cst) { 
> +            addConstant(cst); 
> +        } 
> + 
> +        @Override 
> +        public void visitMultiANewArrayInsn(final String desc, final int dims) { 
> +            addDesc(desc); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitInsnAnnotation(int typeRef, 
> +                TypePath typePath, String desc, boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public void visitLocalVariable(final String name, final String desc, 
> +                final String signature, final Label start, final Label end, 
> +                final int index) { 
> +            addTypeSignature(signature); 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitLocalVariableAnnotation(int typeRef, 
> +                TypePath typePath, Label[] start, Label[] end, int[] index, 
> +                String desc, boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
> + 
> +        @Override 
> +        public void visitTryCatchBlock(final Label start, final Label end, 
> +                final Label handler, final String type) { 
> +            if (type != null) { 
> +                addInternalName(type); 
> +            } 
> +        } 
> + 
> +        @Override 
> +        public AnnotationVisitor visitTryCatchAnnotation(int typeRef, 
> +                TypePath typePath, String desc, boolean visible) { 
> +            addDesc(desc); 
> +            return new AnnotationDependencyVisitor(); 
> +        } 
>      } 
>   
> -    public void visitClassType(String name) { 
> -        addNameInternal(name); 
> +    class SignatureDependencyVisitor extends SignatureVisitor { 
> + 
> +        String signatureClassName; 
> + 
> +        public SignatureDependencyVisitor() { 
> +            super(Opcodes.ASM5); 
> +        } 
> + 
> +        @Override 
> +        public void visitClassType(final String name) { 
> +            signatureClassName = name; 
> +            addInternalName(name); 
> +        } 
> + 
> +        @Override 
> +        public void visitInnerClassType(final String name) { 
> +            signatureClassName = signatureClassName + "$" + name; 
> +            addInternalName(signatureClassName); 
> +        } 
>      } 
>   
> -    public void visitInnerClassType(String name) { 
> -        // This is not a fully qualified class name, ignore. 
> +    // --------------------------------------------- 
> + 
> +    private String getGroupKey(String name) { 
> +        int n = name.lastIndexOf('/'); 
> +        if (n > -1) { 
> +            name = name.substring(0, n); 
> +        } 
> +        packages.add(name); 
> +        return name; 
>      } 
>   
> -    /* -- Utilities -- */ 
> +    /* 
> +    private void addName(final String name) { 
> +        if (name == null) { 
> +            return; 
> +        } 
> +        String p = getGroupKey(name); 
> +        if (current.containsKey(p)) { 
> +            current.put(p, current.get(p) + 1); 
> +        } else { 
> +            current.put(p, 1); 
> +        } 
> +    } 
> +    */ 
>   
> -    private void addNameInternal(String name) { 
> -        if (name != null) { 
> -        addName(name.replace('/', '.')); 
> +    void addInternalName(final String name) { 
> +    if (name != null) { 
> +        addType(Type.getObjectType(name)); 
>      } 
>      } 
>   
> -    private void addNames(String[] names) { 
> -    if (names != null) { 
> -            int l = names.length; 
> -        for (int i = 0; i < l; i++) { 
> -                String name = names[i]; 
> -        addNameInternal(name); 
> -        } 
> -    } 
> +    private void addInternalNames(final String[] names) { 
> +        for (int i = 0; names != null && i < names.length; i++) { 
> +            addInternalName(names[i]); 
> +        } 
>      } 
>   
> -    private void addDesc(String desc) { 
> +    void addDesc(final String desc) { 
>          addType(Type.getType(desc)); 
>      } 
>   
> -    private void addMethodDesc(String desc) { 
> +    void addMethodDesc(final String desc) { 
>          addType(Type.getReturnType(desc)); 
> -        Type [] type = Type.getArgumentTypes(desc); 
> -        int l = type.length; 
> -    for (int i = 0; i < l; i++) {             
> -            addType(type[i]); 
> -    } 
> +        Type[] types = Type.getArgumentTypes(desc); 
> +        for (int i = 0; i < types.length; i++) { 
> +            addType(types[i]); 
> +        } 
>      } 
>   
> -    private void addType(Type t) { 
> +    void addType(final Type t) { 
>          switch (t.getSort()) { 
> -            case Type.ARRAY: 
> -                addType(t.getElementType()); 
> -                break; 
> -            case Type.OBJECT: 
> -                addNameInternal(t.getClassName()); 
> -                break; 
> +        case Type.ARRAY: 
> +            addType(t.getElementType()); 
> +            break; 
> +        case Type.OBJECT: 
> +            addName(t.getInternalName()); 
> +            break; 
> +        case Type.METHOD: 
> +            addMethodDesc(t.getDescriptor()); 
> +            break; 
> +        } 
> +    } 
> + 
> +    private void addSignature(final String signature) { 
> +        if (signature != null) { 
> +            new SignatureReader(signature) 
> +                    .accept(new SignatureDependencyVisitor()); 
>          } 
>      } 
>   
> -    private void addSignature(String signature) { 
> -    new SignatureReader(signature).accept(this); 
> +    void addTypeSignature(final String signature) { 
> +        if (signature != null) { 
> +            new SignatureReader(signature) 
> +                    .acceptType(new SignatureDependencyVisitor()); 
> +        } 
>      } 
>   
> -    private void addTypeSignature(String signature) { 
> -    new SignatureReader(signature).acceptType(this); 
> +    void addConstant(final Object cst) { 
> +        if (cst instanceof Type) { 
> +            addType((Type) cst); 
> +        } else if (cst instanceof Handle) { 
> +            Handle h = (Handle) cst; 
> +            addInternalName(h.getOwner()); 
> +            addMethodDesc(h.getDesc()); 
> +        } 
>      } 
>  } 
> 
> Modified: river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/ReferencedClasses.java

> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/ReferencedClasses.java?rev=1715098&r1=1715097&r2=1715098&view=diff

> ============================================================================== 
> --- river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/ReferencedClasses.java
(original) 
> +++ river/jtsk/branches/2.2/src/com/sun/jini/tool/classdepend/ReferencedClasses.java
Thu Nov 19 06:11:20 2015 
> @@ -21,7 +21,11 @@ import java.io.IOException; 
>  import java.io.InputStream; 
>  import java.util.HashSet; 
>  import java.util.Set; 
> + 
> +import org.objectweb.asm.Attribute; 
>  import orgobjectweb.asm.ClassReader; 
> +import org.objectweb.asm.ClassVisitor; 
> +import org.objectweb.asm.Opcodes; 
>   
>  /** 
>   * A utility class for computing the classes referred to by another class. 
> @@ -56,7 +60,8 @@ public class ReferencedClasses { 
>      new ClassReader(in).accept( 
>          new AbstractDependencyVisitor() { 
>          protected void addName(String name) { 
> -            dependencies.add(name); 
> +            String className = name.replace('/', '.'); 
> +            dependencies.add(className); 
>          } 
>          }, 
>          ClassReader.SKIP_DEBUG); 
> 
> Modified: river/jtsk/branches/2.2/src/manifest/tools.mf 
> URL: http://svn.apache.org/viewvc/river/jtsk/branches/2.2/src/manifest/tools.mf?rev=1715098&r1=1715097&r2=1715098&view=diff

> ============================================================================== 
> --- river/jtsk/branches/2.2/src/manifest/tools.mf (original) 
> +++ river/jtsk/branches/2.2/src/manifest/tools.mf Thu Nov 19 06:11:20 2015 
> @@ -1,3 +1,3 @@ 
>  Manifest-Version: 1.0 
>  Main-Class: com.sun.jini..tool.ClassServer 
> -Class-Path: jsk-platform.jar jsk-lib.jar asm-3.2.jar asm-commons-3.2.jar 
> +Class-Path: jsk-platform.jar jsk-lib.jar asm-5.0.4.jar asm-commons-5.0.4.jar 
> 
> 
> 



Mime
View raw message