Bug 74600 - [1.5] GenericTypeTest differences
Summary: [1.5] GenericTypeTest differences
Status: RESOLVED WONTFIX
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M4   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-09-22 12:23 EDT by Kent Johnson CLA
Modified: 2005-02-16 09:40 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kent Johnson CLA 2004-09-22 12:23:14 EDT
test117: javac has found error(s) although we're expecting conform result:

X.java:1: type parameter X.MX.MMX is not within its bound
public class X <T extends X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>{
                                ^
X.java:4: type parameter X.MX.MMX is not within its bound
        new X<X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>().new 
MX<Exception>();
                    ^
X.java:4: type parameter X.MX.MMX is not within its bound
        new X<X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>().new 
MX<Exception>();
                                                                      ^
X.java:7: type parameter X.MX.MMX is not within its bound
    void foo(X<X.MX.MMX>.MX<X>.MMX<X> mx) {
                   ^
4 errors

X.java
public class X <T extends X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>{
    public static void main(String [] args) {
        
        new X<X<X.MX.MMX>.MX<Runnable>.MMX<Iterable<String>>>().new 
MX<Exception>();
        System.out.println("SUCCESS");
    }
    void foo(X<X.MX.MMX>.MX<X>.MMX<X> mx) {
    }
    
    class MX <MT> {
        class MMX <MMT> {
        }
    }
}


========================================
test147: javac displays warning(s) although we're expecting conform result:

X.java:7: warning: [unchecked] unchecked call to <T>toArray(T[]) as a member 
of the raw type java.util.ArrayList
		list.toArray(tokens);
                            ^
1 warning

X.java
import java.util.ArrayList;

public class X {
	public static void main(String[] args) {
	    char[][] tokens = new char[0][];
	    ArrayList list = new ArrayList();
		list.toArray(tokens);
      System.out.println("SUCCESS");
    }    	
}


========================================
test166: javac displays warning(s) although we're expecting conform result:

X.java:14: warning: [unchecked] unchecked call to AX(E) as a member of the raw 
type AX
		return new AX("SUCCESS");
                       ^
X.java:14: warning: [unchecked] unchecked conversion
found   : AX
required: AX<T>
		return new AX("SUCCESS");
                       ^
2 warnings

X.java
public class X {
    
    public static void main(String[] args) {
        AX<X> ax = new AX<X>(new X());
        AX<String> a = bar(ax, true);
        String s = a.get();
        System.out.println(s);
	}
    public static <T> AX<T> bar(AX<?> a, boolean recurse) {
        if (recurse) {
	        AX<String> as = bar(a, false);
			String s = as.get();
        }
		return new AX("SUCCESS");
    }    
}
class AX<E> {
    E e;
    AX(E e) { this.e = e; }
    E get() { return this.e; }
}


========================================
test167: javac displays warning(s) although we're expecting conform result:

X.java:9: warning: [unchecked] unchecked call to AX(E) as a member of the raw 
type AX
		return new AX("SUCCESS");
                       ^
X.java:9: warning: [unchecked] unchecked conversion
found   : AX
required: AX<T,U>
		return new AX("SUCCESS");
                       ^
2 warnings

X.java
public class X {
    
    public static void main(String[] args) {
        AX<String, Thread> a = bar();
        String s = a.get();
        System.out.println(s);
	}
    public static <T, U> AX<T, U> bar() {
		return new AX("SUCCESS");
    }    
}
class AX<E, F> {
    E e;
    AX(E e) { this.e = e; }
    E get() { return this.e; }
}


========================================
test177: javac has found no error/warning although we're expecting negative 
result:
----------
1. WARNING in X.java (at line 4)
	return (T) t;
	       ^^^^^
Unnecessary cast to type T for expression of type T
----------

X.java
public class X <T> {
	
	T foo(T t) {
		return (T) t;
	}
}


========================================
test217: javac has found no error/warning although we're expecting negative 
result:
----------
1. WARNING in X.java (at line 5)
	String string = (String) l.get(0);
	                ^^^^^^^^^^^^^^^^^
Unnecessary cast to type String for expression of type String
----------

X.java
import java.util.ArrayList;
public class X {
    public static void main(String [] args) {
		ArrayList<String> l= new ArrayList<String>();
		String string = (String) l.get(0);
    }
}


========================================
test232: javac displays warning(s) although we're expecting conform result:

X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal("BAD");
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    private T val;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal("BAD");
	}
	public static void main(String[] args) {
	    Container<Integer> cont=new Container<Integer>();
	    cont.setVal(new Integer(0));
	    badMethod(cont);
	    Object someVal = cont.getVal(); // no cast 
	    System.out.println(cont.getVal()); // no cast 
	}
}


========================================
test233: javac displays warning(s) although we're expecting conform result:

X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal(new Long(0));
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    private T val;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal(new Long(0));
	}
	public static void main(String[] args) {
	    Container<Integer> cont=new Container<Integer>();
	    cont.setVal(new Integer(0));
	    badMethod(cont);
	    Number someVal = cont.getVal();// only cast to Number 
	    System.out.println("SUCCESS"); 
	}
}


