Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2019-12-10 21:37:17 +0000
committerStephan Herrmann2019-12-14 12:56:21 +0000
commit5255d6d0ba1ee74633a638e1aa2cf4d5175d5dc2 (patch)
tree871164d12c9ed9b148facc79b3e0f51f086dde3a
parent5db0d28d69c3e92cc9fd2bca1e43b9368d92c855 (diff)
downloadeclipse.jdt.core-5255d6d0ba1ee74633a638e1aa2cf4d5175d5dc2.tar.gz
eclipse.jdt.core-5255d6d0ba1ee74633a638e1aa2cf4d5175d5dc2.tar.xz
eclipse.jdt.core-5255d6d0ba1ee74633a638e1aa2cf4d5175d5dc2.zip
Bug 534223 - Getting "Inconsistent classfile encountered: The undefined
type parameter K is referenced " Also: - update of service versions - remove unused API filters - resolve warnings in o.e.j.core.tests.compiler Change-Id: If9930422a5914308ce789684b013f3b2264b4a80
-rw-r--r--org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF2
-rw-r--r--org.eclipse.jdt.core.tests.compiler/pom.xml2
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java2
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java35
-rw-r--r--org.eclipse.jdt.core/.settings/.api_filters106
-rw-r--r--org.eclipse.jdt.core/META-INF/MANIFEST.MF2
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java27
-rw-r--r--org.eclipse.jdt.core/pom.xml2
8 files changed, 58 insertions, 120 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
index 06473e3aaf..acfe834834 100644
--- a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core.tests.compiler;singleton:=true
-Bundle-Version: 3.12.1000.qualifier
+Bundle-Version: 3.12.1100.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.jdt.core.tests.compiler,
diff --git a/org.eclipse.jdt.core.tests.compiler/pom.xml b/org.eclipse.jdt.core.tests.compiler/pom.xml
index a674c791e3..db6c9351e9 100644
--- a/org.eclipse.jdt.core.tests.compiler/pom.xml
+++ b/org.eclipse.jdt.core.tests.compiler/pom.xml
@@ -20,7 +20,7 @@
</parent>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core.tests.compiler</artifactId>
- <version>3.12.1000-SNAPSHOT</version>
+ <version>3.12.1100-SNAPSHOT</version>
<packaging>eclipse-test-plugin</packaging>
<properties>
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java
index f1d67a2706..6dad28ad78 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java
@@ -52817,7 +52817,7 @@ protected static class Duration implements Comparable<Duration> {
@Override
public String toString() {
- return "#"+index + " " + durationMs + "ms" + (isExcluded?" (excluded)":"");
+ return "#"+this.index + " " + this.durationMs + "ms" + (this.isExcluded?" (excluded)":"");
}
}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java
index fcf06d9d42..65a561804a 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java
@@ -10006,4 +10006,39 @@ public void testBug508834_comment0() {
"The method define(FuncN, TODO[]) is ambiguous for the type Test\n" +
"----------\n");
}
+
+ public void testBug534223() {
+ Runner runner = new Runner();
+ String sourceX =
+ "package p;\n" +
+ "public class X {\n" +
+ " <S> void m() {\n" +
+ " Runnable r = () -> {\n" +
+ " IFC<S> i = new IFC<S>() {\n" +
+ " public void n(S s) {}\n" +
+ " };\n" +
+ " if (i != null)\n" +
+ " System.out.println(i);\n" +
+ " };\n" +
+ " r.run();\n" +
+ " }\n" +
+ "}\n";
+ runner.testFiles = new String[] {
+ "p/IFC.java",
+ "package p;\n" +
+ "public interface IFC<T> {\n" +
+ " void n(T t);\n" +
+ "}\n",
+ "p/X.java",
+ sourceX
+ };
+ runner.runConformTest();
+ runner.shouldFlushOutputDirectory = false;
+ runner.testFiles = new String[] {
+ "p/X.java",
+ sourceX
+ };
+ runner.runConformTest(); // don't use pre-compiled p/X$1.class
+ }
+
}
diff --git a/org.eclipse.jdt.core/.settings/.api_filters b/org.eclipse.jdt.core/.settings/.api_filters
deleted file mode 100644
index f5f3fac15f..0000000000
--- a/org.eclipse.jdt.core/.settings/.api_filters
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.jdt.core" version="2">
- <resource path="compiler/org/eclipse/jdt/core/compiler/CategorizedProblem.java" type="org.eclipse.jdt.core.compiler.CategorizedProblem">
- <filter comment="PREVIEW RELATED" id="336658481">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.compiler.CategorizedProblem"/>
- <message_argument value="CAT_PREVIEW_RELATED"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="compiler/org/eclipse/jdt/core/compiler/IProblem.java" type="org.eclipse.jdt.core.compiler.IProblem">
- <filter comment="BETA_JAVA13 addition of preview related base" id="388194388">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.compiler.IProblem"/>
- <message_argument value="IgnoreCategoriesMask"/>
- <message_argument value="4194303"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="dom/org/eclipse/jdt/core/dom/ASTVisitor.java" type="org.eclipse.jdt.core.dom.ASTVisitor">
- <filter comment="Not required as it is a part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.ASTVisitor"/>
- <message_argument value="visit(SwitchExpression)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="dom/org/eclipse/jdt/core/dom/BreakStatement.java" type="org.eclipse.jdt.core.dom.BreakStatement">
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
- <message_argument value="getExpression()"/>
- </message_arguments>
- </filter>
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
- <message_argument value="isImplicit()"/>
- </message_arguments>
- </filter>
- <filter comment="preview feature - transient" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
- <message_argument value="propertyDescriptors(int, boolean)"/>
- </message_arguments>
- </filter>
- <filter comment="Not valid for Java 13" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
- <message_argument value="setExpression(Expression)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="dom/org/eclipse/jdt/core/dom/SwitchCase.java" type="org.eclipse.jdt.core.dom.SwitchCase">
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchCase"/>
- <message_argument value="expressions()"/>
- </message_arguments>
- </filter>
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchCase"/>
- <message_argument value="isSwitchLabeledRule()"/>
- </message_arguments>
- </filter>
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchCase"/>
- <message_argument value="setSwitchLabeledRule(boolean)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="dom/org/eclipse/jdt/core/dom/SwitchExpression.java" type="org.eclipse.jdt.core.dom.SwitchExpression">
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
- <message_argument value="getExpression()"/>
- </message_arguments>
- </filter>
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
- <message_argument value="propertyDescriptors(int)"/>
- </message_arguments>
- </filter>
- <filter comment="preview feature - transient" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
- <message_argument value="propertyDescriptors(int, boolean)"/>
- </message_arguments>
- </filter>
- <filter comment="No more an API as part of preview feature" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
- <message_argument value="setExpression(Expression)"/>
- </message_arguments>
- </filter>
- <filter comment="Only for Java 13" id="338944126">
- <message_arguments>
- <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
- <message_argument value="statements()"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/org.eclipse.jdt.core/META-INF/MANIFEST.MF b/org.eclipse.jdt.core/META-INF/MANIFEST.MF
index c3a0b03eee..594a60d7c3 100644
--- a/org.eclipse.jdt.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core; singleton:=true
-Bundle-Version: 3.20.0.qualifier
+Bundle-Version: 3.20.100.qualifier
Bundle-Activator: org.eclipse.jdt.core.JavaCore
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
index 578d000f53..9835a4607f 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
@@ -5960,24 +5960,33 @@ public class ClassFile implements TypeConstants, TypeIds {
private TypeBinding getNewTypeBinding(char[] typeConstantPoolName, Scope scope) {
char[] typeName = typeConstantPoolName;
+ if (isLikelyLocalTypeName(typeName)) {
+ // find local type in innerClassesBindings:
+ Set<TypeBinding> innerTypeBindings = this.innerClassesBindings.keySet();
+ for (TypeBinding binding : innerTypeBindings) {
+ if (CharOperation.equals(binding.constantPoolName(), typeName))
+ return binding;
+ }
+ }
TypeBinding type = (TypeBinding) scope.getTypeOrPackage(CharOperation.splitOn('/', typeName));
if (!type.isValidBinding()) {
ProblemReferenceBinding problemReferenceBinding = (ProblemReferenceBinding) type;
if ((problemReferenceBinding.problemId() & ProblemReasons.InternalNameProvided) != 0) {
type = problemReferenceBinding.closestMatch();
- } else if ((problemReferenceBinding.problemId() & ProblemReasons.NotFound) != 0 && this.innerClassesBindings != null) {
- // check local inner types to see if this is a anonymous type
- Set<TypeBinding> innerTypeBindings = this.innerClassesBindings.keySet();
- for (TypeBinding binding : innerTypeBindings) {
- if (CharOperation.equals(binding.constantPoolName(), typeName)) {
- type = binding;
- break;
- }
- }
}
}
return type;
}
+
+ private boolean isLikelyLocalTypeName(char[] typeName) {
+ int dollarPos = CharOperation.lastIndexOf('$', typeName);
+ while (dollarPos != -1) {
+ if (Character.isDigit(typeName[dollarPos+1]))
+ return true; // name segment starts with a digit => likely a local type (but still "$0" etc. could be part of the source name)
+ dollarPos = CharOperation.lastIndexOf('$', typeName, 0, dollarPos-1);
+ }
+ return false;
+ }
private TypeBinding getANewArrayTypeBinding(char[] typeConstantPoolName, Scope scope) {
if (typeConstantPoolName[0] == '[') {
diff --git a/org.eclipse.jdt.core/pom.xml b/org.eclipse.jdt.core/pom.xml
index 072033f2fb..7180de1a4c 100644
--- a/org.eclipse.jdt.core/pom.xml
+++ b/org.eclipse.jdt.core/pom.xml
@@ -18,7 +18,7 @@
</parent>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
- <version>3.20.0-SNAPSHOT</version>
+ <version>3.20.100-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<properties>

Back to the top