Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorssankaran2014-03-16 01:21:31 +0000
committerssankaran2014-03-16 01:44:25 +0000
commitf54544578803a284164af1b5fc079b21d562b153 (patch)
tree0a1a7738d6d86b747af4e5f4da1be9e9f7298463
parent11df24c82f137b648cfb47e17dff572d95276eda (diff)
downloadeclipse.jdt.core-f54544578803a284164af1b5fc079b21d562b153.tar.gz
eclipse.jdt.core-f54544578803a284164af1b5fc079b21d562b153.tar.xz
eclipse.jdt.core-f54544578803a284164af1b5fc079b21d562b153.zip
Partial Fix for Bug 430425 - [1.8][compiler] Type mismatch: cannotP20140316-1600BETA_JAVA8
convert from StyleConverter<ParsedValue[],Insets> to StyleConverter<ParsedValue[],Insets>
-rw-r--r--org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java68
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java7
2 files changed, 74 insertions, 1 deletions
diff --git a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java
index 8725893f28..c41c30eb86 100644
--- a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java
+++ b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java
@@ -14,6 +14,8 @@
*******************************************************************************/
package org.eclipse.jdt.core.tests.builder;
+import java.io.File;
+
import junit.framework.Test;
import org.eclipse.core.runtime.IPath;
@@ -23,7 +25,7 @@ import org.eclipse.jdt.core.tests.util.AbstractCompilerTest;
import org.eclipse.jdt.core.tests.util.Util;
public class IncrementalTests18 extends BuilderTests {
-
+
public IncrementalTests18(String name) {
super(name);
}
@@ -275,4 +277,68 @@ public class IncrementalTests18 extends BuilderTests {
incrementalBuild(projectPath);
expectingNoProblems();
}
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=430425, [1.8][compiler] Type mismatch: cannot convert from StyleConverter<ParsedValue[],Insets> to StyleConverter<ParsedValue[],Insets>
+ public void test430425() throws JavaModelException {
+ IPath projectPath = env.addProject("Project", "1.8");
+ String jreDirectory = Util.getJREDirectory();
+ String jfxJar = Util.toNativePath(jreDirectory + "/lib/ext/jfxrt.jar");
+ File file = new File(jfxJar);
+ if (file.exists())
+ env.addExternalJars(projectPath, Util.concatWithClassLibs(jfxJar, false));
+ else
+ return;
+
+ // remove old package fragment root so that names don't collide
+ env.removePackageFragmentRoot(projectPath, "");
+
+ IPath root = env.addPackageFragmentRoot(projectPath, "src");
+ env.setOutputFolder(projectPath, "bin");
+
+ env.addClass(root, "javafx.css", "StyleConverter",
+ "package javafx.css;\n" +
+ "import com.sun.javafx.css.converters.InsetsConverter;\n" +
+ "import javafx.geometry.Insets;\n" +
+ "public class StyleConverter<F, T> {\n" +
+ " public static StyleConverter<ParsedValue[], Insets> getInsetsConverter() {\n" +
+ " return InsetsConverter.getInstance();\n" +
+ " }\n" +
+ " void fred5555() {\n" +
+ " }\n" +
+ "}\n"
+ );
+ env.addClass(root, "com.sun.javafx.css.converters", "InsetsConverter",
+ "package com.sun.javafx.css.converters;\n" +
+ "import com.sun.javafx.css.StyleConverterImpl;\n" +
+ "import javafx.css.ParsedValue;\n" +
+ "import javafx.css.StyleConverter;\n" +
+ "import javafx.geometry.Insets;\n" +
+ "public final class InsetsConverter extends StyleConverterImpl<ParsedValue[], Insets> {\n" +
+ " public static StyleConverter<ParsedValue[], Insets> getInstance() {\n" +
+ " return null;\n" +
+ " }\n" +
+ "}\n"
+ );
+ env.addClass(root, "javafx.css", "ParsedValue",
+ "package javafx.css;\n" +
+ "public class ParsedValue<V, T> {\n" +
+ "}\n"
+ );
+ env.getJavaProject("Project").setOption(JavaCore.COMPILER_PB_RAW_TYPE_REFERENCE, JavaCore.IGNORE);
+ fullBuild(projectPath);
+ expectingNoProblems();
+ env.addClass(root, "javafx.css", "StyleConverter",
+ "package javafx.css;\n" +
+ "import com.sun.javafx.css.converters.InsetsConverter;\n" +
+ "import javafx.geometry.Insets;\n" +
+ "public class StyleConverter<F, T> {\n" +
+ " public static StyleConverter<ParsedValue[], Insets> getInsetsConverter() {\n" +
+ " return InsetsConverter.getInstance();\n" +
+ " }\n" +
+ " void fred555() {\n" +
+ " }\n" +
+ "}\n"
+ );
+ incrementalBuild(projectPath);
+ expectingNoProblems();
+ }
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java
index 58ed4cca48..f270280e8c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ArrayBinding.java
@@ -442,6 +442,13 @@ public char[] sourceName() {
public void swapUnresolved(UnresolvedReferenceBinding unresolvedType, ReferenceBinding resolvedType, LookupEnvironment env) {
if (this.leafComponentType == unresolvedType) { //$IDENTITY-COMPARISON$
this.leafComponentType = env.convertUnresolvedBinaryToRawType(resolvedType);
+ /* Leaf component type is the key in the type system. If it undergoes change, the array has to be rehashed.
+ We achieve by creating a fresh array with the new component type and equating this array's id with that.
+ This means this array can still be found under the old key, but that is harmless (since the component type
+ is always consulted (see TypeSystem.getArrayType())
+ */
+ if (this.leafComponentType != resolvedType) //$IDENTITY-COMPARISON$
+ this.id = env.createArrayType(this.leafComponentType, this.dimensions, this.typeAnnotations).id;
this.tagBits |= this.leafComponentType.tagBits & (TagBits.HasTypeVariable | TagBits.HasDirectWildcard | TagBits.HasMissingType | TagBits.HasCapturedWildcard);
}
}

Back to the top