========================================
test234: javac displays warning(s) although we're expecting conform result:

X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal("BAD");
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    public T val;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal("BAD");
	}
	public static void main(String[] args) {
	    Container<Integer> cont=new Container<Integer>();
	    cont.setVal(new Integer(0));
	    badMethod(cont);
	    Object someVal = cont.val; // no cast 
	    System.out.println(cont.val); // no cast 
	}
}


========================================
test235: javac displays warning(s) although we're expecting conform result:

X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal(new Long(0));
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    public T val;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal(new Long(0));
	}
	public static void main(String[] args) {
	    Container<Integer> cont=new Container<Integer>();
	    cont.setVal(new Integer(0));
	    badMethod(cont);
	    Number someVal = cont.val;// only cast to Number 
	    System.out.println("SUCCESS"); 
	}
}


========================================
test236: javac displays warning(s) although we're expecting conform result:

X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal("BAD");
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    public T val;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal("BAD");
	}
	public static void main(String[] args) {
	    Container<Integer> cont=new Container<Integer>();
	    cont.setVal(new Integer(0));
	    badMethod(cont);
	    Object someVal = (cont).val; // no cast 
	    System.out.println((cont).val); // no cast 
	}
}


========================================
test237: javac displays warning(s) although we're expecting conform result:

X.java:13: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal(new Long(0));
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    public T val;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal(new Long(0));
	}
	public static void main(String[] args) {
	    Container<Integer> cont=new Container<Integer>();
	    cont.setVal(new Integer(0));
	    badMethod(cont);
	    Number someVal = (cont).val;// only cast to Number 
	    System.out.println("SUCCESS"); 
	}
}


========================================
test238: javac displays warning(s) although we're expecting conform result:

X.java:14: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal("BAD");
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    public T val;
		Container<T> next;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal("BAD");
	}
	public static void main(String[] args) {
	    Container<Integer> cont = new Container<Integer>();
		cont.next = new Container<Integer>();
	    cont.next.setVal(new Integer(0));
	    badMethod(cont.next);
	    Object someVal = cont.next.val; // no cast 
	    System.out.println(cont.next.val); // no cast 
	}
}


========================================
test239: javac displays warning(s) although we're expecting conform result:

X.java:14: warning: [unchecked] unchecked call to setVal(T) as a member of the 
raw type X.Container
	    x.setVal(new Long(0));
                    ^
1 warning

X.java
public class X {
 	static class Container<T>{
	    public T val;
		Container<T> next;
	    public T getVal() {
	        return val;
	    }
	    public void setVal(T val) {
	        this.val = val;
	    }
	}
	public static void badMethod(Container<?> param){
	    Container x=param;
	    x.setVal(new Long(0));
	}
	public static void main(String[] args) {
	    Container<Integer> cont = new Container<Integer>();
		cont.next = new Container<Integer>();
	    cont.next.setVal(new Integer(0));
	    badMethod(cont.next);
	    Number someVal = cont.next.val;// only cast to Number 
	    System.out.println("SUCCESS"); 
	}
}


========================================
test242: javac has found no error/warning although we're expecting negative 
result:
----------
1. WARNING in X.java (at line 7)
	final Class<? extends Object> clazz = (Class<? extends Object>) 
classes.get("test");
	                                      
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Unnecessary cast to type Class<? extends Object> for expression of type Class
----------

X.java
import java.util.HashMap;
import java.util.Map;
public class X {
    private static final Map<String, Class> classes = new HashMap<String, 
Class>();
    public static void main(String[] args) throws Exception {
    	classes.put("test", X.class);
        final Class<? extends Object> clazz = (Class<? extends Object>) 
classes.get("test");
        Object o = clazz.newInstance();
    }
}


========================================
test298: javac has found error(s) although we're expecting conform result:

X.java:5: X is not abstract and does not override abstract method putAll
(java.util.Map<? extends java.lang.String,? extends V>) in java.util.Map
public class X<V> implements Map<String, V> {
       ^
1 error

X.java
import java.util.Collection;
import java.util.Map;
import java.util.Set;

public class X<V> implements Map<String, V> {
   private Map<String, V> backingMap;
   
   public static void main(String [] args) {
        System.out.println("SUCCESS");
   }
   public int size() { return 0; }
   public boolean isEmpty() { return false; }
   public boolean containsKey(Object key) { return false; }
   public boolean containsValue(Object value) { return false; }
   public V get(Object key) { return null; }
   public V put(String key, V value) { return null; }
   public V remove(Object key) { return null; }
   public void clear() { }
   public Set<String> keySet() { return null; }
   public Collection<V> values() { return null; }
   public void putAll(Map<String, ? extends V> t) { }
   public Set<Map.Entry<String, V>> entrySet() {
      return this.backingMap.entrySet();
   }
}
Comment 1 Philipe Mulet CLA 2004-11-10 11:28:36 EST
Closing. There are expected differences, and others which changed since then.